Linux Device Driver - Hello World - 1
Ref: 十本 Linux 核心開發書籍
▲ 圖7 《Linux Device Drivers, 3rd Edition》書籍封面
《Linux Device Drivers, 3rd Edition》的作者是 Jonathan Corbet(LWN 的創辦人)、Alessandro Rubini、GregKH。即便 LDD3 已經出版許久,還是所有想寫 Linux kernel driver 的第一優先入門參考書。此書有中譯版。
《LDD3》務實的從實做範例開始,帶領讀者理解各種 subsystem,含括了入門操作與基本觀念,對於初次開發 loadable kernel module (LKM) 的開發者提供了燈塔般的指引。
《LDD3》授權採 CC BY-SA 2.0,線上版可於此下載 https://lwn.net/Kernel/LDD3/。但由於書籍年代較久,針對的核心版本為 2.6.10,書中範例需要一點調整才能正常運作。已有同好改了幾份擺在 github (jesstess, martinezjavier)。
--
神奇地, 我也在這個 github 看到了一堆 Linux 相關的中文書籍
https://github.com/shihyu/linux_kernel_driver/tree/master/Books
其中也有一本:
可以對照參考
--
目前又回來看 Linux wifi driver.
開始複習十年前看過的, 同時學習 Linux 4.x
一般會從 Linux 內核模塊 (module) 開始介紹起.
目前這方面書籍文件也相當多. 我把 wifi usb driver 先簡化成 Hello World.
放在 github :
主程式
1. compile
打 make 會產生 88x2bu.ko
2. 執行
$ sudo insmod 88x2bu.ko
看 kernel log
$ dmesg
module init start
module init ret=0
$ sudo lsmod | grep 88x2
88x2bu 16384 0
$ sudo rmmod 88x2bu.ko
module exit start
module exit success
看 kernel log
$ dmesg
module init start
module init ret=0
$ sudo lsmod | grep 88x2
88x2bu 16384 0
$ sudo rmmod 88x2bu.ko
module exit start
module exit success
不過不知不覺運動完寫這篇時已經夜深了.
先列下回想介紹的大綱好了...
1. Compile
- Makefile
2. 內核模塊輸出 : printk()
KERN_INFO / ...
3. module commands :
insmod / rmmod / lsmod / modprobe / ...
4. 內核模塊程序結構 - 主程式分析
5. 加入 __init / __exit
#define _ _init _ _attribute_ _ ((_ _section_ _ (".init.text")))
static int __init hello_init(void)
{
printk(KERN_INFO "Hello, world %d\n", hello_data); return 0;
}
{
printk(KERN_INFO "Hello, world %d\n", hello_data); return 0;
}
module_init(hello_init);
...
下回待續.. 晚安.
不懂嵌入式系統,但是想學習Linux Driver,可以跟著大大的腳步學習嗎?
回覆刪除可以呀, 相互學習, 也歡迎隨時提出一起討論
刪除