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

不過不知不覺運動完寫這篇時已經夜深了. 
先列下回想介紹的大綱好了...


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

module_init(hello_init); 


6. Linux kernel insmod / rmmod flow
...

下回待續.. 晚安.





留言

  1. 不懂嵌入式系統,但是想學習Linux Driver,可以跟著大大的腳步學習嗎?

    回覆刪除
    回覆
    1. 可以呀, 相互學習, 也歡迎隨時提出一起討論

      刪除

張貼留言

熱門文章