linux驅動編寫(入門)

2021-06-13 10:17:17 字數 2543 閱讀 9471

**csdn 大牛:feixiaoxing

在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝置的請求拆分成乙個乙個的介面,呼叫驅動的設定進行配置就可以了。當然,至於驅動下面是怎麼實現那就要根據具體情況而定了。比如說,有的驅動是晶元廠商直接寫好的,假設晶元廠商提供了對應平台的sdk函式,那麼驅動的工作就是對這些sdk函式進行封裝就可以了,另外一種就是自己編寫具體平台的驅動介面了。比如說,現在你需要編寫串列埠、i2c、i2s、flash、網絡卡、lcd、觸控螢幕、usb驅動了。這個時候,你手裡面除了一堆晶元手冊,啥也沒有。能不能除錯成功,就看你自己的了。當然,一般情況下,在特定的平台上會有很多同型別的demo**,你可以依葫蘆畫瓢修改一下,除了中斷、位址、讀寫等部分注意一下,大部分的邏輯其實差異不大。至於修改的速度快不快就看你自己的了。

我們今天所要說的是linux驅動編寫。現在linux驅動比較流行,主要有幾個方面的原因:1)linux平台免費,很多晶元廠商希望linux平台支援自己的產品;2)最近android平台很火,這在無形之中幫了linux的忙,搞linux驅動的人也開始多了起來;3)還有就是收入了,按照目前基本**來說,搞driver驅動的收入要比一般的開發工程師的收入要高一些,這可以從招聘**上得到答案,因此很多朋友也樂於轉到這一行。那麼,此時很多朋友可能就有疑問了,搞晶元驅動設計難道真的要懂linux嗎?

其實驅動和linux本來就是兩碼事。就拿乙個lcd來說,我們可以在windows ce上編寫驅動,也可以利用linux framebuffer編寫驅動,當然如果是做通訊的朋友,也可以利用vxworks來做驅動。驅動沒有限制,但是它也要和具體的作業系統平台聯絡起來,這樣才有意義。當然又有朋友說了,非要作業系統不可嗎?其實不要作業系統也可以,做乙個簡單的while(1)前後臺系統系統也可以,只不過這樣開發的效率不高,而且可擴充套件性不好。既然linux已經為我們把框架都搭好了,我們為什麼不可以把它直接拿來進行利用處理呢?

說了這麼多,大家可能問怎麼做好linux驅動的開發工作呢?對於我自己,一般是這麼處理的,

(01)找兩台電腦,一台電腦安裝windows系統,另外一台電腦安裝linux系統,至於型別沒有限制;

(02)檢視linux系統的版本型別,輸入uname -r即可;

(04)用tar解壓核心版本,將boot下config檔案拷貝到本地,輸入make menuconfig,直接儲存即可;

(05)輸入make -j2 & make modules_install & make install即可,系統重啟;

(06)在linux系統起來後,注意在grub啟動的時候選擇剛剛編譯的核心版本,這樣就可以在linux上開發kernel驅動了;

(07)在windows 平台安裝securecrt工具,和linux取得連線;

(08)輸入下面的**,分別是hello.c和makefile,其中hello.c內容如下

[cpp]view plain

copy

#include 

#include 

#include 

module_license("gpl"

);  

module_author("feixiaoxing"

);  

module_description("this is just a hello module!\n"

);  

static

int__init hello_init(

void

)    

static

void

__exit hello_exit(

void

)    

module_init(hello_init);  

module_exit(hello_exit);  

makefile的內容如下所示

[cpp]view plain

copy

ifneq ($(kernelrelease),)  

obj-m := hello.o  

else

pwd  := $(shell pwd)  

kver := $(shell uname -r)  

kdir := /lib/modules/$(kver)/build  

all:  

$(make) -c $(kdir) m=$(pwd) modules  

clean:  

rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions  

endif  

(09)編譯的時候,直接make即可,當然前提是這兩個檔案必須在乙個目錄下;

(10)編譯後生成hello.ko檔案,大家可以把它想象成乙個普通的執行檔案;

(11)如果需要安裝,直接insmod hello.ko即可,輸入dmesg | tail 可以看到列印的內容,輸入lsmod | grep hello也可以看一下模組是否已經安裝;

(12)如果刪除模組,直接輸入rmmod hello即可,當然新增和刪除的操作都需要在root模式下進行操作。

所以說,linux驅動簡單的開發步驟就是這些。

linux驅動編寫(入門)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!在我離職之前,工作內容幾乎不涉及到驅動方面的知識。我所要做的內容就是把客戶對裝置的請求拆分成乙個乙個的介面,呼叫驅動的設定進行配置就可以了。當然,至於驅動下面是怎麼實現那就要根據具體情況而定了。比如說,有的驅動是晶元廠商直接寫好的,假設晶元廠商提供...

詳解linux usb host驅動編寫入門

usb協議是乙個複雜的協議,目前涉及到的版本就有usb1.0,usb2.0,usb3.0。大家如果開啟kernel usb host目錄,就會發現下面包含了ohci,uhci,ehci,xhci,whci等多種形式的控制器驅動。那麼,對於我們這些不是很了解usb的開發人員,如何了解usb的 結構呢?...

VxWorks驅動程式編寫入門

vxworks系統的設計遵循了大多數微核心系統的設計思路,在裝置上使用了與裝置無關的介面方案,這是乙個進步,也是乙個犧牲 犧牲了實時性 具體的原理暫時就不描述了,接觸過作業系統的人都會有點印象。做驅動只要知道兩表一鏈一描述符。所謂兩表指驅動描述表和檔案描述符表,一鏈指裝置鍊錶,一描述符指裝置描述符。...