3. 嵌入式linux驅動-驅動加載的兩種方式


  linux驅動的加載有動態加載和靜態加載兩種方式。

1. 動態加載

  驅動的動態加載指的是利用了linux的module特性,能夠在系統啓動後經過insmod或modprobe命令掛載.ko內核目標文件,對模塊進行加載,成功後可經過mknod指令進行掛載節點,在不須要的時候可經過rmmod命令來卸載模塊。
  操做方法: 在驅動文件mydrv.c和makefile目錄下執行make編譯出mydrv.ko文件,而後複製到目標板,執行insmod命令加載驅動,而後就能夠在應用層調用了,不使用能夠使用rmmod命令卸載驅動模塊。linux

2. 靜態加載

  驅動的靜態加載指的是直接把驅動程序編譯進內核,在系統啓動後可直接調用,不須要任何加載卸載命令。
  操做方法:web

  • 將驅動文件驅mydrv.c複製到目標板內核源碼樹drivers/char(假設是字符型驅動)下。
  • 在char目錄的Kconfig文件中添加新源代碼對應項目的編譯配置選項
Config  MYDRV                   ------對應驅動
     bool 「support for mydrv」   ------選項
     default  y                  -----定義開始爲yes
  • 在char目錄的Makefile文件中添加編譯腳本
obj-$(CONFIG_MYDRV) += mydrv.o

  編譯內核後,驅動就被靜態加載到內核了。svg

3. 兩種方式的優缺點

  動態加載的模塊自己沒有被編譯進內核映像,控制內核的大小;同時,模塊一旦被加載,它就和內核中的其餘部分徹底同樣,使用靈活。可在每次調用時都須要經過命令進行加載與卸載,操做麻煩。
  靜態加載驅動模塊直接編譯進內核映像,伴隨系統的啓動自動加載,使用方便,不須要任何加載卸載命令。可是把模塊編譯進內核使得生成的內核很大,若是咱們要在現有的內核中新增長或刪除功能,將不得不從新編譯內核,效率較低。
  嵌入式linux驅動開發時,能夠使用動態加載方式,這樣調試方便,開發完成後能夠是靜態加載方式,這樣使用方便。調試