ubuntu下編譯驅(qū)動程序的準備_第1頁
ubuntu下編譯驅(qū)動程序的準備_第2頁
ubuntu下編譯驅(qū)動程序的準備_第3頁
ubuntu下編譯驅(qū)動程序的準備_第4頁
ubuntu下編譯驅(qū)動程序的準備_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯.歡迎下載支持ubuntu 下編譯驅(qū)動程序的準備ubuntu 不帶 linux 內(nèi)核源碼,需要自己下載安裝。1,查看自己的內(nèi)核版本uname -r2,查看源內(nèi)的內(nèi)核源碼類表apt-cache search linux-source3,下載安裝內(nèi)核源代碼sudo apt-get install linux-source-/ 我選的是這一個,自己看著辦吧4,等待 下載完成后,在/usr/src 下會有一個文件名為 linux-source-5,解壓縮包tar jxvf linux-source-/ 看清自己的版本解壓后會生成一個源代碼目錄 /usr

2、/src/linux-source-6,進入源碼目錄后,配置文件make oldconfig7,生成內(nèi)核make8,瘋狂等待,大約1 個多小時9,編譯模塊make modules10,安裝模塊make modules_install大功告成! A_A下面說一下 Makefile 文件$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install#PWDi 前工作目錄的變量 obj-m := hello.o#hello.o 是你要生成的驅(qū)動,以后可以自己改KERNELDIR:=/lib/modules/# 這里別抄,寫成你自己的 版本,這個目錄執(zhí)行了內(nèi)核源碼目錄

3、PWD:=$(shell pwd)#將當(dāng)前工作目錄賦值該PWDmodules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules modules_install:下面是一個經(jīng)典的Hello,world!例子自己make一下就行了。#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)printk(KERN_ALERT "Hello, world!n&quo

4、t;);return 0;static void hello_exit(void)printk(KERN_ALERT"Goodbye, cruel world!n");module_init(hello_init);module_exit(hello_exit);本文是參考了網(wǎng)上多篇帖子而寫的算不上什么原創(chuàng)。 唯一值得欣慰的只不過在本機上實現(xiàn)罷 了。因為畢竟失敗了幾次。也因為本人是初學(xué)驅(qū)動編程很多簡單的問題在我來說是相當(dāng)?shù)睦щy的。 望有識之士不要笑話。 最后, 希望本文能給剛學(xué)驅(qū)動而還沒開頭的人提供一些幫助。2文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯.歡迎下載支持

5、剛看 O'REILL Y 寫的 LINUX 設(shè)備驅(qū)動程序 時。 作者一再強調(diào)在編寫驅(qū)動程序時必須建立內(nèi)核樹。 所謂內(nèi)核樹, 我的理解和網(wǎng)上資料說的一致就是內(nèi)核源碼的一種邏輯形式。 那怎 么建立呢?為此上網(wǎng) “翻云覆雨 ”起來而結(jié)果卻是 “慘敗而歸 “。為此托了一天又4 個小時(當(dāng)然包括吃飯睡覺的時間) ,連個簡單的 hello wrold 都沒實現(xiàn)。(書中 p22 頁最簡單也最沒用的驅(qū)動事列)不過功夫不負有心人。在今天終于弄明白了怎么回事。下面就請讓我慢慢道來吧。先查看自己 OS 使用的內(nèi)核版本shanashana:$ uname -r/* 這是我顯示的結(jié)果*/如果安裝系統(tǒng)時, 自動安

6、裝了源碼。 在 /usr/src 目錄下有對應(yīng)的使用的版本目錄。 例如下 (我 是自己下的)shanashana:/usr/src$ ls linux-headers- linux-headers-linux-source- /* 這個就是解壓后的源碼目錄 */linux-source- /* 這是我下的源碼包 */shanashana:/usr/src$如果沒有源碼。 (一般 ubuntu 都沒有吧)查看一下可一下載的源碼包(切記不要使用超級用戶使用此命令否則會提示沒有此命令)shanashana:/usr/src$ apt-cache search linux-source linux-s

7、ource - Linux kernel source with Ubuntu patches xen-source- - Linux kernel source for version with Ubuntu patches linux-source- - Linux kernel source for version with Ubuntu patches shanashana:/usr/src$我選擇了 linux-source- - Linux kernel source for version with Ubuntu patches 這個 然后install之shanashana:/

8、usr/src$ sudo apt-get install linux-source-下載完成后,在/usr/src 下,文件名為: linux-source-, 是一個壓縮包,解壓縮既可以得到整個內(nèi)核的源代碼:注意 已經(jīng)切換到超級用戶模式rootshana:/usr/src#tar jxvf linux-source-解壓后生成一個新的目錄 /usr/src/linux-source- ,所有的源代碼都在該目錄下。進入該目錄開始配置內(nèi)核選擇最快的原版的配置(默認)方式 (我是如此)這時候會提醒你沒有安裝ncursessudo apt-get install libncurses5-dev r

9、ootshana:/usr/src/linux-source- make oldconfig當(dāng)然你也可以使用 自己喜歡的配置方式如 menuconfig , xconfig( 必須有 GTK 環(huán)境吧) 。反正不用剪裁什么,所以不管那種方式能配置它就行了。完成后 ,開始 make 吧 這兒比較久一般有 1 一個小時吧。 (保證空間足夠我編譯完成后 使用了 1.8G ) 我分區(qū)時分給/ 目錄30G 的空間,我沒遇到這問題。倒是我朋友遇到了。shanashana:/usr/src/linux-source- make shanashana:/usr/src/linux-source- make bz

10、Image當(dāng)然,第一個 make也可以不執(zhí)行,直接 make bzImage。執(zhí)行結(jié)束后,可以看到在當(dāng)前目錄 下生成了一個新的文件: vmlinux, 其屬性為 -rwxr-xr-x 。然后rootshana:/usr/src/linux-source- modules /* 編譯 模塊 */rootshana:/usr/src/linux-source- modules_install /* 安裝 模塊 */執(zhí)行結(jié)束之后,會在/lib/modules 下生成新的目錄/lib/modules/。 在隨后的編譯模塊文件時,要用到這個路徑下的 build 目錄。至此,內(nèi)核編譯完成???以重啟一下系

11、統(tǒng)。至此 內(nèi)核樹就建立啦 原來不是很難 寫一個 最簡單 最沒用的驅(qū)動吧我在 /home/shana/linux_q/ 目錄下創(chuàng)建 2 個文本文件hello.c Makefile/hello.c#include <linux/init.h>#include <linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)printk(KERN_ALERT "Hello, worldn");return 0;static void hello_exit

12、(void)printk(KERN_ALERT"Goodbye, cruel worldn");module_init(hello_init);module_exit(hello_exit);程序我就不解釋了Makefile 文件obj-m := hello.oKERNELDIR := /lib/modules/PWD := $(shell pwd)modules:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesmodules_install:$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install如果

13、以上你都完成了在make 時出現(xiàn)這樣的錯誤shanashana:/linux_馬區(qū)動開發(fā) $ makemake:沒有什么可以做的為'modules'。原因很簡單 你肯定是從我這直接復(fù)制的吧呵呵, Makefile格式錯誤啦解決辦法就是你把如 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install 移動到行首 然后按 Tab 鍵自動對齊這時里邊的變量都變成綠色了然后在make吧shanashana:/linux_馬區(qū)動開發(fā) $ makemake -C /lib/modules/ M=/home/shana/linux_ 驅(qū)動開發(fā) modu

14、lesmake1: Entering directory '/usr/src/linux-headers-CC M /home/shana/linux_ 驅(qū)動開發(fā) /hello.oBuilding modules, stage 2.MODPOST 1 modulesCC /home/shana/linux_ 驅(qū)動開發(fā) /hello.mod.oLD M /home/shana/linux_ 驅(qū)動開發(fā) /hello.komake1: Leaving directory '/usr/src/linux-headers-shanashana:/linuxj%動開發(fā) $shanashan

15、a:/linuxj%動開發(fā) $ Is -l總用量 124- rw-r-r- 1 shana shana 303 2008-03-16 10:43 hello.c- rw-r-r- 1 shana shana 49039 2008-03-16 12:11 hello.ko- rw-r-r- 1 shana shana 687 2008-03-16 12:11 hello.mod.c- rw-r-r- 1 shana shana 25840 2008-03-16 12:11 hello.mod.o- rw-r-r- 1 shana shana 24360 2008-03-16 12:11 hell

16、o.o- rw-r-r- 1 shana shana 8344 2008-03-16 09:17 linux_qudong_qu.txt- rw-r-r- 1 shana shana 266 2008-03-16 12:09 Makefile- rw-r-r- 1 shana shana 0 2008-03-16 12:11 Module.symversshanashana:/linuxj%動開發(fā) $然后加載模塊 (超級用戶)rootshana:/home/shana/linux_馬區(qū)動開發(fā) # insmod ./hello.ko按照書上的例子會在終端顯示hello , world 但是運行后什么都沒有出現(xiàn) (原因不解)rootshana:/home/shana/linux_馬區(qū)動開發(fā) # insmod ./hello.ko rootshana:/home/shana/linux_ 驅(qū)動開發(fā) #查看加載模塊rootshana:/home/shana/linux_ 馬區(qū)動開發(fā) # lsmodModule Size Used by hello 2560 0已經(jīng)加載上咯刪除模塊rootshana:/home/shana/linux_ 馬區(qū)動開發(fā) # rmmod hello rootshana:/home/shana/lin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論