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