【问题标题】:Using a statically compiled C file as rootfs使用静态编译的 C 文件作为 rootfs
【发布时间】:2015-08-08 02:00:13
【问题描述】:

我想启动我的 imx53-qsb 板,而不是使用普通的 rootfs,而是使用 静态 编译的 hello_world.c 文件,即 hello_world_static.out。 为此,我编写了一个 hello_world.c 文件,对其进行了静态交叉编译,并将其放入我的 sd 卡的 mmcblk0p1 ext4 分区中。我把我的 uImage 和我的 u-boot.imx 放在 mmcblk0 中。启动我的系统后,我遇到了 kernel panic

内核恐慌 - 未同步:未找到初始化。尝试将 init= 选项传递给内核。请参阅 Linux 文档/init.txt 以获得指导。

有什么解决办法吗?谢谢

【问题讨论】:

  • 请提供您的hello_world.c 文件的代码。还请告诉我们您正在使用哪个工具链来构建它。
  • @SamProtsenko 这是我的 hello_world.c 代码`#include int main(void) { printf("hello, world\n");返回0; } ` 我用 gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux 编译它

标签: linux-kernel cross-compiling u-boot rootfs


【解决方案1】:

您应该将init= 参数提供给内核命令行(来自u-boot)。例如,如果您的二进制文件名为init,并且您已将其放入/sbin 目录(在您的rootfs 分区上),您应该将init=/sbin/init 添加到u-boot 中的内核命令行(在bootargs 变量中) .

例如,您可以执行下一步(在 u-boot shell 中,在运行 bootmbooti 命令之前):

setenv bootargs root=/dev/mmcblk0p1 rw rootfstype=ext4 init=/sbin/init

另外,检查您是否真的在mmcblk0p1 上拥有您的rootfs。通常mmcblk0p1 是 FAT32 分区,其中包含要复制到 RAM 的引导加载程序文件和图像。 Rootfs 通常位于mmcblk0p2(并格式化为 ext4)。

详情见:

[1] Documentation/kernel-parameters.txt(寻找init=参数)

[2]u-boot README file(查找Boot Linux: 行)

[3]Documentation/init.txt

【讨论】:

  • @samprotsenkok 感谢这些链接!但我想要的不是在我的分区中有 rootfs,只有一个静态编译的 hello_world 文件。我尝试像这样修改 u-boot bootargs: optargs=quiet init=/hello_world_static.outmmcargs=setenv bootargs console=${console} root=${mmcroot} rootfstype=$ {mmcrootfstype} ${optargs} 但还是不行。
  • @samprotsenkok 这是我的 u-boot 环境变量:bootargs_base=setenv bootargs console=ttymxc0,115200 AND bootargs_mmc=root= /dev/mmcblk0p1 rw rootfstype=ext4 init=/hello_s.out AND bootcmd_mmc=run bootargs_base bootargs_mmc;mmc dev 0;mmc read ${loadaddr} 0x800 0x4000;bootm AND bootcmd=run bootcmd_mmc 当我使用这些参数启动时,我得到一个不同的错误:请附加正确的“root=”启动选项;以下是可用的分区:
  • @EngineerN 是的,我实际上并没有说任何有关实际 rootfs 的内容,但您仍然需要一些名为 rootfs 的分区,格式为 ext4。您的任何 rootfs 基本上都只是您的一个文件。
  • @EngineerN 试试这个:setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4 init=/hello_s.out,然后运行你的引导命令。另外,您确定您的第一个分区是您的二进制文件所在的位置吗?
  • 嗯,好的。我刚刚尝试了你所说的,但我仍然遇到同样的错误。是的,我确定,我将分区格式化为 ext4。当我放置一个“正常”的 rootfs 时,它运行良好。谢谢你的帮助;)
猜你喜欢
  • 2012-03-21
  • 1970-01-01
  • 2021-06-08
  • 2011-01-08
  • 2018-11-08
  • 2012-02-14
  • 2014-08-30
  • 2017-03-29
  • 1970-01-01
相关资源
最近更新 更多