static inline
드라이버 분석중에
특정 함수 호출을 추적해보니 다른 파일에서 static inline으로 선언되어있는걸 알았다.
예를 들어서,
mem.c에서 register_chrdev를 호출,
register_chrdev를 추적해보니 다른 include/linux/fs.파일에서 static inline으로 선언됨.

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 |