Linux驅動開發--設備驅動基礎筆記 1

設備驅動基礎

設備驅動的使用方式:

  1. 動態加載
  2. 直接編譯進內核

直接編譯進內核的方法:(內核源碼/Doucument/kbuild/…中有相應的介紹)

.config:頂層配置文件,可以手動修改,也可以通過make menuconfig等命令配置內核自動生成;該文件對驅動進行三個方面配置:

  • 編譯成驅動模塊
  • 編譯進內核
  • 從內核中除去

Kconfig:連接LINUX內核的模塊目錄文件;功能:

  • 用於定義make menuconfig命令顯示的菜單
  • 導入位於其他目錄的Kconfig文件,make命令通過Kconfig文件的遞歸引用,找到內核代碼中所有Kconfig文件,之後創建菜單欄

Makefile:一般與Kconfig文件配對,該文件用來指定如何編譯

舉例說明:

Konfig 文件:

config LED_DRIVER //用於在.config中生成CONFIG_LED_DRIVER=y/n;
                //用來將驅 動編譯進內核與否

bool “led driver”  // 菜單中顯示的選項名

help            //幫助提示

3.驅動程序分類:

  • 字符型設備
  • 塊設備
  • 網絡接口
  • 其他:如SCSI

4.字符設備:

  • 指的存取時沒有緩存的設備
  • 可以像文件一樣訪問字符設備,字符設備驅動程序負責實現這些行爲

5.塊設備:

  • 塊設備是文件系統的宿主,如磁盤。
  • 大多數Unix系統中,只能將塊設備看做多個塊設備進行訪問
  • 塊設備經常是1KB數據,LINUX允許像字符設備那樣讀取塊設備–允許一次傳輸任意數目的字節

6.網絡接口設備

  • 任何網絡事務都是通過接口實現的
  • 接口是一個硬件設備,也可以是loopback接口一樣是軟件工具
  • 網路接口由內核網絡子系統驅動

7.相關命令

insmod lsmod rmmod  depmod

注:
  depmod:生成依賴文件,告訴將來的insmod要從何處調入modules。
  這個依賴文件是/lib/modules/$(version)/modules.dep

最簡單的設備驅動框架

#include<linux/init.h>

#include<linux/kernel.h> /*提供printk()打印函數*/

#include<linux/module.h>


static int xxx_init()

{
    return 0;
}

static void xxx_Exit(void)
{

}


module_init(xxx_init); /*insmod 入口*/

module_exit(xxx_Exit); /*rmmod 入口*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章