Linux驅動配置內核:Linux在嵌入式系統中大受歡迎的一個重要因素就是開源,開源的特性決定了Linux內核可以根據個人的需求進行裁剪,裁剪內核就是根據你的硬件資源,將一些不需要的驅動裁剪掉。再把一些原本沒有的驅動添加到內核,那么配置好的內核就適用于你特定的硬件平臺。配置內核時,make zImage make menuconfig,還有 .config Kconfig Makefile文件,以訊為iTop-4412(三星exynos4412處理器)平臺,捋一捋這些命令,文件的關系。
編譯內核時,首先要在源碼目錄下執行make zImage,如果是剛解壓完的源碼,直接執行make zImage命令是不會成功的,因為源碼目錄下缺少了.config文件,這個文件是干嘛的,打開看一下就會發現,基本上是一些宏定義的賦值
那么這些宏在什么時候用呢,我們知道,執行make zImage后,會逐層的在各目錄下執行make,執行make時,就會需要Makefile文件,以/driver/char目錄下的Makefile文件為例
Makefile文件中,$是取值的意思,也就是取各個宏的值,那么這些宏的值在哪,就在.config文件中。這時候,如果這些宏的未定義,那么相應的驅動就不會被編譯進內核,如果這些宏的定義為y,以上圖最后一行代碼為例,如果CONFIG_PRINTER這個宏在.config文件中有CONFIG_PRINTER=y,那么最后一行代碼就等價于
obj -y += lp.o
那么對應的驅動就會被編譯進內核,這也就是我們裁剪內核的手段,就是把相應的宏賦值為y或者未定義,來決定哪些驅動要編譯進內核,哪些不編譯。
那么這個文件是怎么來的,手動寫?這個有點不太現實,因為驅動太多了,關鍵是手動寫很容易出錯。然后Linux就想了一個辦法,make menuconfig圖形化的配置界面。有了這個配置界面后,就可以用鍵盤來對內核進行配置,在源碼根目錄下執行make menuconfig就會出現配置界面。
這樣我們就可以用空格來決定那些驅動要配置進內核,配置好了之后,保持退出,就會自動生成 .config文件。假設我們在上圖中將Enable LEDS config這個菜單選中,那么就會在.config文件中出現這樣一行代碼
那么make menuconfig是怎么工作的呢,這些配置的菜單是怎么出現的,假如我自己要添加一個驅動,怎么才能讓配置菜單出現在make menuconfig的選項中呢。這一連串的問題都是因為Kconfig這個文件,make menuconfig名令就是逐層的讀取Kconfig文件,然后生成菜單,看一下/driver/char目錄下的Kconfig文件
以上每五行為一組,第一行表示配置哪個宏,也就是說剛剛在上面描述的CONFIG_LEDS_CTL這個宏,最初就是在這里定義的。第二行告訴表示這個變量在配置界面中是bool值還是tristate,bool值在配置的時候只能配置為y或者未定義,tristate還可以選擇為m,表示編譯為模塊。第三行表示該選項的默認值。第四行和第五行表示用戶選擇help時的幫助內容。
如果用一張圖表示上面的關系,是這樣的
那么假設現在有一個測試驅動名字為hello,假設驅動已經書寫好了,保存在/driver/char/hello.c文件中,該如何把這個驅動編譯進內核,根據上圖中關系,首先要編輯/driver/char目錄下的Kconfig文件,在這個文件中照葫蘆畫瓢,添加這樣一句代碼
保存退出后,在源碼根目錄下,執行make menuconfig進入到Device Driver-->Character devices就會看到剛剛添加的內容
默認狀態下是選中的,因為我們在Kconfig文件中配置的default y 。這樣我們保存退出后就會在.config文件中看到這個宏的值已經被賦值為y
那么這個宏被賦值為y有什么作用的,我們還需要修改一下/driver/char目錄下的Makefile文件,在文件中也是照葫蘆畫瓢,添加這樣一行代碼
這樣在編譯的時候,我們的hello.c文件就最終編譯進內核。
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170116/88704.html
文章列表