編譯核心(添加驅動)

來源:互聯網
上載者:User

6、添加驅動到linux核心(”實驗源碼”目錄中包括已經修改好的相關檔案)
 對於一個開發人員來說,將自己開發的核心代碼添加到 Linux 核心中,需要有三個步驟。(1)確定把自己的開發代碼放入到核心的位置;
(2)把自己開發的功能增加到 Linux 核心的配置選項中,使使用者能夠選擇此功能
(3)構建子目錄 Makefile,根據使用者的選擇,將相應的代碼編譯Linux 核心中。
 下面,我們就通過一個簡單的例子-XSBASE Simple Driver,結合前面學到的知識,來說明如何將前面設計的驅動加入到 Linux 核心。
6.1、主要步驟
l 在確定代碼位置的前提下,建立源碼目錄、檔案、Makefile、Config.in等。
l 修改上層的config.in檔案,把新增驅動添加到核心配置系統中。
l 修改上層Makefile,將程式添加到核心編譯系統中。
6.2、驅動位置和目錄結構
 假設將xsbase 驅動儲存到linux原始碼的drivers/xsbase/ 目錄下:
$ cd drivers/xsbase $ tree . |-- Config.in |-- Makefile |-- XSB_EDR_8LEDS.c 

6.3、編輯設定檔
(1)編輯xsbase目錄下的設定檔Config.in
 由於 xsbase驅動對於linux核心來說是新增加的功能,所以首先在配置選項上建立一個XSBASE Simple Driver菜單;選中該菜單後,顯示 "XSB_EDR_8LED Support"提示資訊,等待使用者選擇,這裡的詢問語句使用了 tristate(因為 tristate 的取值範圍包括 y、n 和 m,其中m 就是對應著模組)。
# #XSB_EDR_8LED driver configutation #  mainmenu_option next_comment comment 'XSBASE Simple Driver'   tristate 'XSB_EDR_8LED Support' CONFIG_XSB_EDR_8LED  endmenu 
(2)編輯修改CPU體系目錄下的設定檔
 由於本實驗採用ARM體繫結構,所以應對 arch/arm/config.in檔案進行修,具體修改方法是:在檔案的最後加入:source drivers/xsbase/Config.in,將XSBASE Driver 子功能的配置添加到 Linux 核心的配置中。
6.4 Makefile的修改與編輯
(1)編輯xsbase目錄下的設定檔Makefile檔案
 #      drivers/xsbase/Makefile # #      Makefile for the XSB_EDR_8LED #  O_TARGET := XSB_EDR_8LED.o  obj-$(CONFIG_XSB_EDR_8LED)    += XSB_EDR_8LEDS.o  include $(TOPDIR)/Rules.make 
(2)drivers/Makefile
…… subdir-$(CONFIG_ARCH_AT91RM9200)     += at91 subdir-$(CONFIG_XSB_EDR_8LED)         += xsbase …… include $(TOPDIR)/Rules.make 
在drivers/Makefile 中加入subdir-$(CONFIG_XSB_EDR_8LED)         += xsbase,使得在使用者選擇XSB_EDR_8LED Support 功能後,核心編譯時間能夠進入xsbase目錄。
(3)Makefile
…… DRIVERS-$(CONFIG_PLD) += drivers/pld/pld.o DRIVERS-$(CONFIG_ARCH_AT91RM9200) += drivers/at91/at91drv.o DRIVERS-$(CONFIG_XSB_EDR_8LED) += drivers/xsbase/XSB_EDR_8LED.o  DRIVERS := $(DRIVERS-y) …… 
在頂層 Makefile 中加入DRIVERS-$(CONFIG_XSB_EDR_8LED) += drivers/xsbase/XSB_EDR_8LED.o。如果使用者選擇了XSB_EDR_8LED Support,那麼CONFIG_XSB_EDR_8LED的值是 y,XSB_EDR_8LED.o就位於 DRIVERS-y 列表中,然後又被放置在 DRIVERS 列表中。在前面曾經提到過,Linux 核心檔案 vmlinux 的組成中包括 DRIVERS,所以XSB_EDR_8LED.o最終可被連結到 vmlinux 中。
6.5 關於測試程式
測試程式位於目錄test_prog中。可以使用arm-linux-gcc編譯後放到目標板上,用於對新增驅動的測試。程式啟動並執行效果是,調用新增的驅動控制底板上的8個LED燈,讓這8個LED燈有規律的閃爍。

通過本實驗我們從整體上去瀏覽了核心,2.4版本的核心代碼量很大,但我們從整體去領會核心的特點。瞭解核心原始碼中各個目錄的關係和內容,這對瞭解核心很有協助。除外我們還從另一個角度來瞭解核心,就是核心的配置系統結構,瞭解Makefile和設定檔config.in的含義,還詳細介紹核心各個選項的含義。最後通過一個簡單的實驗例子,具體說明如何將自行開發的代碼加入到Linux核心中。

【實驗儀器】
1、裝有Linux作業系統的PC機一台;
2、XSBase270或XSBase255 ARM實驗開發平台一套
【實驗內容】
1、核心編譯實驗
(1)、利用光碟片上提供的Linux原始碼,具體分析遞迴性makefile的結構,畫出一個從最頂層makefile到最底層所經過的檔案路徑和所需要的變數
(2)、利用光碟片上提供的Linux原始碼,寫出編譯Linux核心的具體過程
(3)、利用光碟片上提供的Linux原始碼,然後用make menuconfig命令對核心的配置進行修改,記下具體修改的配置選項並儲存退出,然後用diff命令比較.config和.oldconfig.old兩個新舊配置的差別,同時與記下的配置選項進行比較,根據比較結果,寫出你的結論。
2、驅動載入實驗
(1)、將光碟片上提供的LED 顯示驅動原始碼加入到Linux核心中,寫出加入新驅動到Linux核心中的步驟和所需要修改的檔案。根據修改過程畫出在編譯Linux核心某一驅動的流程。
【思考題】
1、簡述Linux原始碼各目錄中的內容,
2、分析make config、make menuconfig、make xconfig三個linux核心配置介面的區別
3、指出linux核心編譯命令make,make zImage, make bzImage的區別
4、下載一個Linux 2.6核心,查看它們的核心各項配置項的內容。
5、請針對核心的目錄繪製一個樹形結構圖?請分析Linux核心面臨許多新的變化是怎麼將核心組織的很簡潔和具有很好的擴充性。
6、簡述將新增裝置驅動原始碼添加到linux核心中的步驟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.