1.Linux內核獲取
Linux由 Linux基金會管理與發布,Linux官網為 https://www.kernel.org ,所以若想獲取最新的 Linux版本就可以在這個網站上下載,網站界面如下圖所示:
一般半導體廠商會從 Linux內核官網下載某個版本,將其移植到自己的 CPU上,測試成功后就會將其開放給該半導體廠商的 CPU開發者。 開發者下載其提供的 Linux內核,然后將其移植到自己的產品上。
本文我們就使用 NXP提供的 Linux源碼,文件名為:
linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
2.Linux內核初次編譯
編譯內核之前需要先在ubuntu上安裝lzop庫,另外,圖形化配置工具還需要ncurses庫支持,安裝命令為:
sudo apt-get install lzop
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
在Ubuntu中新建一個文件夾,然后將linux內核壓縮包拷貝到文件夾中并解壓,解壓命令為:
tar -vxf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
解壓后進入該文件夾,新建一個build.sh腳本文件來編譯,腳本中的內容如下:
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16
給予該腳本可執行權限,然后運行,編譯的時候會彈出Linux圖形配置界面, 這里不需要做任何的配置, 直接按兩下ESC鍵退出圖形界面
之后會自動開始編譯Linux內核,等待編譯完成,完成以后如下圖所示
編譯完成以后就會在arch/arm/boot這個目錄下生成一個zImage文件,該文件就是要用的Linux鏡像文件。 另外也會在arch/arm/boot/dts下生成很多.dtb文件,這些.dtb就是設備樹文件
vmlinux、Image、zImage、uImage 的區別:
- vmlinux是ELF格式的文件,是編譯出來的最原始的內核文件,編譯出來 差不多有16MB,是未壓縮的。 在實際中我們不會使用vmlinux,而是使用zImage或uImage這樣的 Linux 內核鏡像文件
- Image是Linux內核鏡像文件,但是Image僅包含可執行的二進制數據。 Image就是使用objcopy取消掉vmlinux中的一些其他信息,比如符號表什么的。 但是 Image 是沒有壓縮過的,Image保存在arch/arm/boot目錄下,其大小大概在12MB
- zImage是經過gzip壓縮后的Image,經過壓縮以后其大小大概在6MB左右
- uImage是老版本uboot專用的鏡像文件,uImag是在zImage前面加了一個長度為 64字節的“頭” ,這個頭信息描述了該鏡像文件的類型、加載位置、生成時間、大小等信息。 但是新的uboot已經支持了 zImage 啟動! 所以已經很少用到uImage了
3.Linux內核源碼結構
Linux內核編譯過程會生成一些文件,下面來看一下編譯前后的內核源碼結構,可以看出多出了一些編譯文件
編譯后的內核源碼比未編譯的源碼多了許多文件,這些文件或文件夾的含義見下表:
上表中很多文件夾和文件可以不需要去關心,要關注的文件夾或文件如下示
arch目錄 :和架構有關的目錄,比如arm、arm64、avr32、x86等等架構。 每種架構都對應一個目錄,在這些目錄中又有很多子目錄,比如boot、common、configs等等
block目錄 :block是Linux下塊設備目錄,像SD卡、EMMC、NAND、硬盤等存儲設備就屬于塊設備,block目錄中存放著管理塊設備的相關文件
crypto目錄 :存放著加密文件,比如常見的crc、crc32、md4、md5、hash等加密算法
Documentation目錄 :存放著Linux相關的文檔,如果要想了解Linux某個功能模塊或驅動架構的功能,就可以在Documentation目錄中查找有沒有對應的文檔
drivers目錄 :驅動目錄文件,此目錄根據驅動類型的不同,分門別類進行整理,比如drivers/i2c就是I2C相關驅動目錄,drivers/gpio就是GPIO相關的驅動目錄,需要重點關注
firmware目錄 :此目錄用于存放固件
fs目錄 :存放文件系統,比如fs/ext2、fs/ext4、fs/f2fs等,分別是ext2、ext4 和 f2fs等文件系統
include目錄 :頭文件目錄
init目錄 :存放 Linux內核啟動的時候初始化代碼
ipc目錄 :IPC為進程間通信,ipc目錄是進程間通信的具體實現代碼
kernel目錄 :Linux 內核代碼
lib目錄 :lib是庫的意思,lib目錄都是一些公用的庫函
mm目錄 :存放內存管理相關代碼
net目錄 :存放網絡相關代碼
samples目錄 :存放一些示例代碼文件
scripts目錄 :腳本目錄,Linux 編譯的時候會用到很多腳本文件,這些腳本文件就保存在此目錄中
security目錄 :存放安全相關的文件
sound目錄 :存放音頻相關驅動文件,音頻驅動文件并沒有存放到 drivers目錄中,而是單獨的目錄
tools目錄 :存放一些編譯的時候使用到的工具
usr目錄 :存放與 initramfs 有關的代碼
virt目錄 :存放虛擬機相關文件
.config文件 :跟 uboot一樣,.config保存著 Linux最終的配置信息,編譯 時候會讀取此文件中的配置信息。 最終根據配置信息來選擇編譯 Linux 哪些模塊,哪些功能
Kbuild文件 :有些 Makefile會讀取此文件
Kconfig文件 :圖形化配置界面的配置文件
Makefile文件 :Linux 頂層 Makefile 文件,建議好好閱讀一下此文件
README文件 :此文件詳細講解了如何編譯 Linux 源碼,以及 Linux 源碼的目錄信息
-
NXP
+關注
關注
60文章
1289瀏覽量
185086 -
內核
+關注
關注
3文章
1382瀏覽量
40373 -
Linux
+關注
關注
87文章
11342瀏覽量
210148 -
源碼
+關注
關注
8文章
652瀏覽量
29363 -
編譯
+關注
關注
0文章
661瀏覽量
32974
發布評論請先 登錄
相關推薦
評論