OK6410根文件系统制作

 

终于完成了文件系统的制作了,在这之前移植过u-boot,不成功,移植过内核,还是不成功,都没有信心调试下去了,而且网上有关OK6410的资料还挺少的,不像2440、2410移植手册满天飞,对于我这个菜鸟级别的人来说难度着实比较大啊。但这里有关文件系统制作还是比较类似的,在几经磨难之后终于还是成功挂载上文件系统了。庆祝一下!

以下是我的制作步骤,希望能给大家一点参考,有不对之处希望大虾指出来,谢谢!

 

开发平台:ubuntu  linux2.6.36.2(飞凌源码)   arm-linux-gcc-4.3.3busybox-1.7.0  OK6410

 

1.     建立根文件系统目录

# Mkdirrootfs_zfx

在该目录下建立以下目录

Cd rootfs_zfx

# Mkdir bin etcdev home lib mnt opt proc root sbin sys tmp usr var

2.     下载busybox

http://www.busybox.net/downloads/下载busybox-1.7.0.tar.bz2。

# tar jxvfbusybox-1.7.0.tar.bz2

3.     修改Makefile

ARCH ?= arm
CROSS_COMPILE ?= arm-linux-

4.     配置busybox

# Makemenuconfig

选择要配置的选项,这里选上

Busybox settings--->

   Busybox library tuning --->

     [*]tab completion //支持tab补齐功能

[*]vi-style line editing commands

[*]fancy shell prompts

 

Busybox Setting --->
Build Options --->
[*] Build Busybox as a static binary (no shared libs) //(1)

 

Installation Options --->
[*] Don’t use /usr //(2)

(./_install) Busybox installation prefix 进入这个选项,输入busybox的安装路径,这里是 ../rootfs_zfx

Shells--->   

Chooseyour default shell (msh) ---> //(3)

 

Ipsvd utilities---> //(4)

    [ ]tcpsvd

    [ ]udpsvd

Networking utilities--->

    [ ]iptunnel

(1)  这里采用静态编译,这样就可以不依赖编译器的库文件。如果不选上表示动态编译,在编译安装完成后还需要将库文件给拷贝到文件系统中,由于这样可能会多拷贝一些不需要的库导致文件系统变大,这里采用静态编译,不过一般会出现一些命令编译不过去的情况,这里将他们取消不编译。后面会提到。

(2)  这个选项也一定要选,否则make install后,busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.

(3)  由于ash功能不够强大,不能支持tab补齐,历史纪录等等的高级功能,所以使用busybox里面的msh代替ash.

(4)  取消这几项,不然编译不过,因为是静态编译的原因

5.     编译

因为busybox主要应用于对空间要求非常严格的嵌入式系统,所以它推荐使用uclibc而不鼓励使用glibc,如果你没有安装uclibc,而且在 build Options也选择了Build BusyBox as a staticbinary(no shared libs),那肯定无法编译通过的,当然如果你之前build Options选择的是动态编译的话就不会有这样的问题出现了。假设你是第一种情况,我们可以这样解决:把applets/applets.c开头的几行 warning注释掉。

 

# make
将会遇到下面问题:
applets/applets.c:20:2:error: #warning Static linking against glibc produces buggy executables
applets/applets.c:21:2: error: #warning (glibc does not cope well with ld--gc-sections).
applets/applets.c:22:2: error: #warning Seesources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:23:2: error: #warning Note that glibc is unsuitable forstatic linking anyway.
applets/applets.c:24:2: error: #warning If you still want to do it, remove-Wl,--gc-sections
applets/applets.c:25:2: error: #warning from top-level Makefile and remove thiswarning.
make[1]: *** [applets/applets.o] Error 1

这个警告的定义在applets/applets.c中。将这段警告注释掉就可以了。这段警告的意思是告诉你最好用uclibc编译,而不是用glibc因为glibc比较大,busybox在寸土寸金的嵌入式系统中运用比较多,所以会有这样的要求。

# vi /busybox-1.7.0/applets/applets.c
注释掉20 -- 28行内容即可

6.     安装

#make install  //安装到设置的默认路径

或者:

#makeCONFIG_PREFIX=../rootfs_zfx install  //安装到指定路径

7.     构建/etc目录

拷贝Busybox-1.7.0/examples/bootfloopy/etc/* 到rootfs_zfx/etc下

# cp -rf../../busybox-1.7.0/examples/bootfloopy/etc/* ./

包括文件:fstab  init.d  inittab profile

 

修改inittab文件如下:

#/etc/inittab

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount-a -r

 

修改init.d/rcS文件如下:(如果本文件是自己建立的,需要改变属性:chmod +x rcS)

如需开机启动什么,也可以在这个文件里面加

#! /bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

echo"hello,linux,zfx"

/bin/mount -a

echo "mountok"

 

修改fstab文件如下:

# device   mount-point  type     options  dump fsck   order

proc        /proc      proc       defaults    0     0

tmpfs           /tmp    tmpfs  defaults    0   0

 

8.     构建/dev目录

有两种方法,一:静态创建设备文件;二:使用mdev创建。这里我使用的是第一种方法,比较简单。

#cd /dev

#sudo mknodconsole c 5 1

#sudo mknod nullc 1 3

 

9.     制作文件系统映像文件

要实现不同类型的文件系统,如cramfs、yaffs2等,只是在这里有区别,只要使用不同的制作工具来制作就行。

我开始打算使用yaffs2来制作,做出来发现启动时停在:

Kernel panic -not syncing: No init found.  Try passinginit= option to kernel.

原因是:采用默认的mkyaffs2image来制作是不行的,必须修改mkyaffs2image.c才行。(据说linux3.0.1代码中已经有了修改好了的代码,有兴趣的朋友可以试试)这里飞凌想出了一个巧妙的方法,linux2.6.36手册中有说明,先用cramfs文件系统启动,然后用sd卡或u盘拷贝制作的文件系统文件夹,之后解压到/mnt/disk目录下,修改启动参数,就可以了。

实现方式我猜测是在启动时将/mnt/disk挂载到了mtd/mtdblock3中,然后我们将文件系统拷贝到这里,相当于以yaffs2形式写进了mtdblock3中,这样就实现了写入。

这里我就用cramfs来试验吧,这样会简单一点。

# ./mkcramfs rootfs_zfxrootfs_zfx.cramfs

然后下载到600000处,即可挂载,不过很奇怪的是用ls命令查看时,总是多出现一段乱七八糟的值。如下:

init started: BusyBox v1.7.0 (2011-11-3014:22:36 CST)

 

starting pid 47, tty '': '/etc/init.d/rcS'

hello,linux,zfx

mount ok

 

Please press Enter to activate thisconsole.

 

starting pid 51, tty '': '/bin/sh'

 

Processing /etc/profile... Done

 

:/> ls

[1;34mbin[0m      [1;34metc[0m      [1;34mlib[0m      [1;34mmnt[0m      [1;34mproc[0m     [1;34msbin[0m     [1;34mtmp[0m      [1;34mvar[0m

[1;34mdev[0m      [1;34mhome[0m     [1;36mlinuxrc[0m  [1;34mopt[0m      [1;34mroot[0m     [1;34msys[0m      [1;34musr[0m

 

 

 

参考文献:

http://hi.baidu.com/zengzhaonong/blog/item/b0895436d24c33dea2cc2b03.html

http://wj86843248.blog.163.com/blog/static/6864301220110454653111/

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值