gpt4 book ai didi

linux-kernel - Linux : boot arguments with U-Boot and Flat Image Tree (FIT)

转载 作者:行者123 更新时间:2023-12-01 19:05:59 28 4
gpt4 key购买 nike

我正在尝试构建自己的 U-Boot 来在 Jetson TK1 板上启动 Linux。当我们插入验证启动时,我使用平面镜像树(统一内核镜像、设备树 blob 等)来描述我的系统。 U-Boot 可以加载 ITB 文件并尝试启动内核,但系统在出现此消息后挂起。

我认为这是因为没有启动参数传递给内核(原始启动添加了参数负载),但我对如何将参数传递给内核有点困惑。我尝试设置 bootargs 环境变量,但这并没有改变情况。

使用 ITB 文件时如何将内核参数传递给内核?

命令行参数(取自示例 extlinux.conf 的 APPEND 命令):

console=ttyS0,115200n8 console=tty1 no_console_suspend=1 
lp0_vec=2064@0xf46ff000 video=tegrafb mem=1862M@2048M memtype=255 ddr_die=2048M@2048M
section=256M pmuboard=0x0177:0x0000:0x02:0x43:0x00 vpr=151M@3945M tsec=32M@3913M
otf_key=c75e5bb91eb3bd947560357b64422f85 usbcore.old_scheme_first=1 core_edp_mv=1150
core_edp_ma=4000 tegraid=40.1.1.0.0 debug_uartport=lsport,3 power_supply=Adapter
audio_codec=rt5640 modem_id=0 android.kerneltype=normal usb_port_owner_info=0
fbcon=map:1 commchip_id=0 usb_port_owner_info=0 lane_owner_info=6 emc_max_dvfs=0
touch_id=0@0 tegra_fbmem=32899072@0xad012000 board_info=0x0177:0x0000:0x02:0x43:0x00
root=/dev/mmcblk0p1 rw rootwait tegraboot=sdmmc gpt

ITS 文件内容:

/dts-v1/;

/ {
description = "Simple image with single Linux kernel and FDT blob";
#address-cells = <1>;

images {
kernel@1 {
description = "Vanilla Linux kernel";
data = /incbin/("./zImage");
type = "kernel";
arch = "arm";
os = "linux";
compression = "none";
load = <0x81008000>;
entry = <0x81008000>;
hash@1 {
algo = "crc32";
};
hash@2 {
algo = "sha1";
};
};
fdt@1 {
description = "Flattened Device Tree blob";
data = /incbin/("./tegra124-pm375.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";
};
};
};

U-Boot 输出:

Tegra124 (Jetson TK1) # fatload mmc 1 0x90000000 /kernel_fdt.itb
reading /kernel_fdt.itb
5946200 bytes read in 497 ms (11.4 MiB/s)
Tegra124 (Jetson TK1) # bootm 0x90000000
## Loading kernel from FIT Image at 90000000 ...
Using 'conf@1' configuration
Verifying Hash Integrity ... OK
Trying 'kernel@1' kernel subimage
Description: Vanilla Linux kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x900000ec
Data Size: 5910168 Bytes = 5.6 MiB
Architecture: ARM
OS: Linux
Load Address: 0x00000000
Entry Point: 0x00000000
Hash algo: crc32
Hash value: c5b4b377
Hash algo: sha1
Hash value: f001007efe83f563425bfe0659186a32395c946c
Verifying Hash Integrity ... crc32+ sha1+ OK
## Loading fdt from FIT Image at 90000000 ...
Using 'conf@1' configuration
Trying 'fdt@1' fdt subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x905a30ac
Data Size: 34678 Bytes = 33.9 KiB
Architecture: ARM
Hash algo: crc32
Hash value: e466b23e
Hash algo: sha1
Hash value: ec909ae16e62233d0ed1e1f4c909085abc9b5879
Verifying Hash Integrity ... crc32+ sha1+ OK
Booting using the fdt blob at 0x905a30ac
Loading Kernel Image ... OK
Using Device Tree in place at 905a30ac, end 905ae821

Starting kernel ...

最佳答案

最突出的问题是,U-Boot 输出文本后系统似乎挂起

Starting kernel ...

如果加载了未压缩的内核Image文件,那么接下来将执行实际的内核启动代码。
但是,如果已加载 uImagezImage 文件(由于它们是自解压,因此也报告为“未压缩”),则执行的下一个代码将是解压缩附加到 zImage 文件的例程。通常这个解压例程会输出诸如

之类的文本
Uncompressing Linux............ done, booting the kernel.

在执行实际的内核启动代码之前、在处理内核命令行之前、在处理设备树 blob 之前以及在从内核输出任何控制台之前(包括 earlyprintk )。

<小时/>

镜像头中指定的内核加载和起始地址之间存在差异

 Load Address: 0x00000000
Entry Point: 0x00000000

与 DT 中指定的内容相比:

        load = <0x81008000>;
entry = <0x81008000>;

由于内核镜像临时加载于

## Loading kernel from FIT Image at 90000000 ...

DT 中的地址似乎是正确的,而图像 header 中的地址是假的。

假设0x00000000处没有物理RAM,结果将是内核镜像被复制(或解压缩)到伪造的加载地址0,然后内核镜像将通过分支到伪造的入口点来执行为 0。CPU 可能会在尝试从不存在的内存中执行垃圾时挂起,这与您报告的内容完全相关。

解决方案是 (1) 确认内核已链接到正确的地址,以及 (2) 使用 -amkimage 命令中指定正确的地址-e 命令选项。
这一修正至少应该让你超越这一点。

关于linux-kernel - Linux : boot arguments with U-Boot and Flat Image Tree (FIT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626471/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com