반응형
22. 커널에 모듈 추가하기
Kconfig
=>
Kernel
에 새로운 장치를 추가하고, 해당하는 모듈을 추가하기 위해서는 먼저 Kconfig라는 파일을 알아야한다~
Kconfig를 정리하자면
- Tree구주로 된 Configuration option들의 집합으로 자신만의 종속성을 가지고 있음
- Child Entry는 Parent Entry가 선택되어 볼 수 있게 되었을 때만 보임
- Menu entry들은 각각의 config option을 정의하고 있음.
- 각각의 config option들은 자신만의 type을 가지며, tristate, bool type이 있음
tristate
:<*> <M> <>
bool
: <*> <>
- 이 type에 따라 어떤 선택을 하느냐에 따라 Kernel에 해당 모듈을 포함하는 여부가 결정된다.( 보통
make menuconfig
에서 선택한다.) - 사용자에 의해 값이 설정되지 않으면
default
값이 config option에 설정된다.
아래는 한 폴더의 sound/drivers/Kconfig 파일의 일부이다.
- 모듈을 선택할 때 사용하지 않는 기능을
<*>
로 선택하면 빌드되어 나오는 이미지(Kernel을 full build할 때 나오는 zImage)가 너무 커지며, 필요한 기능을< >
으로 선택하면 kernel이 정상동작 하지 않을 수 있으니 주의해서 선택해야 한다. <M>
으로 선택할 경우 Kernel 빌드시***.ko
파일을 생성하며, Kernel이 부팅하며 초기화 작업을 할 때 insmod로 등록하여 사용한다. 해당 모듈을 내릴 때는 rmmod를 사용한다.
Module 추가하기
Module을 추가하기 위해서는 Makefile과 Kconfig를 수정해야 한다.
여기서는 그중 그나마 만만한 Char Device Driver 쪽에 추가하기로 한다.
-
Makefile
- 먼저
[Kernel] / drivers / char / Makefile
을 연다. - 모듈이 빌드되도록 내용을 추가한다.
- CONFIG_MY_MODULE이라는 이름이 중요한데, 이 이름을 Kconfig 파일과 맞춰야 하기 때문이다.
- 먼저
-
Kconfig
[Kernel] / drivers / char / Kconfig
파일을 연다- Config에 추가되도록 아래 내용을 추가한다.
- DEPEND_ON_ME를 선택해야 MY_MODULE이 보인다.
- MY_MODULE은 Makefile의 CONFIG_MY_MODULE과 CONFIG_ 뒷 부분이 일치해야 한다.
-
$ make menuconfig
Device Drivers > Character devices
로 들어간다.- 아래 그림에서처럼 *Depend on test *항목이 추가됨을 볼 수 있다.
- Depend on test를 선택한다.
- Add My Module이 추가 된 것을 볼 수 있다.
*참고로 menuconfig에서
[]
형태는bool
type이고<>
형태는tristate
type이다.- Kernel이 빌드된 후에 depends on이 사용된 항목들은
[kernel] / include / generated / autoconfig.h
에 define값이 만들어 진다.
- 위의 그림처럼 CONFIG_MY_MODULE이 포함됨을 확인할 수 있다.
반응형
'임베디드 > [ Linux Kernel ]' 카테고리의 다른 글
[ Linux Kernel ] 24. 커널 프로그래밍에서 쉘 명령을 실행하는 방법 (0) | 2020.11.09 |
---|---|
[ Linux Kernel ] 23. Platform Device & Driver (4) | 2020.11.05 |
[ Linux Kernel ] 21. 모듈 프로그래밍 (0) | 2020.10.28 |
[ Linux Kernel ] 20. Linux Device Driver (0) | 2020.10.28 |
[ Linux Kernel ] 19. Ubuntu에서 Wi-Fi 연결하기 (0) | 2020.10.16 |