티스토리 뷰

Study/Android

Kernel에 Module 추가

kkaps 2017. 7. 25. 19:27

Kconfig

* Kernel에 새로운 장치를 추가하고, 해당하는 모듈을 추가하기 위해서는 먼저 

Kconfig 파일을 알아야 합니다.


* Kconfig를 정리하자면

1. Tree구조로 된 Configuration option들의 집합으로 자신만의 종속성을 가지고 있음

2. Child Entry는 Parent Entry가 선택되어 볼 수 있게 되었을 때만 보임.

3. Menu entry들은 각각의 config option을 정의하고 있음.

4. 각각의 config option들은 자신만의 type을 가지며, tristate, bool type이 있음.

- tristate: <*> <M> <>

- bool: <*> <>

5. 이 type에 어떤 선택을 하느냐에 따라 Kernel에 해당 모듈을 포함하는 여부가 결정됨. (보통 make menuconfig에서 선택함)

5. 사용자에 의해 값이 설정되지 않으면 default 값이 config option에 설정됨.


* 아래는 drivers/char/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이 포함됨을 확인할 수 있습니다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함