成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

linux驅(qū)動編譯命令 linux驅(qū)動編寫

高手進(jìn)階:Linux操作系統(tǒng)驅(qū)動編譯與運(yùn)行

一、手工加載測試

創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元武隆做網(wǎng)站,已為上家服務(wù),為武隆各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

1、insmod

./key_test.ko

加載驅(qū)動模塊到內(nèi)核

2、cat

/proc/modules

|grep

key_test

查看key_test模塊在內(nèi)核中的地址,不加過濾器可以看到全部加載的模塊。

3、lsmod

顯示模塊,這時可以看到所有的模塊名字,后面跟的是主設(shè)備號和次設(shè)備號。

4、rmmod

key_test

把模塊從內(nèi)核里卸載。

二、動態(tài)加載

1、把key_test.c源代碼放到內(nèi)核源代碼的/drives/char/下,因為這是屬字符型驅(qū)動,放在這編譯到zImage中。

2、這時我們make

menuconfig

編譯內(nèi)核是看不到key_test這個選項的。我們把這個選項寫到菜單里面才行。在內(nèi)核源代碼的/drives/char/下有一個Kconfig文件,打開

(1)

vi

Kconfig

加幾行到里面:

config

ConFig_key_test

bool

"key

test"

//前面那個bool換成tristate就是支持模塊化編譯

上面句是在make

menuconfig時會出現(xiàn)key

test這個選項在drive/char子菜單下,bool前面是TAB鍵

------help----------

這句是出現(xiàn)在菜單選項下面的

This

key

test

help.

這句是你的驅(qū)動的說明會出現(xiàn)在help里面

(2)在/drivers/char目錄下的Makefile文件里加上一句:

obj-$(CONFIG_key_test)

+=

key_test.o

上面這句是讓Make時把key_test編譯到內(nèi)核中.

(3)

make

menuconfig

把key_test選項選取上

(4)

make

zImage

生成zImage文件,重啟動加載這個新編的內(nèi)核。

3、lsmod就能看到key_test了,但是還不能用,沒有接口,也就是/dev下面沒有

4、mknod

/dev/key_test

c

121

這是創(chuàng)建設(shè)備到/dev下,使普通程序可以調(diào)用了,121是在源代碼里定義的它的主設(shè)備號,0是次設(shè)備號。

5、cat

/dev/key_test

這是相當(dāng)于open這個設(shè)備了,或者寫一個程序直接調(diào)用open、write等函數(shù)。

fd=("/dev/key_test",ORW);

如何編譯linux驅(qū)動模塊

第一步:準(zhǔn)備源代碼

首先我們還是要來編寫一個符合linux格式的模塊文件,這樣我們才能開始我們的模塊編譯。假設(shè)我們有一個源文件mymod.c。它的源碼如下:

mymodules.c

1. #include linux/module.h /* 引入與模塊相關(guān)的宏 */

2. #include linux/init.h /* 引入module_init() module_exit()函數(shù) */

3. #include linux/moduleparam.h /* 引入module_param() */

4

5. MODULE_AUTHOR("Yu Qiang");

6. MODULE_LICENSE("GPL");

7

8. static int nbr = 10;

9. module_param(nbr, int, S_IRUGO);

10.

11. static int __init yuer_init(void)

12.{

13. int i;

14. for(i=0; inbr; i++)

15. {

16. printk(KERN_ALERT "Hello, How are you. %d/n", i);

17. }

18. return 0;

19.}

20.

21.static void __exit yuer_exit(void)

22.{

23. printk(KERN_ALERT"I come from yuer's module, I have been unlad./n");

24.}

25.

26. module_init(yuer_init);

27. module_exit(yuer_exit);

我們的源文件就準(zhǔn)備的差不多了,這就是一個linux下的模塊的基本結(jié)構(gòu)。第9行是導(dǎo)出我們的符號變量nbr。這樣在你加載這個模塊的時候可以動態(tài)修改這個變量的值。稍后將演示。yuer_init()函數(shù)將在模塊加載的時候運(yùn)行,通過輸出的結(jié)果可以看到我們的模塊是否加載成功。

第二步:編寫Makefile文件

首先還是來看看我們Makefile的源文件,然后我們再來解釋;

Makefile

obj-m := modules.o #要生成的模塊名

modules-objs:= mymod.o #生成這個模塊名所需要的目標(biāo)文件

KDIR := /lib/modules/`uname -r`/build

PWD := $(shell pwd)

default:

make -C $(KDIR) M=$(PWD) modules

clean:

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

ARM平臺

Makefile

obj-m += mymod.o

KDIR := /home/workspace2/kernel/linux-2.6.25 #如果是用于arm平臺,則內(nèi)核路徑為arm內(nèi)核的路徑

PWD = $(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -rf *.o

在arm板上插入是

insmod mymod

如果出現(xiàn)以下錯誤

insmod: chdir(/lib/modules): No such file or directory

則運(yùn)行

mkdir /lib/modules/2.6.25 (與arm內(nèi)核版本相同)

并將mymod.ko文件復(fù)制到該目錄下

cp mymod.ko /lib/modules/2.6.25

然后再執(zhí)行 (insmod 只在/lib/modules/2.6.25目錄下查找相關(guān)驅(qū)動模塊)

insmod mymod

現(xiàn)在我來說明一下這個Makefile。請記住是大寫的Makefile而不是小寫的makefile;

obj-m :這個變量是指定你要聲稱哪些模塊模塊的格式為 obj-m := 模塊名.o

modules-objs :這個變量是說明聲稱模塊modules需要的目標(biāo)文件 格式要求 模塊名-objs := 目標(biāo)文件

切記:模塊的名字不能取與目標(biāo)文件相同的名字。如在這里模塊名不能取成 mymod;

KDIR :這是我們正在運(yùn)行的操作系統(tǒng)內(nèi)核編譯目錄。也就是編譯模塊需要的環(huán)境

M= :指定我們源文件的位置

PWD :這是當(dāng)前工作路徑$(shell )是make的一個內(nèi)置函數(shù)。用來執(zhí)行shell命令。

第三步:編譯模塊

現(xiàn)在我們已經(jīng)準(zhǔn)備好了我們所需要的源文件和相應(yīng)的Makefile。我們現(xiàn)在就可以編譯了。在終端進(jìn)入源文件目錄輸入make

運(yùn)行結(jié)果:

make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'

CC [M] /home/yuqiang/桌面/mymodule/mymodules.o

LD [M] /home/yuqiang/桌面/mymodule/modules.o

Building modules, stage 2.

MODPOST 1 modules

CC /home/yuqiang/桌面/mymodule/modules.mod.o

LD [M] /home/yuqiang/桌面/mymodule/modules.ko

make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'

第四步:加載/卸載我們的模塊

從上面的編譯中我可以看到。已經(jīng)有一個modules.ko生成了。這就是我們的模塊了?,F(xiàn)在我們就可以來加載了。

首先在終端輸入:sudo insmod modules.ko

現(xiàn)在我們來看看我們的模塊加載成功沒有呢?

在終端輸入:dmesg | tail -12 這是查看內(nèi)核輸出信息的意思。tail -12 顯示最后12條;

顯示結(jié)果如下:

[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0

[18046.790019] usb 5-8: USB disconnect, address 9

[19934.224812] Hello, How are you. 0

[19934.224817] Hello, How are you. 1

[19934.224818] Hello, How are you. 2

[19934.224820] Hello, How are you. 3

[19934.224821] Hello, How are you. 4

[19934.224822] Hello, How are you. 5

[19934.224824] Hello, How are you. 6

[19934.224825] Hello, How are you. 7

[19934.224826] Hello, How are you. 8

[19934.224828] Hello, How are you. 9

看到了吧。我們的模塊的初始化函數(shù)yuer_init();已經(jīng)成功運(yùn)行了。說明我們的模塊已經(jīng)加載成功;

現(xiàn)在我們再來卸載模塊試試看。

在終端輸入:sudo rmmod modules

在終端輸入:dmesg | tail -3

[19934.224826] Hello, How are you. 8

[19934.224828] Hello, How are you. 9

[20412.046932] I come from yuer's module, I have been unlad.

可以從打印的信息中看到,我們的模塊的退出函數(shù)已經(jīng)被執(zhí)行了。說明我們的模塊已經(jīng)被成功的卸載了。到目前位置我們就已經(jīng)算是對模塊的編譯到編譯運(yùn)行算是有了一個整體上的認(rèn)識了。對于以后深入的學(xué)習(xí)還是應(yīng)該有點(diǎn)幫助的。下面我們將在看看于模塊相關(guān)的一些簡單的操作。

第五步:加載模塊時傳遞參數(shù)

在終端輸入:sudo insmod module_name.ko nbr=4

在終端輸入:dmesg | tail -6

顯示結(jié)果如下:

[20800.655694] Hello, How are you. 9

[21318.675593] I come from onefile module, I have been unlad.

[21334.425373] Hello, How are you. 0

[21334.425378] Hello, How are you. 1

[21334.425380] Hello, How are you. 2

[21334.425381] Hello, How are you. 3

這樣我們就可以看到在模塊加載的時候動態(tài)設(shè)置了我們的一個變量。初始化函數(shù)中的循環(huán)只執(zhí)行了4次。

可能你會問我怎么知道一個模塊可以設(shè)置那些變量呢。當(dāng)然,你可以先不設(shè)變量加載一次。然后可以在終端輸入ls /sys/module/modules_name/parameters/來查看。在這里我們是這樣輸入的

在終端輸入:ls /sys/moedle/modules/parameters/

顯示結(jié)果:

nbr

如果我們的模塊加載成功了。最后我們還可以通過modinfo來查看我們的模塊信息。如下

在終端輸入:sudo modinfo modules.ko

顯示結(jié)果:

filename: modules.ko

license: GPL

author: Yu Qiang

srcversion: 20E9C3C4E02D130E6E92533

depends:

vermagic: 2.6.24-24-generic SMP mod_unload 586

parm: nbr:int

linux下怎么編譯安裝驅(qū)動?

linux 編譯安裝驅(qū)動有兩種,動態(tài)加載與靜態(tài)加載

動態(tài)加載

一,編譯,在指點(diǎn)內(nèi)核樹下編譯,生成.o文件或.ko文件

二,將生成的.o或.ko文件拷到相應(yīng)目錄,一般是/lib/module/kernel下面

三,用insmod命令加載,用rmmod命令卸載

靜態(tài)加載

靜態(tài)加載主要就是編譯內(nèi)核。就是將編寫好的驅(qū)動放進(jìn)內(nèi)核相應(yīng)的目錄下面。然后編譯內(nèi)核。然后運(yùn)行編譯好的內(nèi)核。

linux更新opengl驅(qū)動命令

配置好了Ubuntu下的c++環(huán)境,gcc以及g++可用。2.使用eclipse for c+做OpenGL開發(fā) 步驟一:在ubuntu終端下運(yùn)行以下命令,安裝opengl所需要的庫文件$ sudo apt-get

第二步, 運(yùn)行驅(qū)動程序,切換到“硬件檢測”選項卡,就可以查看本機(jī)電腦顯卡驅(qū)動程序的版本以及具體顯卡型號啦;

第三步,通過切換到“驅(qū)動程序”選項卡,選擇最新版本的顯卡驅(qū)動進(jìn)行安裝。

除顯卡驅(qū)動版本較低外,顯卡硬件較差也有可能導(dǎo)致無法正常運(yùn)行,模擬器電腦顯卡配置要求情況如下,對此只得升級顯卡硬件或購買新的高性能顯卡硬件設(shè)備來運(yùn)行模擬器。

第二種:

第一步,右鍵點(diǎn)擊我的電腦(win10用戶則是此電腦)—管理,

第二步,在彈出來的計算機(jī)管理窗口里面找到設(shè)備管理器-顯示適配器;

第三步,打開顯示適配器之后,右鍵點(diǎn)擊對應(yīng)的顯卡,然后點(diǎn)擊更新驅(qū)動程序;

第四步,在點(diǎn)擊更新驅(qū)動程序之后,會彈出如下窗口,點(diǎn)擊找到搜索驅(qū)動程序進(jìn)行更新即可。

名稱欄目:linux驅(qū)動編譯命令 linux驅(qū)動編寫
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article34/dohpjse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、網(wǎng)站改版、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
阜宁县| 绥滨县| 扶余县| 金乡县| 潮州市| 汕头市| 泸西县| 康马县| 怀仁县| 彭水| 罗定市| 南涧| 扎囊县| 黄梅县| 获嘉县| 济源市| 原平市| 尼玛县| 卢湾区| 阿坝县| 平陆县| 恩平市| 苏州市| 河池市| 英吉沙县| 介休市| 平湖市| 应城市| 贵阳市| 长顺县| 吉隆县| 盐池县| 棋牌| 温州市| 兰坪| 阜新| 伊宁市| 昭苏县| 荣成市| 庐江县| 渭南市|