-
디바이스 드라이버 / 모듈 파일들의 정체Linux/Linux Device Driver 2020. 9. 1. 12:36
수정중...
리눅스 커널 모듈 관련 명령어
명령어 내용 lsmod 현재 커널에 올라와 있는 커널 모듈 리스트를 표시한다. insmod 해당 커널 모듈들을 올린다. rmmod 해당 커널 모듈들을 내린다. modprobe 해당 커널 모듈들을 올릴 때 필요한 의존관계가 있는 모든 모듈들을 올린다. depmod modprobe 명령어를 위해 모듈들의 의존관계 리스트를 출력한다. modinfo 현재 모듈에 대한 정보를 출력한다. insmod 명령어를 이용해서 커널을 올릴 수 있지만 모듈을 올릴 때는 의존관계를 생각해야 한다. 예를 들어 USB 카메라에 대한 디바이스 드라이버를 올리고 싶은 경우라면 Video4Linux와 관련된 모듈이 먼저 올라와 있어야만 해당 디바이스 드라이버를 올릴 수 있다. insmod 명령어를 사용하는 경우 의존관계에 있는 모듈들이 올라와 있지 않으면 에러가 발생하면서 해당 모듈이 올라가지 않는다. 이럴 때는 modprobe 명령어를 사용하면 보다 쉽게 관련된 커널 모듈들을 한꺼번에 올릴 수 있다.
modprobe 명령어
/etc/modprobe.d
/lib/moduleprobe.d
디렉터리를 참고하여, 모듈들의 이름에 대한 정보와 해당 모듈과 관련된 다른 모듈들의 정보를 사용한다.
/lib/modules/커널버전/modules.dep 모듈간의 의존관계가 정의되어있어 이 파일을 참조해 해당 모듈을 동작시키는데 필요한 다른 모듈도 등록시킨다.
depmod 명령어
의존성을 검사한 뒤 modprobe 명령어가 참조하는 /lib/modules/커널버전/modules.dep 파일을 갱신한다.
리눅스가 부팅될 때마다 해당 모듈을 자동으로 올리고 싶은 경우에는 /etc/modules 파일에 해당 모듈에 대한 이름을 추가해주면 된다.
/lib/modules/커널버전/kernel 디렉터리에 해당 커널 버전의 모듈이 다 들어있다.
이 파일은 RaspberryPi Configuration글에서 make modules make modules_install을 하면 생성된다.
리눅스 커널과 모듈 빌드
이전에 강의를 수강하시던 분들께서 종종 질문을 주시는 데, 어제는 조금 쓸만한 질문이 들어왔으므로 정리한번 하고 넘어가고자 한다. Q. 커널 빌드시에 빌트인의 의미는 무엇인가? 확인하�
chlrbgh0.tistory.com
모듈간의
https://onecellboy.tistory.com/306
커널 특정 모듈만 컴파일
http://tmdgus.tistory.com/116 http://www.troot.co.kr/tc/2671 http://stackoverflow.com/questions/16360689/invalid-parameters-error-when-trying-to-insert-module-that-accesses-exported-s - insert modul..
onecellboy.tistory.com
test.c 모듈을 컴파일하면 다음과 같은 파일이 만들어진다.
modules.order
Module.symvers
test.mod.c
test.ko
test.o
정체가 뭘까?
static 커널 심볼에 포함되지 않음
모듈간의 상호 참조
모듈 간의 심볼 참조
심볼릭 등록
/proc/kallsyms
현재 커널 함수를 나타낸다. 커널 심볼 테이블(적재된 모듈 포함)???
모듈을 삽입하면(insmod) 만들은 모듈 함수가 /proc/kallsyms 파일에 기록됨 static으로 해도
sudo cat /proc/kallsyms 를 하면 현재 커널 함수를 나타내줌 sudo로 읽지 않으면 주소가 안나옴
'Linux > Linux Device Driver' 카테고리의 다른 글
디바이스 드라이버 / 개발 시 고려사항 (0) 2020.09.01 디바이스 드라이버 / 동작 과정 (0) 2020.09.01 디바이스 드라이버 / 커널 소스가 필요한 이유 (0) 2020.09.01 디바이스 드라이버 / 실습 환경 설정 및 준비 (1) 2020.09.01 디바이스 드라이버 / 개발 방법 (0) 2020.09.01