導航:首頁 > 操作系統 > Linux編譯進內核的驅動

Linux編譯進內核的驅動

發布時間:2022-07-14 13:53:28

linux 查看有哪些驅動編譯進了內核

一、 驅動程序編譯進內核的步驟
在 linux 內核中增加程序需要完成以下三項工作:
1. 將編寫的源代碼復制到 Linux 內核源代碼的相應目錄;
2. 在目錄的 Kconfig 文件中增加新源代碼對應項目的編譯配置選項;
3. 在目錄的 Makefile 文件中增加對新源代碼的編譯條目。

bq27501驅動編譯到內核中具體步驟如下:
1. 先將驅動代碼bq27501文件夾復制到 ti-davinci/drivers/ 目錄下。
確定bq27501驅動模塊應在內核源代碼樹中處於何處。
設備驅動程序存放在內核源碼樹根目錄 drivers/ 的子目錄下,在其內部,設備驅動文件進一步按照類別,類型等有序地組織起來。
a. 字元設備存在於 drivers/char/ 目錄下
b. 塊設備存放在 drivers/block/ 目錄下
c. USB 設備則存放在 drivers/usb/ 目錄下。
注意:
(1) 此處的文件組織規則並非絕對不變,例如: USB 設備也屬於字元設備,也可以存放在 drivers/usb/ 目錄下。
(2) 在 drivers/char/ 目錄下,在該目錄下同時存在大量的 C 源代碼文件和許多其他目錄。所有對於僅僅只有一兩個源文件的設備驅動程序,可以直接存放在該目錄下,但如果驅動程序包含許多源文件和其他輔助文件,那麼可以創建一個新子目錄。
(3) bq27501的驅動是屬於字元設備驅動類別,雖然驅動相關的文件只有兩個,但是為了方面查看,將相關文件放在了bq27501的文件夾中。在drivers/char/目錄下增加新的設備過程比較簡單,但是在drivers/下直接添加新的設備稍微復雜點。所以下面首先給出在drivers/下添加bq27501驅動的過程,然後再簡單說明在drivers/char/目錄下添加的過程。

2. 在/bq27501下面新建一個Makefile文件。向裡面添加代碼:
obj-$(CONFIG_BQ27501)+=bq27501.o
此時,構建系統運行就將會進入 bq27501/ 目錄下,並且將bq27501.c 編譯為 bq27501.o
3. 在/bq27501下面新建Kconfig文件。添加代碼:
menu "bq27501 driver"

config BQ27501
tristate"BQ27501"
default y
---help---
Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko.
endmenu
注意:help中的文字不能加回車符,否則make menuconfig編譯的時候會報錯。
4. 修改/drivers目錄下的Kconfig文件,在endmenu之前添加一條語句『source drivers/bq27501/Kconfig』 對於驅動程序,Kconfig 通常和源代碼處於同一目錄。 若建立了一個新的目錄,而且也希望 Kconfig 文件存在於該目錄中的話,那麼就必須在一個已存在的 Kconfig 文件中將它引入,需要用上面的語句將其掛接在 drivers 目錄中的Kconfig 中。

5. 修改/drivers目下Makefile文件,添加『obj-$(CONFIG_BQ27501) +=bq27501/』。這行編譯指令告訴模塊構建系統在編譯模塊時需要進入 bq27501/ 子目錄中。此時的驅動程序的編譯取決於一個特殊配置 CONFIG_BQ27501 配置選項。

6. 修改arch/arm目錄下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加語句
source "drivers/bq27501/Kconfig" 樓主 學習linux可以看看http://www.linuxprobe.com/chapter-00.html。

㈡ 嵌入式系統linux3.0.1如何吧自己的驅動編譯進內核

下面以uClinux為例,介紹在一個以模塊方式出現的驅動程序test.c基礎之上,將其編譯進內核的一系列步驟:
(1) 改動test.c源帶代碼
第一步,將原來的:
#include
#include
char kernel_version[]=UTS_RELEASE.
改動為:
#ifdef MODULE
#include
#include
char kernel_version[]=UTS_RELEASE.
#else
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
第二步,新建函數int init_test(void)
將設備注冊寫在此處:
result=register_chrdev(254,"test",&.test_fops).
(2) 將test.c復制到/uclinux/linux/drivers/char目錄下,並且在/uclinux/linux/drivers/char目錄下mem.c中,int chr_dev_init( )函數中增加如下代碼:
#ifdef CONFIG_TESTDRIVE
init_test().
#endif
(3) 在/uclinux/cinux/drivers/char目錄下Makefile中增加如下代碼:
ifeq($(CONFIG_TESTDRIVE),y)
L_OBJS =test.o
Endif
(4) 在/uclinux/linux/arch/m68knommu目錄下config.in中字元設備段里增加如下代碼:
bool support for testdrive CONFIG_TESTDRIVE y
(5) 運行make menuconfig(在menuconfig的字元設備選項里你可以看見我們剛剛添加的support for testdrive選項,並且已經被選中);make dep;make linux;make linux.text;make linux.data;cat linux.text linux.data > linux.bin.
(6) 在 /uClinux/romdisk/romdisk/dev/目錄下創建設備:
mknod test c 254 0
並且在/uclinux/appsrc/下運行make,生成新的Romdisk.s19文件。
到這里,在uClinux中增加設備驅動程序的工作可以說是完成了,只要將新的linux.bin與Romdisk.s19燒入目標板中,你就可以使用自己的新設備test了。

㈢ 為什麼linux 需要把驅動編譯到內核

因為linux的驅動是內核的一部分,內核啟動時會檢測硬體需要按需載入相應的驅動,如果在編譯內核時沒有為你的選擇的硬體編譯相應的模塊,內核是無法載入相應的驅動的,這時候就需要你自己動手編譯驅動模塊了。

㈣ linux顯卡驅動怎麼編譯進內核

一、 驅動程序編譯進內核的步驟
在 linux 內核中增加程序需要完成以下三項工作:
1. 將編寫的源代碼復制到 Linux 內核源代碼的相應目錄;
2. 在目錄的 Kconfig 文件中增加新源代碼對應項目的編譯配置選項;
3. 在目錄的 Makefile 文件中增加對新源代碼的編譯條目。

bq27501驅動編譯到內核中具體步驟如下:
1. 先將驅動代碼bq27501文件夾復制到 ti-davinci/drivers/ 目錄下。
確定bq27501驅動模塊應在內核源代碼樹中處於何處。
設備驅動程序存放在內核源碼樹根目錄 drivers/ 的子目錄下,在其內部,設備驅動文件進一步按照類別,類型等有序地組織起來。
a. 字元設備存在於 drivers/char/ 目錄下
b. 塊設備存放在 drivers/block/ 目錄下
c. USB 設備則存放在 drivers/usb/ 目錄下。

㈤ 如何把自己的驅動編譯進內核或模塊

我們知道若要給Linux內核添加模塊(驅動)有如下兩種方式:
(1)動態方式:採用insmod命令來給運行中的linux載入模塊。
(2)靜態方式:修改linux的配置菜單,添加模塊相關文件到源碼對應目錄,然後把模塊直接編譯進內核。
對於動態方式,比較簡單,下面我們介紹如何採用靜態的方式把模塊添加到內核。
最終到達的效果是:在內核的配置菜單中可以配置我們添加的模塊,並可以對我們添加的模塊進行編譯。
一. 內核的配置系統組成
首先我們要了解Linux 2.6內核的配置系統的原理,比如我們在源碼下運行「make menuconfig 」為神馬會出現一個圖形配置菜單,配置了這個菜單後又是如何改變了內核的編譯策略滴。
內核的配置系統一般由以下幾部分組成:
(1)Makefile:分布在Linux內核源代碼中的Makefile,定義Linux內核的編譯規則。
(2)配置文件(Kconfig):給用戶提供配置選項,修改該文件來改變配置菜單選項。
(3)配置工具:包括配置命令解釋器(對配置腳本中使用的配置命令進行解釋),配置用戶界面(提供字元界面和圖形界面)。這些配置工具都是使用腳本語言編寫的,如Tcl/TK、Perl等。
其原理可以簡述如下:這里有兩條主線,一條為配置線索,一條為編譯線索。配置工具根據kconfig配置腳本產生配置菜單,然後根據配置菜單的配置情況生成頂層目錄下的.config,在.config里定義了配置選擇的配置宏定義,如下所示:

如上所示,這里定義的這些配置宏變數會在Makefile里出現,如下所示:

然後make 工具根據Makefile里這些宏的賦值情況來指導編譯。所以理論上,我們可以直接修改.config和Makefile來添加模塊,但這樣很麻煩,也容易出錯,下面我們將會看到,實際上我們有兩種方法來很容易的實現。

二. 如何添加模塊到內核
實際上,我們需要做的工作可簡述如下:
(1)將編寫的模塊或驅動源代碼(比如是XXOO)復制到Linux內核源代碼的相應目錄。
(2)在該目錄下的Kconfig文件中依葫蘆畫瓢的添加XXOO配置選項。
(3)在該目錄的Makefile文件中依葫蘆畫瓢的添加XXOO編譯選項。
可以看到,我們奉行的原則是「依葫蘆畫瓢」,主要是添加。
一般的按照上面方式又可出現兩種情況,一種為給XXOO驅動添加我們自己的目錄,一種是不添加目錄。兩種情況的處理方式有點兒不一樣哦。

三. 不加自己目錄的情況
(1)把我們的驅動源文件(xxoo.c)放到對應目錄下,具體放到哪裡需要根據驅動的類型和特點。這里假設我們放到./driver/char下。
(2)然後我們修改./driver/char下的Kconfig文件,依葫蘆添加即可,如下所示:

注意這里的LT_XXOO這個名字可以隨便寫,但需要保持這個格式,他並不需要跟驅動源文件保持一致,但最好保持一致,等下我們在修改Makefile時會用到這個名字,他將會變成CONFIG_LT_XXOO,那個名字必須與這個名字對應。如上所示,tristate定義了這個配置選項的可選項有幾個,help定義了這個配置選項的幫助信息,具體更多的規則這里不講了。

(3)然後我們修改./driver/char下的Makefile文件,如下所示:

這里我們可以看到,前面Kconfig里出現的LT_XXOO,在這里我們就需要使用到CONFIG_XXOO,實際上邏輯是醬汁滴:在Kconfig里定義了LT_XXOO,然後配置完成後,在頂層的.config里會產生CONFIG_XXOO,然後這里我們使用這個變數。
到這里第一種情況下的添加方式就完成了。
四. 添加自己目錄的情況
(1)在源碼的對應目錄下建立自己的目錄(xxoo),這里假設為/drivers/char/xxoo 。
(2) 把驅動源碼放到新建的xxoo目錄下,並在此目錄下新建Kconfig和Makefile文件。然後給新建的Kconfig和Makefile添加內容。
Kconfig下添加的內容如下:

這個格式跟之前在Kconfig里添加選項類似。
Makefile里寫入的內容就更少了:

添加這一句就可以了。
(3)第三也不復雜,還是依葫蘆畫瓢就可以了。
我們在/drivers/char目錄下添加了xxoo目錄,我們總得在這個配置系統里進行登記吧,哈哈,不然配置系統怎麼找到們呢。由於整個配置系統是遞歸調用滴,所以我們需要在xxoo的父目錄也即char目錄的Kconfig和Makefile文件里進行登記。具體如下:
a). 在drivers/char/Kconfig中加入:source 「drivers/char/xxoo/Kconfig」
b). 在drivers/char/Makefile中加入:obj-$(CONFIG_LT_XXOO) += xxoo/
添加過程依葫蘆畫瓢就可以了,灰常滴簡單。

㈥ linux開發の如何靜態的將驅動模塊編譯進內核

我們知道若要給Linux內核添加模塊(驅動)有如下兩種方式: (1)動態方式:採用insmod命令來給運行中的linux載入模塊。 (2)靜態方式:修改linux的配置菜單,添加模塊相關文件到源碼對應目錄

㈦ linux 怎麼查看內核裡面是否編譯進了某個驅動(不是模塊了的驅動),怎麼查看

在內核代碼根目錄下,有對應的 .config 配置文件的前提下,執行 make ARCH=arm menuconfig ,進入配置內核的圖形化界面,然後搜索你想要查找的驅動名字關鍵字。至於驅動名字關鍵字,需要你進入到你想查看的驅動源碼文件夾下的 Makefile 及 Kconfig 中查找你的 .c 文件對應會編譯成什麼名字的 .o 文件(Makefile中定義),然後再查找決定這個 .o 文件是否進行編譯的宏叫什麼名字(Kconfig中定義)。找到控制編譯的宏之後,在執行make ARCH=arm menuconfig 進入的圖形化界面里搜索這個宏,就可以看到這個文件在內核的狀態里是被編譯(y)還是不被編譯(n)。

㈧ 如何將linux驅動程序添加到內核中

工具/原料

Ubuntu12.04操作系統和測試驅動程序(beep_arv.c)
方法/步驟

在介紹2種方法前,必須知道的知識點:
1.關聯文件Makefile:
Makefile:分布在Linux內核源代碼中的Makefile用於定義Linux內核的編譯規則;
2.管理文件Kconfig:
給用戶提供配置選擇的功能;
配置工具:
1)包括配置命令解析器;
2)配置用戶界面;menuconfig || xconfig;
3)通過腳本語言編寫的;

3.
---tristate 代表三種狀態:1.[ ]不選擇,2.[*]選擇直接編譯進內核,載入驅動到內核里,3.[m]動態載入驅動;
---bool 代表兩種狀態,1.[ ]不選擇,2.[*]選擇;
---"Mini2440 mole sample"這個是在make menuconfig時刷出的提示字元;
---depends on MACH_MINI2440 這個配置選項出現在make menuconfig菜單欄下,在內核配置中必須選中、MACH_MINI2440;
---default m if MACH_MINI2440 這個如果選中了MACH_MINI2440,默認是手
動載入這個驅動;
help:提示幫助信息;
在了解了基本的知識點,便開始進行第一種添加驅動的方法,本次交流是以beep_arv.c蜂鳴驅動程序為基礎的
方法一:
1)進入內核的驅動目錄;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char
2)進入Kconfig添加驅動信息;
#cd /XXX/linux-XXX/.../drivers/char
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!

3)進入Makefile添加驅動編譯信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG-BEEP_MINI2440) +=beep_drv.o

方法一結果:
在--Character devices下就能看到配置信息了;

方法二:
1)進入驅動目錄,創建BEED目錄;
#cd /XXX/.../linux-XXX/drivers/char
#mkdir beep
2)將beep_arv.c驅動程序復制到新建目錄下;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char/beep
3)創建Makefile和Kconfig文件
#cd char/beep
#mkdir Makefile Kconfig
#chmod 755 Makefile
#chmod 755 Kconfig

4)進入Kconfig添加驅動信息;
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!

5)進入Makefile添加驅動編譯信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG_BEEP_MINI2440) +=beep_drv.o

6)並且要到上一級目錄的Makefile和Kconfig添加驅動信息;
#cd ../
#vim Makefile
#vim Kconfig

㈨ 高手進階:Linux操作系統驅動編譯與運行

一、手工載入測試
1、insmod
./key_test.ko
載入驅動模塊到內核
2、cat
/proc/moles
|grep
key_test
查看key_test模塊在內核中的地址,不加過濾器可以看到全部載入的模塊。
3、lsmod
顯示模塊,這時可以看到所有的模塊名字,後面跟的是主設備號和次設備號。
4、rmmod
key_test
把模塊從內核里卸載。
二、動態載入
1、把key_test.c源代碼放到內核源代碼的/drives/char/下,因為這是屬字元型驅動,放在這編譯到zImage中。
2、這時我們make
menuconfig
編譯內核是看不到key_test這個選項的。我們把這個選項寫到菜單裡面才行。在內核源代碼的/drives/char/下有一個Kconfig文件,打開
(1)
vi
Kconfig
加幾行到裡面:
config
ConFig_key_test
bool
"key
test"
//前面那個bool換成tristate就是支持模塊化編譯
上面句是在make
menuconfig時會出現key
test這個選項在drive/char子菜單下,bool前面是TAB鍵
------help----------
這句是出現在菜單選項下面的
This
key
test
help.
這句是你的驅動的說明會出現在help裡面
(2)在/drivers/char目錄下的Makefile文件里加上一句:
obj-$(CONFIG_key_test)
+=
key_test.o
上面這句是讓Make時把key_test編譯到內核中.
(3)
make
menuconfig
把key_test選項選取上
(4)
make
zImage
生成zImage文件,重啟動載入這個新編的內核。
3、lsmod就能看到key_test了,但是還不能用,沒有介面,也就是/dev下面沒有
4、mknod
/dev/key_test
c
121
0
這是創建設備到/dev下,使普通程序可以調用了,121是在源代碼里定義的它的主設備號,0是次設備號。
5、cat
/dev/key_test
這是相當於open這個設備了,或者寫一個程序直接調用open、write等函數。
fd=("/dev/key_test",ORW);

閱讀全文

與Linux編譯進內核的驅動相關的資料

熱點內容
6軸機器人演算法 瀏覽:890
手機主題照片在哪個文件夾 瀏覽:294
安卓手機後期用什麼軟體調色 瀏覽:628
cad修改快捷鍵的命令 瀏覽:242
好錢包app怎麼登錄不了 瀏覽:859
樹莓派都用python不用c 瀏覽:757
access文件夾樹的構造 瀏覽:662
安卓多指操作怎麼設置 瀏覽:658
linux樹形目錄 瀏覽:727
平方根的簡單演算法 瀏覽:898
千牛訂單頁面信息加密取消 瀏覽:558
單片機自製紅外遙控燈 瀏覽:719
伺服器最小配置怎麼弄 瀏覽:853
ibm伺服器硬體如何升級 瀏覽:923
全球程序員節點贊 瀏覽:986
php函數傳遞數組 瀏覽:631
人工峰群演算法的目標函數 瀏覽:468
如何刪加密文檔 瀏覽:105
塗鴉app一鍵執行如何刪除 瀏覽:756
安卓手機如何打開fr3文件 瀏覽:743