我正在尝试使用建议的 bootm 或 bootz 命令从 FIT 映像启动 Linux 内核。
这是 .its 文件
/dts-v1/;
/ {
description = "Simple image with single Linux kernel and FDT blob";
#address-cells = <1>;
images {
script@1 {
description = "Bootscript";
data = /incbin/("/home/dvdk/lynx/boot_original.scr");
type = "script";
rch = "arm";
os= "linux";
compression = "none";
load = <0x81000000>;
entry = <0x81000000>;
};
kernel@1 {
description = "Linux zImge_signed kernel";
data = /incbin/("/home/dvdk/lynx/cst-2.3.2/linux64/xuelk-1.2.1_zImage");
type = "kernel";
arch = "arm";
os= "linux";
compression = "none";
load = <0x81800000>;
entry = <0x81800000>;
hash@1 {
algo= "crc32";
};
hash@2 {
algo= "sha1";
};
};
kernel@2 {
description = "Linux uImage kernel";
data = /incbin/("/home/dvdk/lynx/linux/arch/arm/boot/uImage");
type = "kernel";
arch = "arm";
os= "linux";
compression = "none";
load = <0x81800000>;
entry = <0x81800000>;
hash@1 {
algo= "crc32";
};
hash@2 {
algo= "sha1";
};
};
fdt@1 {
description = "Flattened Device Tree blob";
data = /incbin/("/home/dvdk/lynx/linux/arch/arm/boot/dts/imx6ul-lynx-som000c.dtb");
type = "flat_dt";
arch = "arm";
compression = "none";
hash@1 {
algo= "crc32";
};
hash@2 {
algo= "sha1";
};
};
};
configurations {
default = "conf@1";
conf@1 {
description = "Boot Linux kernel with FDT blob";
kernel = "kernel@1";
fdt= "fdt@1";
};
};
};
然后我使用 0x80000000 中的 tftp 加载板上的拟合图像,
并使用 iminfo 我获得
## Checking Image at 80000000 ...
FIT image found
FIT description: Simple image with single Linux kernel and FDT blob
Image 0 (script@1)
Description: Bootscript
Type: Script
Compression: uncompressed
Data Start: 0x800000e0
Data Size: 489 Bytes = 489 Bytes
Image 1 (kernel@1)
Description: Linux zImge_signed kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x80000380
Data Size: 6812760 Bytes = 6.5 MiB
Architecture: ARM
OS: Linux
Load Address: 0x81800000
Entry Point: 0x81800000
Hash algo: crc32
Hash value: e9192982
Hash algo: sha1
Hash value: 3b363dcf6d15f4a598c7594f305cc71a47622614
Image 2 (kernel@2)
Description: Linux uImage kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x8067f8fc
Data Size: 6807040 Bytes = 6.5 MiB
Architecture: ARM
OS: Linux
Load Address: 0x81800000
Entry Point: 0x81800000
Hash algo: crc32
Hash value: f0d366b2
Hash algo: sha1
Hash value: afe5a545b572343213dcb229b9a0faf646bfc740
Image 3 (fdt@1)
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x80cfd824
Data Size: 33011 Bytes = 32.2 KiB
Architecture: ARM
Hash algo: crc32
Hash value: 891f89b2
Hash algo: sha1
Hash value: 1c99856e227f1333e8adcff4552b4ea85e74efab
Default Configuration: 'conf@1'
Configuration 0 (conf@1)
Description: Boot Linux kernel with FDT blob
Kernel: kernel@1
FDT: fdt@1
## Checking hash(es) for FIT Image at 80000000 ...
Hash(es) for Image 0 (script@1):
Hash(es) for Image 1 (kernel@1): crc32+ sha1+
Hash(es) for Image 2 (kernel@2): crc32+ sha1+
Hash(es) for Image 3 (fdt@1): crc32+ sha1+
通过以下过程,我能够正确运行内核,
我从 FIT 中提取片段并将它们加载到内存中
imxtract 0x80000000 kernel@2 0x81800000
imxtract 0x80000000 fdt@1 0x83000000
然后最后运行一些配置参数
bootm 81800000 - 83000000
这是完美的工作
现在我尝试的是不从FIT中提取内核映像。我只提取fdt
imxtract 0x80000000 fdt@1 0x83000000
运行之前的配置
并尝试执行
bootm 80000000:kernel@2 - 83000000
这是我得到的错误
=> bootm 80000000:kernel@2 - 83000000
## Loading kernel from FIT Image at 80000000 ...
Trying 'kernel@2' kernel subimage
Description: Linux uImage kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x8067f8fc
Data Size: 6807040 Bytes = 6.5 MiB
Architecture: ARM
OS: Linux
Load Address: 0x81800000
Entry Point: 0x81800000
Hash algo: crc32
Hash value: f0d366b2
Hash algo: sha1
Hash value: afe5a545b572343213dcb229b9a0faf646bfc740
Verifying Hash Integrity ... crc32+ sha1+ OK
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Loading Kernel Image ... OK
reserving fdt memory region: addr=83000000 size=9000
Using Device Tree in place at 83000000, end 8300bfff
Modify /soc/aips-bus@02000000/bee@02044000:status disabled
ft_system_setup for mx6
Starting kernel ...
prefetch abort
pc : [<7fa93454>] lr : [<81800008>]
reloc pc : [<6737e454>] lr : [<690eb008>]
sp : 9ef12c90 ip : 0000000c fp : 9ff18a2c
r10: 9ef3a3ec r9 : 9ef12eb8 r8 : 00000000
r7 : 00000000 r6 : 81800000 r5 : 9ff9ef98 r4 : 00000000
r3 : 00009000 r2 : 83000000 r1 : 00000000 r0 : 9ef12fb0
Flags: nZCv IRQs off FIQs off Mode SVC_32
Resetting CPU ...
resetting ...
有人可以帮助我了解为什么会出现此错误吗?谢谢