linux核心模組開發基礎
1. 什麼是核心模組
核心模組具有以下兩個特點:1. 模組本身並不被編譯進核心檔案(zImage或bzImage),可以根據需求,在核心執行期間動態的安裝或解除安裝。
2. 為什麼需要核心模組
原因:Linux核心的整體結構非常龐大,其包含的元件也非常多,如何使用這些元件呢,方法1:把所有的元件都編譯鍵核心,即:zImage或bzImage,但這樣會導致一個問題:佔用記憶體過多。然後核心模組就誕生了,可以不用被編譯進核心但是可以動態的新增到正在執行的核心中!
3. 如何使用核心模組
1> 安裝模組 insmod filename.ko
2> 解除安裝模組 rmmod filename
3> 檢視模組 lsmod
這裡舉一個簡單的例子:
還是亙古不變的方式helloworld程式(不過這裡沒有main函式的)
#include <linux/init.h>
#include <linux/module.h>
static int hello_init()
{
printk(KERN_WARNING"Hello world!\n");//前面的巨集表示列印的級別
return 0;
}
static void hello_exit()
{
printk(KERN_WARNING"hello exit!\n");
}
module_init(hello_init);//用巨集來指定入口 載入模組時裡面的載入函式會被呼叫
module_exit(hello_exit);
三要素: 載入模組 、解除安裝模組、 標頭檔案
Makefile檔案
obj-m := helloworld.o
KDIR := /home/kernel/linux-ok6410 //開發板執行的核心的原始碼的路徑,因為模組最後是要在開發板上執行,所以這個模組的編譯是要依賴板子上執行的核心原始碼的,(這裡我開發板用的核心原始碼是這個路徑)
all:
make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
rm -f *.o *.ko *.order *.symvers
這裡KDIR是我們核心原始碼的路徑:
然後make 編譯模組檔案,這可可以看到生成了helloworld.ko檔案
結合前面的課程這裡可以通過串列埠終端同步看到(一下可以看到相關命令執行的效果)
核心模組的可選項:
1. 模組申明
2. 模組引數
3. 符號輸出
相關文章
- Javascript模組化開發基礎JavaScript
- Linux核心模組Linux
- Linux基礎命令---sysctl核心控制Linux
- 基礎核心
- 20. 企業級開發基礎1:自定義模組
- 初識Linux核心-DIY核心模組Linux
- JavaScript進階【一】JavaScript模組化開發的基礎知識JavaScript
- Linux核心模組學習Linux
- Linux核心模組編譯Linux編譯
- PHP 開發基礎PHP
- vxworks開發基礎
- 前端開發也要學點兒 Linux 基礎命令前端Linux
- 高效學習Linux核心——核心模組編譯Linux編譯
- 深入學習 Linux 核心模組Linux
- Python基礎——模組Python
- 前端模組化基礎前端
- ansible基礎-模組
- Linux基礎命令---dmsg顯示核心輸出Linux
- flume 1.8.0 開發基礎
- 機器學習開發流程基礎機器學習
- Go API 開發基礎GoAPI
- 並行開發基礎並行
- 開發基礎知識
- 前端開發基礎-JavaScript前端JavaScript
- Arch Linux中使用VMware Workstation不能開啟vmmon核心模組Linux
- 輕量級模組化開發框架 Hasor 核心模組 v0.0.2 釋出框架
- Oracle開發基礎-觸發器Oracle觸發器
- 【linux】驅動-2-核心模組Linux
- linux核心動態載入模組Linux
- Python基礎之模組Python
- 21. 企業級開發基礎2:使用第三方模組
- 基於團隊模式開發中介模組模式
- 【IOS開發基礎系列】Cocoa基礎專題iOS
- 基於全志A40i開發板——Linux-RT核心應用開發教程(1)Linux
- Linux 核心開發組成員合照Linux
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第七節:程式管理SparkLinux大資料
- Oracle開發基礎-遊標Oracle
- Vue開發之基礎路由Vue路由