最近需要開發一些內核模塊,進行探究linux內核的一些特征,現在把一些遇到的比較好的文章和知識點,進行簡要記錄和備忘; 內核模塊開發相關鏈接: https://www.thegeekstuff.com/2013/07/write-linux-kernel-module/ 入門教程;insmod, r ...
最近需要開發一些內核模塊,進行探究linux內核的一些特征,現在把一些遇到的比較好的文章和知識點,進行簡要記錄和備忘;
內核模塊開發相關鏈接:
- https://www.thegeekstuff.com/2013/07/write-linux-kernel-module/ 入門教程;insmod, rmmod, modinfo等相關命令;
- https://www.thegeekstuff.com/2010/08/make-utility/ make 工具使用教程;
- https://www.thegeekstuff.com/2010/11/modprobe-command-examples/ modprobe 命令的使用方法;
內核模塊開發過程遇到的知識點:
- make命令,會隱士調用cc -c 命令,生成.o文件;所以在內核模塊的makefile中,可以直接寫上: obj-m += hello_mod.o
最簡單的內核模塊編譯示例:
//必要的頭文件 #include <linux/module.h> // included for all kernel modules #include <linux/kernel.h> // include for KERN_INFO #include <linux/init.h> // include for __init and __exit macros //模塊許可證聲明(必須) MODULE_LICENSE("Dual BSD/GPL"); // 通常使用BSD 和 GPL 雙協議 //聲明模塊的作者(可選) MODULE_AUTHOR("Yaowen Xu"); MODULE_AUTHOR("YaoXu"); MODULE_DESCRIPTION("This is a simple example!"); MODULE_ALIAS("A simplest example"); //模塊載入函數(必須) static int hello_init(void) { printk(KERN_ALERT "Hello World enter/n"); return 0; } //模塊卸載函數(必須) static void hello_exit(void) { printk(KERN_ALERT "Hello World exit/n"); } //模塊的註冊 module_init(hello_init); module_exit(hello_exit);hello_mod.c
obj-m += hello_mod.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) cleanMakefile
編譯前需要安裝必要編譯工具和所需要的文件:
apt-get install build-essential linux-headers-$(uname -r)
保持更新,轉載請註明出處;更多內容請關註cnblogs.com/xuyaowen;