Linux API/linux2015. 11. 6. 11:17

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); 


module_init / module_exit 매크로를 통해 연결해 주거나
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
Posted by 구차니