使用initramfs
菜鸟心得,高手路过。。。。。
在方案公司开发环境一般极其复杂, 有一种情况如果在板子inand没有驱动起来的时候,没有分区,没有根文件系统。快被淘汰掉的nandflash板子上压根没焊,而且手机的板子中根本没有rj45接口,所以想要做nfs那是天方夜谈的事情。想要安安心心的进入shell界面谈何容易。除非有别的方法启动板子,但是会让本就复杂的情况变得更复杂。至于其他理由及需求我这里不在赘述。
因为当网络中这方面资料讲的虽然比较全面,而且提纲挈领,但是方法繁多,结构松散,不知从何入手。几经折腾后写下这篇心得,不管你多菜,跟随五个步骤一步一步做,问题应该能够得到解决。(initramfs.cpio我认为是很好的一种方法,使用简单,内核自带,不需要打任何补丁,在逻辑中内核跟文件系统看起来浑然一体,移植性更高,不需要各种复杂的uboot操作,使用这种方法足以对应各种发杂的开发环境)
注:我这里用到的环境是s3c6410 linux2.6.32.2
1)找个简单一下的跟文件系统,需要一个busybox用来做一些最简单的操作
注:这里我放在了内核根目录下面,在逻辑上来看内核跟文件系统形成了一部分东西
2)make menuconfig中勾选
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
然后这里填入具体根目录的路径(内核目录下的minirootfs)
3)make重新编译内核,一般情况不需要clean
编译过程中会发现usr/initramfs_data.cpio被更新了
来到usr目下发现确实是有这么一个7.8M的东东,不管,继续去arch/arm/boot/下查看
发现zImage变成了7M的大家伙,做到这步,说明你已经成功一半了
5)OK让我们放到板子上跑一下
想办法把把zImage拷贝到内寸中,不管用什么办法,拷贝到启动地址即可,我这里使用的是TFTP(s3c6410的启动地址是0x50008000这里就不在赘述了)
设置bootargs为"console=ttySAC0,115200 init=/linuxrc ==>ttySAC0"即不指定根"root=xxx"
bootm启动
如果你进shell了,说明你已经成功了,在我博客blog.csdn.net/dragon101788上顶一下帖子说明对你有所帮助。如果没有成功,那么加我QQ:45797408,一起讨论
如果你想更深入的了解请点击精通initramfs构建step by step
可能会出现问题:
找不到控制台,串口连不上
解决方案:来到initramfs根目录中的dev下创建console与null
重新make以下步骤,问题得以解决