Linux裝置驅動初探 準備Linux原始碼樹

2021-07-25 17:16:54 字數 2178 閱讀 8087

剛看 o'reilly 寫的《linux 裝置驅動程式》時。作者一再強調在編寫驅動程式時必須 建立核心樹。所謂核心樹,我的理解和網上資料說的一致就是核心原始碼的一種邏輯形式。那怎麼建立呢?為此上網「翻雲覆雨」起來而結果卻是「慘敗而歸「。 

為 此託了一天又4個小時(當然包括吃飯睡覺的時間),連個簡單的 hello wrold 都沒實現。(書中p22頁最簡單也最沒用的驅動事列) 

不 過功夫不負有心人。在今天終於弄明白了怎麼回事。下面就請讓我慢慢道來吧。 

先檢視自己os使用的核心版本 

shana@shana:~$ uname -r 

2.6.22-14-generic /* 這是我顯示的結果 */ 

如果安裝系統時,自動安裝了原始碼。在 /usr/src 目錄下有對應的使用的版本目錄。例如下(我是自己下的) 

shana@shana:/usr/src$ ls 

linux-headers-2.6.22-14 

linux-headers-2.6.22-14-generic 

linux-source-2.6.22 /*這個就是解壓後的原始碼目錄 */ 

linux-source-2.6.22.tar.bz2 /* 這是我下的原始碼 包 */ 

shana@shana:/usr/src$ 

如果沒有原始碼。(一般ubuntu 都沒有吧) 

shana@shana:/usr/src$ apt-cache search linux-source 

linux-source - linux kernel source with ubuntu patches 

xen-source-2.6.16 - linux kernel source for version 2.6.17 with ubuntu patches 

linux-source-2.6.22 - linux kernel source for version 2.6.22 with ubuntu patches 

shana@shana:/usr/src$ 

我選擇了 linux-source-2.6.22 - linux kernel source for version 2.6.22 with ubuntu patches 這個~ 

然後 install 之 

shana@shana:/usr/src$ sudo apt-get install linux-source-2.6.22 

注意 已經切換到超級使用者模式 

root@shana:/usr/src#tar jxvf linux-source-2.6.20.tar.bz2 

解壓後生成乙個新的目錄/usr/src/linux-source- 2.6.22,所有的源**都在該目錄下。 

進入該目錄 

開始配置核心 選擇最快的原版的配置(預設)方式 (我是如此) 

root@shana:/usr/src/linux-source-2.6.22# make oldconfig 

當 然你也可以使用 自己喜歡的配置方式 如 menuconfig , xconfig(必須有gtk環境吧)。反正不用剪裁什麼,所以不管那種方式能配置它就行了。 

完成後,開始make 吧 這兒比較久 一般有1乙個小時吧。(保證空間足夠 我編譯完成後 使用了1.8g) 我分割槽時分給/目錄30g的空間,我沒遇到這問題。倒是我朋友遇到了。 

shana@shana:/usr/src/linux-source-2.6.22$ make 

shana@shana:/usr/src/linux-source-2.6.22$ make bzimage 

當 然,第乙個make也可以不執行,直接make bzimage。執行結束後,可以看到在當前目錄下生成了乙個新的檔案: vmlinux, 其屬性為-rwxr-xr-x。 

然後 : 

root@shana:/usr/src/linux-source-2.6.22#make modules /* 編譯 模組 */ 

root@shana:/usr/src/linux-source-2.6.22#make modules_install /* 安裝 模組 */ 

執行結束之後,會在/lib/modules下生成新的目錄/lib /modules/2.6.22-14-generic/ 

。 在隨後的編譯模組檔案時,要用到這個路徑下的build目錄。至此,核心編譯完成。可以重啟一下系統。 

至此 核心樹就建立啦 原來不是很難..... 

Linux字元裝置驅動初探

一 裝置驅動之資料結構 1 dev t 裝置編號,包含主裝置號 次裝置號。dev t是乙個32位的數,12位表示主裝置號,20為表示次裝置號 1 主裝置號 major dev t dev 2 次裝置號 minor dev t dev 3 裝置編號 mkdev int major,int minor ...

Linux裝置驅動程式初探示例

本示例為在linux裝置驅動程式中文版第三版中摘錄出來的示例程式 程式原始碼 hello.c include include include 告知核心該模組帶有乙個自由許可證 module license dual bsd gpl 模組載入時被呼叫 static int init hello ini...

嵌入式Linux驅動初探 虛擬串列埠裝置驅動編寫

所謂虛擬串列埠裝置意為這個串列埠是虛擬的,不能用來實現與下位機的串列埠收發。但是他可以將從使用者那兒收到的資料,原封不動的回傳給使用者。相當於乙個回環。這一功能的實現主要是在驅動中實現乙個fifo。驅動接收到使用者資料後,先將之放入fifo,當使用者需要資料 讀取資料 時,驅動從fifo中把資料讀出...