日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

关于linux kernel编译的几项关键点:

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于linux kernel编译的几项关键点: 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. make參數: CROSS_COMPILE
即交叉編譯器的前綴(prefix),也就是選擇將代碼編譯成目標cpu的指令的工具,如指定makeCROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc,arm-none-linux-gnueabi-ld等工具將代碼編譯成arm的可執行指令。如果不指定CROSS_COMPILE參數,make時將認為prefix為空,即使用gcc來編譯。

2.make參數: ARCH
即architecture,就是選擇編譯哪一種cpuarchitecture,也就是編譯arch/目錄下的哪一個子目錄。如指定makeARCH=arm就是編譯arch/arm下的代碼。如果不指定,make將使用本機(用什么機器編譯就是什么)的cpu作為缺省ARCH.注意:arch/arm下不但有arm體系架構特有的代碼,還有arm特有的kconfig,也就是配置選項,所以在makemenuconfig,make xxxx_defconfig的時候也必須指定ARCH=arm。

3. Configure& make kernel 的基本步驟
以編譯arm versatile為利:

step 1:
make mrproper
清除所有上次編譯產生的文件和.config文件。

step 2:
make ARCH=arm versatile_defconfig
使用arch/arm/configs/versatile_defconfig文件的配置,versatile_defconfig的內容將被copy到.config中。.config文件是將用戶選好的編譯選項保存下來,make時讀取.config中的選項來編譯kernel。注意:必須指定ARCH=arm,否則make會到arch/i386/configs下去找versatile_defconfig。正如前面2.ARCH中所述不指定ARCH的話,將使用本機(i386)的ARCH作為缺省ARCH。

step 3:
make ARCH=arm menuconfig
啟動圖形界面來作手工配置剛此生成的.config文件。此處也必須指定ARCH=arm,否則不會load剛才生成的ARCH=arm的.config.
修改配置后保存退出。

step 4:
make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
編譯生成kernel image,arm的kernel image存放在arch/arm/boot/zImage.'-j4'的作用是啟動4線程編譯。



4.Kernel編譯生成產物:

vmlinux
位于kernel源代碼的根目錄下。vmlinux是virtual memory linuxkernel.它是一個elf文件(executable & linkingformat),未壓縮,其中包含所有的symbol,comments。可用arm-none-linux-gnueabi-readelf來讀取其中的信息。

zImage(bzImage):
位于arch/arm/boot/下,是將vmlinux去除了symbol, comment后,添加了一段初始化代碼,然后用gzip壓縮,最后加上一小段mini gunzip代碼(用于load后解壓縮)而成的。bzImage是bigzImage。zImage適用于小內核,如果kernel較大,應該用bzImage.

uImage:
位于arch/arm/boot/下,被uboot引導的kernel image。缺省狀態下不會被編譯出來,需要makeuImage才會被編譯。uImage實在zImage上加上一個64bytes的“header”,用來告訴uboot這個Image的大小等。
所以用hexdump可以看出,uImage從第64byte開始和zImage是完全一樣的。

System.map:
這是整個kernelImage中symbol與address的對應表。用vi打開即可看到。實際上在make的最后會用arm-none-linux-gnueabi-nm來讀取vmlinuxelf文件,從而生成System.map。只要運行arm-none-linux-gnueabi-nm -n vmlinux> tmp.map就會發現tmp.map和System.map是一樣的。

下圖說明了這些產物之間的關系:

? make????????????- symbol, comment? + init code?gzip compress?? + mini gunzipheader
-------> vmlinux?------------------>?---------->?------------->?------------------->

????????????????64B header
zImage(bzImage)------------>??uImage

總結

以上是生活随笔為你收集整理的关于linux kernel编译的几项关键点:的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。