本章導讀
在前面入門視頻第十期“搭建編譯環境 uboot_linux_Android”中,只介紹了輸入 Make命令就可以編譯出內核,并沒有介紹它是如何運行的。
在向內核中添加驅動的時候要完成 3 項工作,包括:
1)在 Kconfig 中添加新代碼對應項目的編譯條件,這一部分在實驗 3 已經介紹過;
2)將驅動源碼添加到對應的目錄中,這一步比較好理解,在本章實驗中將給大家演示一下;
3)在目錄 Makefile 中文件中增加針對新代碼的編譯條目,這一部分將在本章節介紹到。
4.1.1 工具
4.1.1.1 硬件工具
1)PC 機
4.1.1.2 軟件工具
1)虛擬機 Vmware
2)Ubuntu12.04.2
3)Ubuntu 系統下解壓生成的 Linux 源碼
4.1.2 預備課程
入門視頻“01-燒寫、編譯以及基礎知識視頻”
→“實驗 10-搭建編譯環境 uboot_linux_Android”或者使用手冊“五 Android 開
發環境搭建以及編譯”;
實驗三 Menuconfig_Kconfig
4.1.3 視頻資源
本節配套視頻為“視頻 04_Makefile 編譯”
4.2 學習目標
本章需要學習以下內容:
掌握 Linux 內核編譯命令
掌握編譯器路徑設置的方法
理解環境變量路徑、編譯器、源碼 Makefile 文件中編譯器路徑三者之間的關系
理解 Makefile 文件結構
掌握向 Makefile 文件中添加腳本命令的方法,能夠看懂 Makefile 腳本
4.3 編譯器路徑的設置
在前面入門知識中,只介紹了在什么目錄解壓編譯器,在環境變量文件中添加路徑,就可以編譯出內核,并沒有介紹他們之間是如何對應的。
如下圖所示,按照前面提供的基礎教程,配置好 Ubuntu 中的編譯器和庫文件,輸入命令“#make”,就可以編譯生成內核的二進制鏡像。
如下圖所示,使用命令“#cd”,使用命令“#vim .bashrc”打開環境變量文件“.bashrc”。
如下圖所示,進入最底行,可以看到,在環境變量文件中編譯器路徑設置為“exportPATH=$PATH:/usr/local/arm/arm-2009q3/bin”。
然后使用命令“#cd /usr/local/arm/”,進入解壓編譯器“arm-2009q3.tar.bz2”的文件目錄。
可以明顯的看到,環境變量中設置的路徑和解壓的路徑是對應的。
這里回到內核源碼的目錄,如下圖所示。
如下圖所示,使用命令“#vim Makefile”打開內核目錄下的 Makefile 文件。
這里通過 vim 編輯器查找參數“CROSS_COMPILE”,如下圖所示。
可以查到參數“CROSS_COMPILE”,如下圖所示。
如上圖所示,可以看到這個參數是“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”。
再看一下參數“CROSS_COMPILE”的下一行,可以看出這里有修改過的痕跡。很容易推斷出,原來三星是用的“4.5.1”版本的編譯器,不過這個沒關系,只要能編譯通過就可以了。
一般說來,拿到源碼之后的第一步,是要先要先將源碼編譯通過。
設置上圖中的變量“CROSS_COMPILE”以及環境變量還有編譯器實際解壓路徑三者對應。這三者對應之后,就能確保執行 Make 命令之后,系統能夠找到這個編譯器。
在編譯命令執行的過程中,會提示一些錯誤,然后根據提示的錯誤,挨個去排查修改,去添加庫文件或者修改庫文件。這個過程有長有短,考驗的只是耐心,并沒有太多技巧。由于已經將缺少的庫文件寫成腳本,這樣大家在編譯器執行以下腳本就能夠編譯通過。
針對內核目錄下的 Makefile 文件,提醒大家一下,這個文件中內容很多,除了上面編譯器路徑變量以外的其它部分幾乎不用關注。
另外還有一個地方需要了解一下,如下圖所示,在該文件的第一行,可以看到內核的版本。
4.4 Make 內核編譯命令執行過程簡介
如下圖所示,編譯內核需要執行 make 命令,在執行 make 命令之后,并沒有介紹它是如何執行的。
在 make 命令執行之后,它會首先找到當前目錄下的“Makefile”文件,如下圖所示。
運行 Makefile 文件之后,它會在 Makefile 文件中找到編譯器的路徑“/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-”如下圖所示。
然后系統根據環境變量找到“export PATH=$PATH:/usr/local/arm/arm-2009q3/bin”編譯器的路徑,如下圖所示。
如下圖所示,使用命令“ls /usr/local/arm/arm-2009q3/bin/”可以查看到 arm2009q3解壓之后有哪些具體編譯器。
如上圖,系統找到編譯器之后,同時基礎的庫文件也是和編譯器在一起的,有時候編譯一個新的內核,還有可能需要修改庫文件。
編譯執行前還需要找到“.config”文件,默認是放在源碼目錄下的。使用命令“ls -a”就可以看到,如下圖所示。
從本章‘實驗 03’的 3.5 小節,學習到這個“.config”是通過 menuconfig 工具生成的,里面只是一些宏定義,如下圖所示,打開這個文件。
查找宏定義”LEDS,”是編譯 led 驅動的宏定義“LEDS_CTL”,如下圖所示。
現在系統找到這個宏定義“LEDS_CTL”,在編譯具體中間文件的時候會用到。
具體是怎么實現的,繼續看下一小節的內容就可以搞清楚這個宏定義有什么用處。
上一篇:迅為IMX6Q開發板-QtE4.7編譯
下一篇:迅為IMX6ULL開發板Linux RS232/485驅動實驗(上)
推薦閱讀最新更新時間:2025-06-29 09:40


設計資源 培訓 開發板 精華推薦
- AD5347 并行接口、八路電壓輸出、10 位 DAC 的典型應用
- LTM4650AIY-1 4.5 至 16Vin、1.5V 和 1.2V、25A 輸出降壓穩壓器的典型應用電路
- L78L09AC可調輸出穩壓器的典型應用
- TDA7265 單電源典型應用電路,帶靜音/待機的 25 +25W 立體聲放大器
- LTC2601IDD-1 16 位軌至軌 DAC 在 10 引腳 DFN 中的典型應用
- 使用 ON Semiconductor 的 LV4985VH 的參考設計
- AM1G-0503DZ ±3.3V 1 瓦 DC-DC 轉換器的典型應用
- DER-856 - 45 W USB PD 3.0,采用 3.3 V-21 V PPS(3.3 V-11 V 的 APDO 5 A)電源,使用 InnoSwitch3-Pro PowiGaN 和 VIA Labs VP302 控制器
- 具有低 IQ 模式的 A8585 寬輸入電壓、2A 降壓穩壓器系列的典型應用
- 全硅穩壓器的典型應用