커널에서 static inline 함수선언과 wrapping

2025. 9. 20. 23:56·Linux

static inline

드라이버 분석중에

특정 함수 호출을 추적해보니 다른 파일에서 static inline으로 선언되어있는걸 알았다.

 

예를 들어서,

mem.c에서 register_chrdev를 호출,

register_chrdev를 추적해보니 다른 include/linux/fs.파일에서 static inline으로 선언됨.

 

include/linux/fs.h에 선언되어있음

 

inline키워드를 붙이면, 컴파일시에 코드 자체를 호출장소에 삽입.

즉, register_chrdev가 호출된 장소에 register_chrdev코드 자체를 삽입.

이 코드 삽입 자체가 compile time에 이뤄져야해서 .h에 선언됨.

 

static 키워드를 붙이면, 다른 파일에서 사용이 불가능하지만, inline 키워드로 코드 자체를 삽입하기때문에

문제 없다.

왜?

성능 최적화와 코드 안전성 때문.

자주 호출되는 함수를, inline으로 선언되면 호출 오버헤드가 발생하지 않으므로 성능향상된다.

근데, 코드의 길이가 긴 코드를 inline으로 삽입하면 오히려 비효율적일 수도?


wrapping

결국 register_chrdev는 __register_chrdev함수를 wrapping한 wrapper 함수이다.

커널에는 이런 wrapping이 많이 등장하는 것 같다.

왜?

모듈성, 추상화

개발자는 함수의 구현을 알 필요가 없다.

복잡한 함수를 wrapper함수로 감싸므로 내부구현을 몰라도 쉽게 사용 가능하다.

 

래핑을 통해 특정 아키텍처나 환경에 종속적인 코드를 숨길 수 있다.

예를 들어, 어떤 기능은 특정 하드웨어에서만 동작하는 로직이 필요할 수 있는데,

이를 래퍼 함수 내부에 숨겨두면 다른 아키텍처로 포팅(porting)할 때 래퍼 함수만 수정하면 된다.

 

'Linux' 카테고리의 다른 글

프로세스 생성 분석 fork (태스크 복사 및 초기화 부분) - 2  (0) 2025.09.30
프로세스 생성 분석 fork(콜 스택) - 1  (4) 2025.09.28
linux/drivers/char/mem.c 드라이버 분석  (0) 2025.09.20
objdump활용 vmlinux 분석시 start address의미  (0) 2025.09.11
디바이스 드라이버  (0) 2025.08.01
'Linux' 카테고리의 다른 글
  • 프로세스 생성 분석 fork (태스크 복사 및 초기화 부분) - 2
  • 프로세스 생성 분석 fork(콜 스택) - 1
  • linux/drivers/char/mem.c 드라이버 분석
  • objdump활용 vmlinux 분석시 start address의미
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    동적메모리
    포인터
    Qualcomm
    스택
    커널
    Git
    yolo
    이진 트리
    c언어
    리눅스
    앤드류모튼
    파이썬
    Branch
    시스템콜
    토발즈
    드라이버 분석
    rubik pi
    소수
    버퍼
    백준
    commit
    자료구조
    INIT
    arm
    파일 입출력
    피보나치
    순환
    rubikpi3
    C++
    커널 기여
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
커널에서 static inline 함수선언과 wrapping
상단으로

티스토리툴바