linux驅動內核
① 如何將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中,驅動程序屬於內核嗎謝謝。內核中都有什麼呀謝謝
驅動程序 當然屬於內核了!!有一個操作系統應該有的啊!!文件系統,進程管理,內存管理,一些硬體驅動等等》。。
③ 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。
④ Linux,為什麼驅動要放在內核
首先將驅動編譯成模塊的形式,kernel啟動能載入該驅動模塊,就要先通知kernel有這個模塊存在,讓kernel為載入它做一些准備。所以需要放在內核,謝謝!
⑤ Linux嵌入式開發和Linux內核/驅動開發有什麼區別
前者強調的是產品(linux嵌入式產品),而後者強調的是軟體(內核和驅動)。
一般做linux嵌入式產品時都要涉及linux驅動和內核,當然不僅僅是內核驅動,還有gui系統,和其他軟體等。
而做linux內核驅動則不一定用於嵌入式產品,也可以用於開發pc機(也就是一般的x86架構)軟體。
⑥ 學習linux驅動和內核編程
如果對編程比較熟悉的話,可以直接上手內核編程...
shell主要是日常的系統管理等用..知道些規則就行了..有興趣可以再深入
不過我是推薦先學下普通的應用程序...大致了解下linux下管道、同步、進程通信等等的特點...比較利於理解...然後再去看內核編程的時候,能對接上...我是這么個感覺...
內核編程主要是涉及到底層實現機制,編程的限制比較多...看書的時候比較費勁了..其他沒什麼了..
⑦ 嵌入式linux內核驅動
第一:前景是很好的,但是不是那麼容易就能學好的,你所說的培訓不知道是哪種?如果高質量的培訓都有嚴格的入學要求,估計這樣一來就刷掉一大批人吧,如果是那普通的培訓又學不到什麼,再者培訓費現在沒有低於1W的,首先你得有這資金,有時間。
第二:培訓出來後是什麼?這個不敢說,看你學的怎麼樣吧,看你是不是這方面比較擅長。嵌入式內核驅動出來的不能叫程序員了吧,那太局限了,應該叫工程師了,程序員精通的編程,而工程師既要編程又要熟悉硬體,所以說起來兩個不能混為一談。
第三:研究內核的實用性不大(個人認為,除了科研),去公司不能整天讓你研究開發內核吧,關鍵是要熟悉了解里邊的進程調度,資源分配等,這現對於普通的編程而言難度又要加大。
總之,前景是好,但是學起來也不容易,設計知識面廣,核心東西比較難懂。以上僅代表個人看法。
⑧ 什麼叫內核驅動 LINUX 內核驅動
上海尚觀Linux嵌入式研究室:內核是用於管理系統資源的程序。內核將應用程序與系統硬體隔離,並為它們提供基本系統服務,如輸入/輸出 (input/output, I/O) 管理、虛擬內存和調度。內核由需要時動態裝入內存的對象模塊組成。
Linux內核在邏輯上可分為兩個部分: 第一部分稱為內核,用於管理文件系統、調度和虛擬內存。第二部分稱為 I/O 子系統,用於管理物理組件。
內核提供了一組介面,供可通過系統調用訪問的應用程序使用。Reference Manual Collection 的第 2 部分對系統調用進行了介紹。某些系統調用用於調用設備驅動程序以執行 I/O 操作。設備驅動程序是可裝入的內核模塊,用於管理數據傳輸,同時將內核的其餘部分與設備硬體隔離。為了與操作系統兼容,設備驅動程序需要能夠提供多線程、虛擬內存定址以及 32 位和 64 位操作之類的功能。
⑨ linux 內核驅動問題
1,重新編譯內核浪費時間,可以考慮把fedora的it20驅動移植過來!參考網上的makefile寫個,自己編譯一下。把編譯得到的ko放到某目錄下, 在啟動腳本里載入它!
2, 如果想重新編譯內核也可以,把fedora9的it驅動替換你的驅動(把源文件名字改成一樣的),前提是你有內核源代碼!一般安裝完fedora後,在源碼里有個.config文件,這就是默認的配置文件,你也不許要再make menuconfig了,直接make oldconfig make 就行。