kmalloc() <-> kfree()
빌드 옵션
-c: 커널 모듈은 독립적으로 실행 가능한 파일이 아니며, insmod를 사용하여 실행 시간 중에 커널에 링크되는 오브젝트 파일 이다. 결론적으로 모듈은 -c옵션을 주고 컴파일 해야 한다. -O2: 커널은 인라인 함수를 주로 사용하기 때문에 모듈은 이 옵션 플래그를 사용해야 한다. 이 옵션을 사용하지 않은 경우 어떤 어셈블러 매크로는 함수 호출 시 정상적으로 작동하지 않을 것이다. insmod는 커널에서 원하는 함수를 찾지 못하고 결국 모듈의 적재는 실패할 것이다. -W -Wall: 프로그램에서의 실수는 당신의 시스템을 다운 시킬 수도 있다. 컴파일러 경고 기능은 항상 켜둬라, 이것은 모듈 컴파일 뿐 아니라 당신의 모든 컴파일 행위에 적용된다. -isystem /lib/modules/uname -r/build/include: 컴파일 대상이 되는 커널의 헤더를 사용해야만 한다. 기본적인 /usr/include/linux를 사용하는 것은 작동하지 않을 것이다. -DKERNEL:이 심볼을 정의 하는 것은 헤더 파일에 이 코드가 유저 프로세스로 동작하지 않고 커널 모드에서 작동한다는 사실을 알린다. -DMODULE: 이 심볼은 헤더 파일에 커널 모듈을 위한 올바른 정의를 하게 한다. |
이름을 정해준대로 쓰거나
int init_module(void); void cleanup_module(void); |
int hello_2_init(void); static void hello_2_exit(void); module_init(hello_2_init); module_exit(hello_2_exit); |
표준 라이브러리는 사용할 수 없다. 당신이 커널 모듈에서 사용 할 수 있는 함수는 /proc/ksyms에서 보이는 함수들 뿐이다.
[링크 : https://wiki.kldp.org/wiki.php/KernelModuleProgrammingGuide]
/proc/ksyms 가 2.6 에서는 /proc/kallsyms 로 바뀌었습니다.
[링크 : https://kldp.org/node/27882]
커널에서 FP 쪽은 데이터 주고 받는 용도로 써서 floating point 연산불가
math 라이브러리도 사용불가 -_-
[링크 : http://stackoverflow.com/.../how-to-include-math-h-include-math-h-on-kernel-source-file]
[링크 : http://hisjournal.net/./The_Linux_Kernel_Module_Programming_Guide_v2.6_by_YoonMin_Nam.pdf]
[링크 : http://www.joinc.co.kr/.../system_programing/proc/ProcFsPrograming] proc fs
'Linux API > linux' 카테고리의 다른 글
pthread mutex shm_open (0) | 2016.06.27 |
---|---|
리눅스 동적 라이브러리(*.so) 사용하기 (0) | 2016.04.04 |
readl(), writel() (0) | 2015.11.06 |
리눅스 모듈 프로그래밍 관련 (0) | 2015.10.30 |
linux open mode (0) | 2015.10.29 |