最近需要開發一些內核模塊,進行探究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 命令的使用方法;
- https://blog.sourcerer.io/writing-a-simple-linux-kernel-module-d9dc3762c234 寫一個簡單的字符設備內核模塊;源代碼
- https://www.cnblogs.com/klb561/p/9192630.html linux 內核編譯與模塊編譯;(內核編譯命令)
- https://www.cnblogs.com/1477717815fuming/p/7581941.html 比較好的內核編譯文章 (每一步驟都進行了截圖,可以借鑒)
- http://www.tldp.org/LDP/lkmpg/2.6/html/index.html 一套比較好的linux 內核模塊參考書籍;PDF
- https://developer.ibm.com/technologies/linux/articles/l-kernel-memory-access/ Linux記憶體模型講解和Linux訪問userspace記憶體API講解;
內核模塊開發程序遇到的知識點:
- make命令,會隱士呼叫cc -c 命令,生成.o檔案;所以在內核模塊的makefile中,可以直接寫上: obj-m += hello_mod.o
- 內核模塊可以進行傳參:insmod module.ko [param1=value param2=value ...]
- 內核模塊只能訪問內核匯出的函式和變數;EXPORT_SYMBOL(my_variable);
- 想要熟悉內核模塊編程,寫一個linux設備驅動程式是比較好的學習方法;
- 在進行開發linux內核模塊的時候,最好下載對應版本的linux內核代碼,使用source insight或者vscode工具進行打開進行參考;因為經常內核中的API會改變;你參考別人的針對其他版本開發的代碼,編譯不通過;
- 內核模塊和內核公用一個地址空間,可以使用所有模塊匯出的符號表;我們可以使用記憶體拷貝函式,把用戶空間中的一些代碼段,拷貝到內核態來完成,
最簡單的內核模塊編譯示例:
//必要的頭檔案 #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; 如果對您有幫助,請點擊推薦~!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/138034.html
標籤:Linux
