[Linux Kernel 5] Module Programming Basic
1. Hello 모듈 작성
모듈이 초기화 될 때의 엔트리 포인트를 module_init에 등록,
모듈이 제거 될 때의 엔트리 포인트를 module_eixt에 등록
MODULE_LICENSE에 라이센스 기재
이 후 빌드를 위한 Makefile 작성
make 명령으로 빌드 성공 시 hello.ko 커널 오브젝트가 생성됨
insmod로 모듈 삽입, rmmod로 모듈 제거
2. 모듈 참조
작성한 함수를 외부에 커널 심볼로 공개하기 위해서는 EXPORT_SYMBOL 매크로 사용
참고로 커널 영역에서 공개되는 심볼 리스트는 /proc/kallsyms에서 볼 수 있음
심볼 타입은 링크 참고
이 후 Makefile 오브젝트 목록에 callee.o와 caller.o를 추가하여 빌드하면 callee.ko와 caller.ko 생성
insmod로 callee와 caller를 차례대로 삽입 (제거 시에는 반대로 제거)
3. 의존성 해결
2번과 같이 insmod를 차례대로 삽입할 수 있지만, depmod를 이용해서 의존성 해결 가능
callee.ko와 caller.ko를 /lib/modules/uname -r/kernel 아래 적당한 곳에 위치 시킨 후
depmod -a로 모듈 맵 생성
이 후 insmod가 아닌 modprobe를 이용하여 모듈 삽입
결과에서 callee 모듈도 알아서 삽입되어있으며, caller가 callee를 사용하는 걸 확인 할 수 있음
4. 매개변수 처리
모듈에 매개변수를 전달하기 위해서 module_param과 같은 매크로 사용
자세한 내용은 링크 참고
이 후 Makefile에 오브젝트를 등록하여 빌드
파라미터는
insmod parm.ko a=100 str=hello
insmod parm.ko b=1,2,3
과 같은 방식으로 전달 가능
매개변수를 입력하지 않거나 일부만 입력해서 전달 또한 가능