Linux嵌入式驅動初體驗(三) 模組接觸

2021-09-30 06:32:20 字數 1721 閱讀 4911

對於驅動的開發,說的簡單些,就是乙個模組程式設計,然後編譯成核心模組,載入到核心中執行。下面就先介紹乙個簡單的模組程式,然後再慢慢引出我們需要關注的重點,下面是hellomod.c檔案,內容如下:

貌似每個最基本的程式都是要輸出hello world 啊,不知是誰定的。首先,模組程式設計的乙個重要標頭檔案就是,裡面儲存著有關模組程式設計的一些函式和定義。然後我們再看最後幾句話,module_license(gpl),意思是使用的許可是gpl的;再向前看,就是名為module_init和module_exit的兩個呼叫,引數是上面兩個函式的函式名,這裡就是模組的入口和出口,可以注意到的是,乙個模組程式設計的程式是沒有我們以前程式設計最常見的main函式的,main對於乙個**來說,是乙個入口點,也是出口點,而在模組程式設計中,沒有了main函式的存在,所以就用這兩個呼叫承擔起「門」的作用。

對於這個簡單的模組程式設計來說,其實有好多地方都能查到,我就不多說了,我想說的重點是下面的makefile的編寫。在linux工程程式設計中,我們幾乎只能看到成堆的.c檔案和成堆的.**件,然後再加上乙個makefile檔案(對於多級目錄形式存放的工程,可能是每乙個資料夾內有乙個makefile),而在vc中要是建立乙個工程的話,會產生好多.xx檔案,我們是不會看到這些檔案的內容的,其實我們也沒有必要去管它的內容,但是在linux的環境下,我們想要弄乙個工程出來,就要我們自己動手去寫這些.xx檔案,這就是makefile檔案,它就像是乙個「加工廠」一樣,.c和.**件進去,生產出我們要的可執行程式,在模組程式設計中,我們想要得到的「產品」就是.ko檔案(2.6以後的版本是.ko,之前的是.o,因為沒有接觸過以前的版本,就沒有發言權了,所以只說.ko檔案),下面看看對於這個模組程式來說,它的makefile檔案是怎樣的:

對於一些makefile的語法就不多說了,因為涉及到的內容會有很多,先說一點值得注意的,第6行的make之前是乙個tab符,在makefile檔案中,在乙個命令之前必須是乙個tab符,否則它是不認識的。

編譯這個模組程式,需要在該目錄下輸入 make 執行,make的工作原理就是在你輸入指令以後,就在當前目錄下搜尋makefile檔案(而且字母「m」必須是大寫的),然後通過makefile檔案中的配置和命令,來對相應的檔案進行操作。所以可以說對於乙個大的linux工程來說,makefile是它的核心,而且如果你的makefile檔案寫的很好,那麼你可以對於多個專案使用同乙個makefile檔案,不過這樣的要求就比較高了。

原理基本就是這個原理,個人感覺,其實makefile就是乙個應用型的語言,就是你需要用的時候,對照著查一下手冊就行了,對於其中的語法不必深入記憶,給大家貼出乙個**,就是makefile的手冊: 。

makefile就說到這,然後就是對它們進行編譯了,就是在它們(.c檔案和makefile檔案)所在的目錄下,輸入命令: make ,如果沒有錯誤提示的話,就會生成一些檔案,目前我們只關心hellomod.ko)這個檔案,如果有的話,就正確了。然後輸入: sudo insmod hellomod.ko,如果沒有任何提示,說明正確,然後輸入: dmesg ,檢視系統日誌,可以在後面幾行看到一句話,內容就是hello kernel world,說明模組正確載入到系統中。下面就是解除安裝模組,輸入命令: sudo rmmod hellomod ,在輸入dmesg檢視日誌,會看到good bye kernel,解除安裝成功!其實就是先進門,然後又出門的過程。要說的一點就是,乙個模組,如果已經插入到系統中,就不能再次插入了。

這只是乙個簡單的模組程式設計的例子,目的與c語言中輸出hello world是一樣的,就是入門,希望大家在kernel的世界裡,不止是能夠hello一下,裡面的世界還很精彩,後面呈現。。。

嵌入式初體驗

先建立main1.c檔案並通過gedit命令輸出以下 include include sub1.c int main 再建立sub1.c檔案並通過gedit命令輸出下列 float x float a,float b 通過gcc編譯 再執行main檔案完成子檔案的呼叫 在c語言下的執行 建立make...

ARM嵌入式Linux移植體驗裝置驅動(續1)

裝置驅動程式是作業系統核心和機器硬體之間的介面,它為應用程式遮蔽硬體的細節,一般來說,linux的設 備驅動程式需要完成如下功能 裝置初始化 釋放 提供各類裝置服務 負責核心和裝置之間的資料交換 檢測和處理裝置工作過程中出現的錯誤。linux下的裝置驅動程式被組織為一組完成不同任務的函式的集合,通過...

嵌入式linux字元裝置驅動

arm linux 驅動 抵岸科技 1.我們需要先呼叫register chrdev region 或 alloc chrdev region 來向系統申請裝置號 int register chrdev region dev t first,unsigned int count,char name ...