国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

如何把驅(qū)動(dòng)代碼加入到Linux Kernel,你需要知道怎么修改這兩個(gè)文件KconfigMakefile

發(fā)布時(shí)間:2017-9-26 10:23    發(fā)布者:技術(shù)小白
1. Kconfig文件的作用


內(nèi)核源碼樹的目錄下都有兩個(gè)文件Kconfig(2.4版本是Config.in)和Makefile。分布到各目錄的Kconfig構(gòu)成了一個(gè)分布式的內(nèi)核配置數(shù)據(jù)庫,每個(gè)Kconfig分別描述了所屬目錄源文件相關(guān)的內(nèi)核配置菜單。在內(nèi)核配置make menuconfig(或xconfig等)時(shí),從Kconfig中讀出菜單,用戶選擇后保存到.config的內(nèi)核配置文件中。在內(nèi)核編譯時(shí),主Makefile調(diào)用這個(gè).config,就知道了用戶的選擇。

*上面的內(nèi)容說明了,Kconfig就是對(duì)應(yīng)著內(nèi)核的配置菜單。如果要想添加新的驅(qū)動(dòng)到內(nèi)核的源碼中,可以修改Kconfig,這樣就可以選擇這個(gè)驅(qū)動(dòng),如果想使這個(gè)驅(qū)動(dòng)被編譯,要修改Makefile

so添加新的驅(qū)動(dòng)時(shí)需要修改的文件有兩種(注意不只是兩個(gè))

*Kconfig
*Makefile

要想知道怎么修改這兩種文件,就要知道兩種文件的語法結(jié)構(gòu)

2. Kconfig


每個(gè)菜單都有一個(gè)關(guān)鍵字標(biāo)識(shí),最常見的就是config

語法:
config
symbol是一個(gè)新的標(biāo)記的菜單項(xiàng),options是在這個(gè)新的菜單項(xiàng)下的屬性和選項(xiàng)

其中options部分有:

1) 類型定義:
每個(gè)config菜單項(xiàng)都要有類型定義,bool布爾類型、 tristate三態(tài):內(nèi)建、模塊、移除 string字符串、 hex十六進(jìn)制、 integer整型
例如config HELLO_MODULE
bool "hello test module"
bool類型的只能選中或不選中,tristate類型的菜單項(xiàng)多了編譯成內(nèi)核模塊的選項(xiàng),如果選擇編譯成內(nèi)核模塊,則會(huì)在.config中生成一個(gè)CONFIG_HELLO_MODULE=m的配置,如果選擇內(nèi)建,就會(huì)直接編譯成內(nèi),則在.config中生成一個(gè)CONFIG_HELLO_MODULE=y的配置.

2) 依賴型定義depends on或requires
指此菜單的出現(xiàn)與否依賴于另一個(gè)定義
config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
這個(gè)例子表明HELLO_MODULE這個(gè)菜單項(xiàng)只對(duì)XScale處理器有效。

3) 幫助性定義
只是增加幫助用關(guān)鍵字help或者---help---

3. 內(nèi)核的Makefile


在linux2.6.x/Documentation/kbuild目錄下有詳細(xì)的介紹有關(guān)kernel makefile的知識(shí)。

內(nèi)核的Makefile分為5個(gè)組成部分:
Makefile     最頂層的Makefile
.config        內(nèi)核的當(dāng)前配置文件,編譯時(shí)成為頂層Makefile的一部分
arch/$(ARCH)/Makefile 與體系結(jié)構(gòu)相關(guān)的Makefile
s/ Makefile.*    一些Makefile的通用規(guī)則
kbuild Makefile           各級(jí)目錄下的大概約500個(gè)文件,編譯時(shí)根據(jù)上層Makefile傳下來的宏定義和其他編譯規(guī)則,將源代碼編譯成模塊或者編譯進(jìn)內(nèi)核

頂層的Makefile文件讀取 .config文件的內(nèi)容,并總體上負(fù)責(zé)build內(nèi)核和模塊。Arch Makefile則提供補(bǔ)充體系結(jié)構(gòu)相關(guān)的信息。s目錄下的Makefile文件包含了所有用來根據(jù)kbuild Makefile 構(gòu)建內(nèi)核所需的定義和規(guī)則。其中.config的內(nèi)容是在make menuconfig的時(shí)候,通過Kconfig文件配置的結(jié)果。

舉個(gè)例子:

假設(shè)想把自己寫的一個(gè)flash的驅(qū)動(dòng)程序加載到kernel中,而且能夠通過menuconfig配置內(nèi)核時(shí)選擇該驅(qū)動(dòng)該怎么辦呢?可以分三步:


第一:將你寫的flashtest.c 文件添加到/driver/mtd/maps/ 目錄下。
第二:修改/driver/mtd/maps目錄下的kconfig文件:
                config MTD_flashtest
                tristate “ap71 flash"
               這樣當(dāng)make menuconfig時(shí) ,將會(huì)出現(xiàn) ap71 flash選項(xiàng)。
第三:修改該目錄下makefile文件。
     添加如下內(nèi)容:obj-$(CONFIG_MTD_flashtest)    += flashtest.o


這樣,當(dāng)你運(yùn)行make menucofnig時(shí),你將發(fā)現(xiàn)ap71 flash選項(xiàng),如果你選擇了此項(xiàng)。該選擇就會(huì)保存在.config文件中。當(dāng)你編譯內(nèi)核時(shí),將會(huì)讀取.config文件,當(dāng)發(fā)現(xiàn)ap71 flash 選項(xiàng)為yes 時(shí),系統(tǒng)在調(diào)用/driver/mtd/maps/下的makefile 時(shí),將會(huì)把 flashtest.o 加入到內(nèi)核中。即可達(dá)到編譯的目的。

4. Linux下面如何將外部驅(qū)動(dòng)代碼納入核心一起編譯


1 ) 概述
某個(gè)功能或者設(shè)備驅(qū)動(dòng)可以直接build-in內(nèi)核,也可以作為內(nèi)核模塊,在要用時(shí)再調(diào)入。這里假定寫作了一個(gè)鍵盤設(shè)備驅(qū)動(dòng),要將設(shè)備驅(qū)動(dòng)代碼和內(nèi)核代碼集成,并可以在內(nèi)核編譯時(shí)將驅(qū)動(dòng)編譯進(jìn)內(nèi)核或者作為內(nèi)核模塊。

這里不對(duì)內(nèi)核編譯和模塊編譯的背景知識(shí)做詳細(xì)解釋,只是描敘過程。如果你對(duì)背景知識(shí)感興趣,請(qǐng)閱讀本文檔后面列出的參考文檔。

注意:Linux版本不同,內(nèi)核區(qū)別很大。


2 ) 具體步驟

2.1) 搭建linux編譯環(huán)境
我采用的是windowXP + VMware虛擬機(jī) + Fedora1(安裝在虛擬機(jī)中)的環(huán)境,個(gè)人認(rèn)為此種方式效率比較高。安裝linux的時(shí)候注意要安裝kernel開發(fā)包和GCC開發(fā)包,如果空間足夠的話,還是建議以全部安裝方式安裝linux。

取得交叉編譯安裝包,例如cross-3.3.2.tar.bz2
將交叉編譯安裝包在/usr/local下面解壓:tar –jxvf cross-3.3.2.tar.bz2
解壓完成后生成arm-kernel目錄

取得arm的2.6內(nèi)核代碼,例如linux-hzh.tar.bz2
將內(nèi)核代碼在/root下面解壓:tar –jxvf linux-hzh.tar.bz2
解壓后生成linux-2.6.13-hzh目錄

將交叉編譯器的路徑加入環(huán)境變量,我是編輯/root/.bashrc,在最后加上一行
expot PATH=$PATH:/usr/local/arm-kernel/3.3.2/bin
完成后,登出用戶(logout命令),再登入一下,環(huán)境變量就生效了

2.2)修改配置文檔
2.2.1) 拷貝代碼
根據(jù)驅(qū)動(dòng)的類型,將驅(qū)動(dòng)代碼拷貝到內(nèi)核源代碼樹的相應(yīng)的驅(qū)動(dòng)目錄
例如:
將鍵盤驅(qū)動(dòng)keyscan64.c keyscan64.h 代碼拷貝到/root/linux-hzh/drivers/input/keyboard

2.2.2) 修改Kconfig配置文件
編輯/root/linux-hzh/drivers/input/keyboard目錄下面的Kconfig文件,加入新的鍵盤配置選項(xiàng) ,例如:
添加
config MYKEYBOARD
       tristate "MY keyboard support"
       default y
       help
      The "MYKEYBOARD" is simple a scanable keyboard, Y for build in ,M for Module.

配置解釋:
config MYKEYBOARD
上面的config是配置關(guān)鍵字,MYKEYBOARD表示新配置選項(xiàng)的標(biāo)識(shí)符

tristate "MY keyboard support"
中tristate表示是可以配置成Y,M,N三中情況

default y
配置默認(rèn)是什么選項(xiàng)

       help
      The "MYKEYBOARD" is simple a scanable keyboard, Y for build in ,M for Module.
配置的幫助

2.2.3) 修改Makefile編譯文件
編輯/root/linux-2.6.13-hzh/drivers/input/keyboard目錄下面的Makefile文件,加入新的鍵盤編譯選項(xiàng),例如
obj-$(CONFIG_MYKEYBOARD)             += keyscan64.o

注意:Kconfig中的配置標(biāo)識(shí)符要和編譯選項(xiàng)中紅色標(biāo)識(shí)符一致,編譯的目標(biāo)keyscan64.o名稱要和源代碼的keyscan64.c名稱一致,這是系統(tǒng)強(qiáng)行規(guī)定的。

2.3) 編譯內(nèi)核
2.3.1) make clean
和普通的編譯內(nèi)核一樣
make clean
清除原先編譯過程文件

2.3.2) make menuconfig
文本菜單配置方式配置內(nèi)核選項(xiàng)
導(dǎo)入源代碼預(yù)配置的文件
配置新加入的驅(qū)動(dòng)
新的配置選項(xiàng)在上圖中顯示出來了,可以配置成y(build in),m(module),n(不編譯),默認(rèn)是y,把它配置成M(module),然后退出,保存配置
2.3.3) make zImage
編譯內(nèi)核,生成內(nèi)核映像文件

2.3.4) make modules
編譯內(nèi)核模塊

2.4) 確認(rèn)結(jié)果
在目錄arch/arm/boot 下面可以看到新生成的zImage內(nèi)核映像文件
在目錄drivers/input/keyboard 下面可以看到鍵盤的內(nèi)核模塊keyscan64.ko


以下課程可免費(fèi)試聽C語言、電子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽課了。
宋工企鵝號(hào):3524-6590-88   Tel/WX:173--1795--1908




本文地址:http://m.qingdxww.cn/thread-517313-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎永久在线日韩精品观看 | 青青青国产免费全部免费观看 | 国产另类视频 | 网站在线播放 | 日韩亚洲国产欧美精品 | 国产日韩欧美综合在线 | 国产成人影院一区二区 | 日本高清一区二区三区不卡免费 | 欧美a视频在线观看 | 亚洲欧美在线观看视频 | 欧美一区二区三区四区在线观看 | 久久精品国产一区 | 在线观看亚洲欧美 | 欧美国产在线一区 | 夜鲁夜鲁夜鲁在线观看福利 | 看一级毛片免费观看视频 | 青青草国产在线观看 | 高颜值露脸极品在线播放 | 国产麻豆高清在线观看 | 日本精品视频一区二区 | 国产免费自拍视频 | 久久免费观看国产99精品 | 国产精品久久久久久一级毛片 | 日韩区欧美区 | 国产乱弄视频在线观看 | 国产毛片一区二区三区精品 | 在线观看精品视频一区二区三区 | 亚洲欧美专区精品伊人久久 | 韩国免费一级成人毛片 | 国产一区二区三区免费播放 | 非洲黑人高清一级毛片 | 国产亚洲第一精品社区麻豆 | 欧美日韩国产一区二区 | 午夜视频在线观看www中文 | 日日摸人人看97人人澡 | 欧美日韩精品国产一区在线 | 三级色网站 | 亚洲精品视频免费 | 亚州免费视频 | 欧美色欧美亚洲高清在线观看 | 久久精品国产99国产精品小说 |