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

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

發布時間:2020-12-17 10:08    發布者:落風
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”二進制文件。


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

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人1024精品免费 | 欧美成人精品高清在线观看 | 日本大片在线观看 | 四虎影院在线网址 | 日韩精品一区在线观看 | 在线观看视频99 | 日韩免费一级片 | a天堂影院 | 欧美一区二区在线 | 国产欧美在线观看 | 日韩欧美一区二区三区中文精品 | 精品亚洲综合久久中文字幕 | 日韩高清在线播放 | 国产aⅴ精品一区二区三区久久 | 久草香蕉视频在线观看 | 亚洲国产高清在线观看视频 | jizz日本老师| 欧美日韩中文国产va另类 | 毛片视频免费观看 | 手机在线观看精品国产片 | 最新日本中文字幕 | 久草视频网 | 欧美性生大片免费观看 | 精品国产1区 | 很黄很色很刺激视频播放 | 国产91单男3p在线观看 | 久草成人在线 | 综合网在线观看 | 四虎91视频| 国产欧美日韩中文字幕 | 欧美影院 | 国产成人在线视频网站 | 精品国产三级在线观看 | 成人激情站 | 国产欧美一区二区三区在线 | 高h全肉动漫在线观看最新 高h全肉动漫在线观看免费 | 国产精品麻豆一区二区 | 亚洲第一色在线 | 亚洲欧美日韩在线观看看另类 | 韩国在线观看日韩 | 欧洲精品一区二区三区在线观看 |