2015-05-26 47 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基本上只是你的一個文件。 –