在移植嵌入式linux时,串口打印出错误信息“Kernel panic - not syncing: No init found. Try passing init= option to kernel. See Linux Documentation/init.txt for guidance.......”
产生错误的原因是文件系统内的init程序不能被执行。
有一个很有意思的现象是,我们在做第一次移植时不会产生这种错误,而在第二次第三次.....移植则可能出现这种错误。
其实问题的根源在我们复制文件出了问题。制作文件系统除了使用busybox生成必要的文件,还要复制交叉编译器的库文件以及自定义启动文件。将这么多的文件整理完然后打包,形成我们的文件系统镜像。在第一次移植时,我们会按步骤逐个文件的复制或创建,这个过程没有问题;而在后续的移植过程中,我们很可能为图方便,将第一次制作的且这次不需要修改的文件复制过来使用。在复制过程中,如果我们使用cp命令,则文件的软链接及权限都会发生变化,这将导致烧录到开发板后文件系统内的程序不能执行。正确的做法是,在复制时使用cp -a,这能保留文件的软链接及权限。在整理完全部文件后,可进入制作的文件系统内,使用ll命令检查文件的软链接和权限是否完好。