2015-05-26 48 views
1

我想用不正常的根文件系统来引导我imx53-QSB板但静态编译hello_world.c文件换句话说hello_world_static.out。 为了实现这一点,我写了一个hello_world.c文件交叉编译静态,我把它放在我的SD卡的分区mmcblk0p1 ext4分区。我把我的uImage和我的u-boot.imx放在mmcblk0中。启动我的系统后,我得到了一个内核恐慌使用静态编译的C文件的根文件系统

内核恐慌 - 不同步:没有找到的init。尝试将init =选项传递给内核。有关指导,请参阅Linux Documentation/init.txt。

任何解决方案?谢谢

+0

请提供你的'hello_world.c'文件的代码。同时告诉我们您正在使用哪个工具链来构建它。 –

+0

@SamProtsenko这里是我的hello_world.c代码'#include int main(void) { printf(“hello,world \ n”); return 0; }'我用_gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux_ – EngineerN

回答

1

你应该提供init=参数给内核cmdline(来自u-boot)。例如,如果您的二进制文件名是init,并且您已将它放到/sbin目录(位于rootfs分区上),则应该在u-boot中(在bootargs变量中)将init=/sbin/init添加到您的内核cmdline中。

例如,你可以做下一个(在u-boot的外壳,运行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= PARAM)

[2] u-boot README file(寻找Boot Linux:线)

[3] Documentation/init.txt

+0

@samprotsenkok编译它感谢那些链接!但我想要的是没有在我的分区rootfs,只有一个静态编译hello_world文件。我尝试修改u-boot bootargs,如下所示:_optargs = quiet init =/hello_world_static.out_和_mmcargs = setenv bootargs console = $ {console} root = $ {mmcroot} rootfstype = $ {mmcrootfstype} $ {optargs} _但仍然不行。 – EngineerN

+0

@samprotsenkok这里是我的u-boot环境变量:_bootargs_base = setenv bootargs console = ttymxc0,115200_ ** AND ** _bootargs_mmc = root =/dev/mmcblk0p1 rw rootfstype = ext4 init =/hello_s。out_ **和** _bootcmd_mmc =运行bootargs_base bootargs_mmc; mmc dev 0; mmc读取$ {loadaddr} 0x800 0x4000; bootm_ ** AND ** _bootcmd =运行bootcmd_mmc_当我使用这些参数启动时,出现了另一个错误:_Please append一个正确的“root =”引导选项;这里是可用的分区:_ – EngineerN

+0

@EngineerN是的,我实际上并没有提到有关实际rootfs的任何信息,但是您仍然需要一些名为'rootfs'的分区,格式为'ext4'。任何你的rootfs基本上只是你的一个文件。 –