1. 程式人生 > >linux驅動開發一般流程

linux驅動開發一般流程

首先,我們要考慮到作為驅動工程師要做的是拜託微控制器開發的思路,在單板開發(沒有OS)過程,裝置的驅動介面直接交給了上層,驅動和應用互為平等。在有OS的系統中,驅動獨立於硬體平臺之外,應用工程師通過虛擬檔案系統的read write對具體的IO進行操作

一般流程分為4步

1:我們首先要確定硬體平臺接線,然後確定該裝置介面,比如一般的IIC SPI USB USART 等介面

2:一般的發行版核心都有通用對應介面的驅動,我們將該檔案稍加修改即可,比如核心中帶有IIC介面

    AT24C02的儲存晶片的驅動,我們現在要做SX8650的驅動(IIC),我們首先可以將該檔案複製,然後

    可以分析,這兩款IC無非是讀取暫存器的方法不一樣,所以我們首先需要修改對應的IIC速率,對應的IO介面配               置方式,對應記憶體地址分配,對應的暫存器讀寫方法API等

3.核心驅動有兩種方式載入,一種是以模組的方式動態載入(驅動開發初期推薦),一種是直接編譯入核心

4.修改對應目錄下的Kconfig和Makefile

makefile和Kconfig的一般解釋:

a、在kconfig中增加(假設對應的驅動為LED)

config LED_ARM9//配置選項,在menconfig時顯示

tristate(bool二選一) "lfy config the led"   //bool和tristate的區別是一個是是否變異如核心,一個是三選一,是否編譯入核心,模組編譯入核心

depends on ARCH_S3C2410|XXX|AAA|BBB        //配置有效先決條件是該平臺已被選中

help

this is led driver design by lfy

b、在makefile中增加

     obj-$(LED_ARM9)+=led.o //此處注意兩點,第一點LED_ARM9一定要與kconfig名稱一一對應,第二點就是     led.o為你編譯驅動後的輸出檔案,此句話的意思就是如果LED_ARM9被配置,則此句簡化為obj-y或者obj-     m,取決與你配置核心選擇的是編譯入核心還是已模組方式編譯入核心

  對於單驅動檔案可以使用上述makefile的規則,如果一個驅動對應多個輸出檔案則需要適當修改makefile

 obj-$(LED_ARM9)+=led.o

obj-y :=led.o a.o b.o c.o