答案1
我想你需要遵循U-boot的第三阶段。
第三阶段是Linux内核的加载。然而,在 Linux 内核控制之前,u-boot 会将包含基本参数的命令行传递给内核。操作系统启动后,可以通过在终端窗口中键入以下内容来查看这些参数:
$ cat /proc/cmdline
root=/dev/mmcblk0p2 rootwait rw console=ttyS0,115200n8 console=tty0 no_console_suspend vdaccfg=0xa000 logo=osd1,loaded,0x7900000,720p,full dmfc=3 cvbsmode=576cvbs hdmimode=1080p m_bpp=32 vout=hdmi disablehpd=true
内核初始化硬件,挂载根文件系统(根据root=...内核参数)并将控制流传递给/sbin/init。如果您需要有关 Uboot 的更多详细信息,请关注此关联
答案2
根据文件系统和介质,您也许能够直接在 u-boot shell 下以十六进制形式转储数据。如果您进行逆向工程,请观察help
输出以了解您已编译到 U-boot 中的媒体存储设备访问和操作命令的类型,并从那里继续。加载到内存后,或者有时甚至没有它,您可以使用“md”来转储它。在内存中的 u-boot 部分之后使用加载地址,否则它将重新启动。请记住,大多数时候文件系统都是压缩的并且无法永久修改(squashfs 很常见)。有时u-boot附带一个命令,可以加载和读取未压缩的数据。从内存转储中查看文件系统可能很乏味,因此通常最好在本地记录整个分区转储,将其转换为二进制文件并在本地处理。
init=
您可以通过修改内核参数以指向 shell 程序来成功加载 shell 。通常对于嵌入式设备来说,它是 busybox,所以应该是/bin/ash
.