U-boot mkimage指定Linux内核地址时的两种方式
uImage的制作是使用的u-boot工具mkimage,build完u-boot后也會將mkimage build出來到/tools目錄下,可以直接拿來用,它的作用就是在zImage的前面加上64個字節(jié)的頭,讓u-boot能夠識別要加載內(nèi)核的類型、加載地址等。
基本格式:mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A 指定CPU的體系結(jié)構(gòu):(u-boot支持多種的架構(gòu),這里應(yīng)該是arm)
取值??????? 表示的體系結(jié)構(gòu)
alpha?????? Alpha?
arm???????? ?A RM?
x86???????? ?Intel x86
ia64??????? ?IA64
mips?????? ??MIPS
mips64???? MIPS 64 Bit
ppc???????? ?PowerPC
s390?????? ?IBM S390
sh??????????? SuperH
sparc?????? SPARC
sparc64?? SPARC 64 Bit
m68k?????? MC68000
-O 指定操作系統(tǒng)類型,可以取以下值:(u-boot支持多種的OS,這里應(yīng)該是linux)
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定映象類型,可以取以下值:(u-boot可以加載不同的映像,這里應(yīng)該是kernel)
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C 指定映象壓縮方式,可以取以下值:(除了zImage本身是壓縮格式外,u-boot還可以對其再壓縮,這里應(yīng)該是none)
none 不壓縮
gzip 用gzip的壓縮方式
bzip2 用bzip2的壓縮方式
-a 指定映象在內(nèi)存中的加載地址,可以于實際加載(如tftp加載)時的地址不相同,也可以相同,詳見后面的解釋。
-e?指定映像運(yùn)行的入口地址,可以等于加載地址,也可以是加載地址偏移64字節(jié)(+0x40)后的地址,詳見后面的解釋。
-n 指定映像名稱
-d 指定【源文件】和生成的【目標(biāo)文件名】
調(diào)整的最多的參數(shù)是-a, -e,這兩個參數(shù)需要與實際加載到內(nèi)存時的動作保持一致。
1、如果加載時的地址與-a參數(shù)指定的不相同,則-e必須等于-a。u-boot會把kernel image去掉不包括64字節(jié)的信息頭后搬移到-e處,直接啟動。要注意兩個image的存儲空間不要重疊,兩者之間至少要留image size的空間。
編譯環(huán)境:
mkimage -A arm -O linux -T kernel -C none -a 0x70008000 -e 0x70008000 -n 'Linux' -d zImage uImage
??????? cp uImage /tftpboot/????????
目標(biāo)板環(huán)境:
tftp?? 0x72200000? uImage;?? bootm?? 0x72200000;
2、如果加載時的地址與-a參數(shù)指定相同,則-e必須是-a + 0x40的地址。這時u-boot不需要再執(zhí)行搬移的動作,根據(jù)-e的地址直接啟動。?
??????? 編譯環(huán)境:
??????? mkimage -A arm -O linux -T kernel -C none -a 0x0x70008000 -e 0x70008040 -n 'Linux‘ -d zImage uImage
??????? cp uImage /tftpboot/???????????
??????? 目標(biāo)板環(huán)境:
??????? tftp?? 0x70008000? uImage;??? bootm? 0x70008000; 《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的U-boot mkimage指定Linux内核地址时的两种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EFI分区如何删除
- 下一篇: swift选择类或结构体