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

落風的個人空間 http://m.qingdxww.cn/space-uid-138363.html [收藏] [復制] [RSS]

博客

迅為4412開發板實驗_Makefile編譯(下)

已有 781 次閱讀2020-12-17 10:44

4.5Makefile 文件
接前一小節的內容,繼續介紹系統是如何一步一步編譯出內核鏡像的。
在這里仍然以 LEDS 小燈為例。
4.5.1 宏定義 LEDS_CTL 的使用
如下圖所示,led 驅動屬于字符驅動,字符驅動一般是在源碼目錄“drivers/char/”下。

如上圖所示,這里要關注的文件只有框框中的三個“itop4412_leds.c”,
“itop4412_leds.o”,“Makefile”。
itop4412_leds.c :比較好理解,就是 led 驅動的源碼
itop4412_leds.o :這個是生成最終 zImage 二進制的中間文件
Makefile :就是 Make 命令所需要的文件
這里不關心 itop4412_leds.c 中的代碼,只需先知道 itop4412_leds.c 的文件名即可。在源碼目錄中使用命令“vim drivers/char/Makefile”,如下圖所示。

打開“vim drivers/char/Makefile”文件之后,找到和 itop4412_leds.c 相關的文件,搜索“itop4412_leds”,如下圖所示。

如上圖方框所示,就是編譯 itop4412_leds.c 的腳本。這個腳本大家也只需要仿照寫即可,嚴格的按照已有的例子來寫即可。

如果想添加類似的字符驅動,就可以在這個目錄下添加。
Kconfig、Makefile、menuconfig、“.config”文件大家就可以聯系起來了。
4.5.2 Makefile 腳本語法簡介
本小節介紹的語法是對內核源碼子目錄中 Makefile 進行簡單的介紹,這部分是經常會用到的,也是需要掌握的。
常用的強制編譯寫法,還是在“drivers/char/Makefile”中,在 Top 行,如下圖所示。

上圖中的這一行“obj-y += misc.o”,注意這里需要和內核自帶的代碼對齊。
“加等號”右邊的“misc.o”表示要編譯 Makefile 目錄下的“misc.c”文件,
“加等號”左邊的“obj-y ”表示要編譯,并鏈接進內核(鏈接進內核是 linux 源碼中自帶的工具處理的,驅動工程師完全不用關心具體是怎么實現的)
如下圖所示,就是 LEDS_CTL 的條件編譯,也就是需要在 Kconfig 中定義,在menuconfig 中配置之后,編譯器運行的時候找到對應的宏變量 LEDS_CTL 之后才會編譯。

上圖比較好理解,因為一直是以這個 LEDS_CTL 為例來講解的。這種方式在寫驅動的時候會經常使用到。
最后介紹一下目錄層次的迭代,如下圖所示,使用命令“vim drivers/Makefile”打開“drivers/char”上一層目錄的 Makefile 文件。

搜索關鍵詞“char”,因為前面介紹到的字符變量在“char”目錄下,如下圖所示。

上圖中的語法也是很簡單,只不過“加等號”右邊有文件變為了文件夾。這里表示強制編譯當前目錄“/drivers”的下一級目錄“/char”。在執行編譯命令執行到這句的時候,就會先跳轉到“/char”目錄下的“Makefile”文件。
4.6 Makefile 測試
本小節給大家做個簡單的小實驗,通過配置 menuconfig 中的 LEDS,來將內核編譯進內核或者不編譯進內核。
4.6.1 將 LEDS 驅動不編譯
進內核如下圖所示,在給大家提供的源碼中,解壓之后默認狀態就有將“itop4412_leds.c”編譯進內核的中間文件“itop4412_leds.o”,如下圖所示。

如下圖所示,使用命令“rm -rf drivers/char/itop4412_leds.o”刪除掉 LEDS 驅動的中間文件“itop4412_leds.o”。

如下圖所示,使用命令“ls drivers/char/”查看一下,發現已經沒有了“itop4412_leds.o”文件。

然后使用命令“make menuconfig”,打開配置工具,如下圖所示。

打開之后,如下圖所示。找到“Device Drivers ---> ”選項。

如下圖所示,進入到“Device Drivers ---> ”選項,找到選項“Character devices--->”。

如下圖所示,找到選項“Enable LEDS config”,將 LEDS 的配置關閉

退出,保存,生成新的“.config”文件。

保存退出后,打開“.config”文件,可以發現“CONFIG_LEDS_CTL”沒有配置。

關閉“.config”文件,然后執行編譯內核的命令“make”,如下圖所示。

如下圖所示,編譯完成。

如下圖所示,使用命令“ls drivers/char”查看 LEDS 驅動所在目錄,發現并沒有產生了中間文件。

最后也可以將生成的文件“zImage”文件下載到開發板,會發現“/dev”目錄中沒有產生 LEDS 驅動的設備節點“leds”。
4.6.2 將 LEDS 驅動編譯進內核
接上一小節,如下圖所示,使用命令“make menuconfig”,打開 menuconfig 配置工具。

進入“ Device Drivers --->”選項,然后進入“Character devices --->”選項,然后如下圖所示,配置上“Enable LEDS config”。

保存退出。打開“.config”文件,可以發現“CONFIG_LEDS_CTL=y”已經配置。

執行編譯命令“make”,如下圖所示,編譯完成之后,使用命令“ls drivers/char/”可以看到“itop4412_leds.o”已經生成。

最后也可以將生成的文件“zImage”文件下載到開發板,會發現“/dev”目錄中產生LEDS 驅動的設備節點“leds”,LED 燈的控制又恢復正常了。
4.7 編譯流程圖解
現在內核編譯相關的知識已經全部介紹完,本節做一個小節。
下圖已經將內核編譯的全部過程包含。

如上圖所示。
紅色的線條表示配置文件 Kconfig 這一部分,在 Kconfig 中要定義針對具體驅動文件的宏變量。然后使用 menuconfig 工具生成新的”,config“文件。
黑色的線條表示編譯文件 Makefile 這一部分,在 Makefile 中針對宏變量編譯驅動文件。
執行 make 命令之后,調用“.config”文件,配合各級目錄中的 Makefile 文件編譯具體的驅動源代碼,將源代碼編譯成“.o”中間文件。
當中間文件全部編譯完成之后,編譯工具會生成一個非常精煉的“zImage”二進制文件。

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
返回頂部
主站蜘蛛池模板: 性xxx中文视频 | 日韩精品一区二区三区四区 | 在线免费观看欧美大片 | 一区二三区国产 | 日本高清在线播放一区二区三区 | 四虎影视884aa·com | 中国女人毛片 | 香蕉国产| 欧美日韩91| 国产成人亚洲欧美激情 | 日本久久道一区二区三区 | 最新更新国内自拍视频 | 亚洲m男在线中文字幕 | 岛国在线最新 | 免费观看亚洲视频 | 亚洲第一网站 | 亚洲色图第一页 | 四虎在线网站 | 香蕉依依精品视频在线播放 | 成黄动漫免费在线看 | 欧美日韩在线成人看片a | 瑜伽女人一级毛片 | 九色精品高清在线播放 | 天天摸夜夜添夜夜添国产 | 青青国产成人久久激情911 | 男人的天堂免费在线观看 | 日本h在线精品免费观看 | 九月色婷婷 | 欧美一区2区三区4区公司贰佰 | 欧美日韩国产亚洲一区二区 | 色猫咪网站 | 95老司机免费福利 | 99在线观看免费视频 | 国产成人在线免费观看 | 888午夜不卡理论久久 | 一二三四社区在线视频社区3 | 成人免费网址在线观看黄动漫 | 日本高清在线观看视频www | 久草精品免费 | 久久99网站 | 国产动漫在线 |