移植yaffs2文件系统到mini2440


哥终于有点时间和心情写blog了!

突然发现想学的东西太多~~真恨不得一天能有个48小时…………^_^!记得上高一时当时的语文老师告诉过我们:如果每个人都把高一当高三读,绝对没有读不好的可能.
时至今日,我几乎对高一的生活没有多少印象了……但对这句话却一直印象深刻。

只要一个人真的想做一件事情,那他就能做到这件事情。


好吧,开始我们的文件系统移植……

目标平台跟我上一篇blog的一样,就不多说了。

第一步,首先咱来准备一下yaffs2的源码

上次说了被友善忽悠了,光盘里压根没有yaffs2的源码,于是只能到yaffs2的官网去找。大概是这个网址http://www.aleph1.co.uk/gitweb?p=yaffs2.git;a=summary,然后点一下shotlog标题,会出现一长串的列表,然后为了与友善的版本尽量保持一致(手册里面的貌似是2010.3月的版本),于是就下了20100330这个版本回来,就是点一下2010.03.30这个日期右边的snapshot就行了,然后就会自动下载。最新版本的yaffs2我没有试过,不知道会不会出问题,迟点再试。


第二步,解压源码,为内核打上支持yaffs2的补丁

假设解压在/opt/myYaffs,然后进入myYaffs2,执行命令脚本./patch.ker-sh c  /your linux kernel path ,填上内核源码路径按确定。如果出现一些提示,那就填./patch.ker-sh c  m /your linux kernel path 新版本的yaffs2会这样。这样就打好补丁了。事实上这个脚本完成了3项功能:

(1) 修改内核fs/Kconfig
    增加一行:source "fs/yaffs2/Kconfig"
(2) 修改内核fs/Kconfig
    增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/
(3) 在内核fs/目录下创建yaffs2目录
    将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;
   将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下;
    将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.


第三步,验证yaffs2是否移植成功


进入内核目录make menuconfig,知道yaffs2的配置项,选中,保存退出,然后make zImage。把img下载到板子上,如果能启动友善的文件系统,出现

please press enter to activate this console.

就算成功了。


第四步,制作基本的文件系统

这步是最关键的,事实上前面那些都是很简单的,按照手册来就行(事实上这步基本也是按照手册……- -!)。

这里也说一下帮助文档的重要性。事实上busybox自带的一些文档是很好的资料,虽然是全英文,但是不要怕,都是很简单的。比如说/ect/rc.d/rcS,fstab等文件,都能在其文档里找到模板,另外还有其他的一些比如介绍mdev的文档,结合这些文档,对那些配置文件里面的内容就很好理解了。当然,我们可以上网查这些,但是万一网上没呢,还不是得靠自己。

linux对根文件系统的某些部分是有规定的,比如顶层必须有哪些文件夹,必须有哪些配置文件等,具体如何可以查看友善的文档。

我们创建一个新的脚本文件(也可以一条命令一条命令的输入),就叫create_rootfs吧,填入友善提供给我们的代码:

#!/bin/sh

echo "------Create rootfs directons start...--------"

mkdir rootfs

cd rootfs

echo "--------Create root,dev....----------"

mkdir root dev etc boot tmp var sys proc lib mnt home usr

mkdir etc/init.d etc/rc.d etc/sysconfig

mkdir usr/sbin usr/bin usr/lib usr/modules

echo "make node in dev/console dev/null"

mknod -m 600 dev/console c 5 1

mknod -m 600 dev/null c 1 3

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp

chmod 1777 var/tmp

echo "-------make direction done---------"
对命令内容不理解的请复习Linux Shell编程,可以上网查。

然后建立/etc目录下的文件。这些都是配置文件,是使用busybox所必须的。有人问为啥要在这里写配置文件,为什么不在别处写,为什么不写别的文件就写这些文件…………这是由于busybox的初始化而决定的。

内核在初始化的最后阶段会调用设置好的init参数所指向的程序,我们可以在启动的时候看到这行信息:

Kernel command line: noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0

如果我们使用busybox来构建我们的文件系统,那/linuxrc实际是一个指向busybox的链接,所以内核初始化完成后启动的第一个程序就是busybox。

内核相关代码如下:

if (execute_command) {

              run_init_process(execute_command);

              printk(KERN_WARNING"Failed to execute %s.  Attempting"

                                   "defaults.../n",execute_command);

       }

       run_init_process("/sbin/init");

       run_init_process("/etc/init");

       run_init_process("/bin/init");

       run_init_process("/bin/sh");

在启动参数中设定了init=linuxrc,所以一般只执行run_init_process(execute_command);,后面的就没有机会执行了(run_init_process永不返回),如果没有指定execute_command,那么才依次执行后面的run_init_process,如果全部没有找到,内核就死机。Panic!


在busybox的初始化代码init/init.c中,busybox会首先初始化控制台,所以/dev/console是必须的。然后其会分析/etc/inittab文件,然后执行配置文件INIT_SCRIPT,INIT_SCRIPT是一个宏,他被定义为:

#define INIT_SCRIPT  "/etc/init.d/rcS"/* Default sysinit script. */

所以busybox会去执行/etc/init.d/rcS这个配置文件.

rcS这个配置文件可以做你想做的一切事情。比如挂载文件系统,启动一些系统服务,等等。

我们可以看到下面这行:

mount -a

这行命令的意思是挂载/etc/fstab文件里面的所有文件系统。当然我们也可以一个一个的来挂载。还有人说,那我不懂这文件的格式啊~~

嗯,貌似这个世界上有一个叫google的公司,他提供了一种服务,叫“搜索服务”…………

现在明白为什么需要那么些文件了吧?

顺便说一下,busybox的文档里面有某些配置文件的示例代码,放在busybox源码的example文件夹里。

由于整个过程实在是烦得很~~~我给个链接吧~都一样的~~

点这里看详细过程

好吧,终于建好这些文件了…………


第五步,编译busybox

这就比较简单了,进入busybox-1.13.3的目录,修改顶层makefile

CROSS_COMPILE ?=arm-linux-   //大约在164行

ARCH ?=arm               //大约在189行

为免出现问题,把友善busybox的配置文件COPY过来~~~

cp fa.config .config

直接 make CONFIG_PREFIX=/your_rootfs_dir install

等待编译完成。


第六步,打包文件系统


解压友善提供的打包文件系统的工具mkyaffs2img-128M(我的是256M的Flash,我用的就是这个,如果这个不行,换另外一个),然后输入:

mkyaffs2img-128M rootfs rootfs.img

完成,下载到开发板测试。

如果看到:Please press Enter to activate this console.

那恭喜你,你成功了!Well Done!

好了,先写到这里,然后打算再写一遍“打造自己的文件系统”,有图形系统的喔


~~~O(∩_∩)O~




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值