构建stm32f407-uClinux的initramfs根文件系统

       上文讲到内核运行到free init memory:8k这个地方就卡住,运行不下去了,在查阅了相关资料后,推测是缺少根文件系统所导致的,原来的内核源代码是搭配有根文件系统的bin文件,是romfs但没有源码,前面讲过我现在项目使用的是stm32f407,内部flash容量和外部SRAM都不足以拷入这个原配的romfs挂起为根文件系统来使用。

       接下来就是寻找一种经济适用的文件系统来作为内核的根文件系统,从网上查阅相关资料可以知道,YAFFS2支持的是nandflash,jffs支持nor flash,这些看来对于我手上的stm32f407来说是不适用的,于是我仔细研究了stm32f103的源代码,发现它是有两种启动的方式,一种采用的是用iniramfs作为根文件系统,xip启动,在stm32f103内部flash只有512k的情况居然跑起了Uclinux,另一种是jfss2挂在外部nor flash上,显然我这种情况目前只有参考第一种方式来,采用initramfs作为根文件系统。于是开始构建initramfs相关文件。 仔细研究stm32f103 XIP启动方式的内核配置make menuconfig中, CONFIG_INITRAMFS_SOURCE=”initramfs-filelist” 而initramfs-filelist位于Uclinux/linux-2.6.x下,打开一看是这样的:


这里写图片描述

       一开始我看不懂这里面的shell什么意思,好吧,不懂就继续找度娘,找到在一篇文章当中写得很清楚了,下面我把它copy过来,转载一下:


把initramfs编译到内核里面去

       使用initramfs最简单的方式,莫过于用已经做好的cpio.gz把kernel里面那个空的给换掉。这是2.6 kernel天生支持的,所以,你不用做什么特殊的设置。

       kernel的config option里面有一项CONFIG_INITRAMFS_SOURCE(I.E. General setup—>Initramfs source file(s) in menuconfig)。这个选项指向放着内核打包initramfs需要的所有文件。默认情况下,这个选项是留空的,所以内核编译出来之后initramfs也就是空的,也就是前面提到的rootfs什么都不做的情形。

C       ONFIG_INITRAMFS_SOURCE 可以是一个绝对路径,也可以是一个从kernel’s top build dir(你敲入build或者是make的地方)开始的相对路径。而指向的目标可以有以下三种:一个已经做好的cpio.gz,或者一个已经为制作cpio.gz准备好所有内容的文件夹,或者是一个text的配置文件。第三种方式是最灵活的,我们先依次来介绍这三种方法。

1)使用一个已经做好的cpio.gz档案

       If you already have your own initramfs_data.cpio.gz file (because you created it yourself, or sav

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值