busybox文件系统制作

【实验目的】

       熟悉Linux文件系统目录结构,创建自己的文件系统,通过NFS方式测试;用文件系统工具生成ramdisk文件系统映象文件。

【实验环境】
主机:ubuntu 12.04发行版
目标机:FS210平台
交叉编译工具:arm-none-linux-gnueabi-gcc

【实验步骤】

       一、根文件系统制作

1、  源码下载

我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:

http://busybox.net/downloads/

2、  解压源码

$ tar  xvf  busybox-1.17.3.tar.bz2

3、  进入源码目录,修改Makefile

$ cd  busybox-1.17.3

vim Makefile

ARCH = arm

CROSS_COMPILE = arm-none-linux-gnueabi-

4、  配置源码

$ make menuconfig

Busybox Settings --->

       Build Options --->

              [*] Build BusyBox as a static binary (no shared libs)

              [ ] Force NOMMU build

              [ ] Build with Large File Support (for accessing files > 2 GB)

              ()Cross Compiler prefix

              () Additional CFLAGS

            Installation Options  --->

                        [*] Don't use /usr

                                    Applets links (as soft-links)  --->

                        (./_install) BusyBox installation prefix (NEW)

5、  编译

$ make

6、  安装

$ make  install

    busybox默认安装路径为源码目录下的_install

7、  进入安装目录下

$ cd  _install

$ ls

bin  linuxrc  sbin 

8、  创建其他需要的目录

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

9、  添加动态库

?  将工具链中的库拷贝到_install目录下的lib目录

$cp -raf /usr/local/toolchain-4.5.1-farsight/arm-none-linux-gnueabi/lib/*  lib/

?  删除库文件中的符号表,也叫瘦身

$ rm -rf lib/*.a

$ arm-none-linux-gnueabi-strip  lib/*

10、 添加系统启动文件

_install/etc下添加文件inittab,文件内容如下:

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/ash
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init

格式说明:
<id>:<runlevels>:<action>:<process> : 在什么时间启动什么进程
id: 进程所使用的终端名
runlevels:不用填写
<action>: Valid actions include: sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, and shutdown.\
 sysinit: 系统初始化的时候,放在最前面
 respawn,askfirst是一样的,如果process意外终止啦,系统会讲其重启
  askfirst 会有提示Please press Enter to activate this console
 wait: 该进程一定要执行完,才能执行下一个
 once, 进程如果意外终止,那么不会重启 

11,在_install/etc下添加文件fstab,文件内容如下:

#device     mount-point     type        options         dump     fsck order

proc          /proc             proc           defaults     0                0

tmpfs         /tmp              tmpfs         defaults         0                 0

sysfs         /sys              sysfs           defaults           0                 0

tmpfs         /dev              tmpfs         defaults         0                 0

       这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持

修改内核配置:

File systems --->

       Pseudo filesystems --->

             [*] /proc file system support (NEW) 
              [*] sysfs file system support (NEW) 
              [*] Virtual memory file system support (former shm fs) 
              [*]   Tmpfs POSIX Access Control Lists

重新编译内核

      

      12, 在_install/etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:

    cd _install/etc    

    mkdir init.d

    vim init.d/rcS            

#!/bin/sh
echo ">>>>>>>> in /etc/init.d/rcS<<<<<<<<<<<<<<<<<"
/bin/mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
===============================================

mdev是用于自动创建设备节点   

    为rcS添加可执行权限:

       $ chmod   +x  init.d/rcS

       13,在_install/etc下添加profile文件,文件内容为:

#!/bin/sh

export HOSTNAME=farsight

export USER=root

export HOME=root

export PS1="[$USER@$HOSTNAME \W]\# "

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

LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

export PATH  LD_LIBRARY_PATH

14、 设备文件创建

根文件系统中有一个设备节点是必须的,在dev下创建console节点

$ mknod   dev/console  c  5  1

以上的步骤就完成了linux根目录所需要的所有文件,可以直接使用

 NFS测试

    1、将做好的根目录复制成/opt/rootfs(如果你已经有这个目录,就要注意啦)

    $ sudo  cp   -raf  _install  /opt/rootfs

    2, 在ubuntu中将/opt/rootfs设置成nfs文件系统

        修改ubuntu的/etc/exports: 将/opt/rootfs设置成nfs文件系统格式
            /opt/rootfs            *(subtree_check,rw,no_root_squash,async)
        sudo service nfs-kernel-server restart
        测试:

        sudo mount -t nfs 192.168.7.22:/opt/filesystem/ /mnt/nfs/

     2、设置uboot环境变量

# setenv  bootcmd  tftp  20800000  zImage \;  go  20800000

# setenv  bootargs  root=nfs  nfsroot=192.168.7.100:/opt/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.7.200

# saveenv

=======================================================================================

如果开机就运行一个自己可执行程序,可以做如下处理
12, 编译出一个可执行程序: /bin/hello_arm
13, /etc/init.d/rcS中启动可执行程序

方法一: 直接在/etc/init.d/rcS添加一条:

           /bin/hello_arm

方法二:另外再写一个脚本,然后在/etc/init.d/rcS中启动这个脚本

    写一个脚本: /etc/local/mysrv.sh
      #!/bin/ash
       echo "my first app"
       /bin/hello_arm 

然后在/etc/init.d/rcS添加一条

        /etc/local/mysrv.sh

      重新启动开发板,查看是否能够正常挂载,功能是否正常

 

三、 制作cramfs文件系统,首先必须先了解nand中的分区表:

Creating 5 MTD partitions on "s5pv210-nand":
    0x000000000000-0x000000100000 : "myuboot"
    0x000000100000-0x000000500000 : "kernel"
    0x000000500000-0x000001500000 : "rootfs"
    0x000001500000-0x000002500000 : "userdata"
    0x000002500000-0x000040000000 : "usr spec"

1、cramfs文件系统镜像制作

由于系统提供制作cramfs文件系统的工具,可以直接使用。具体操作如下;

$ cd /opt

$ mkfs.cramfs  rootfs  rootfs.cramfs

2、将rootfs.cramfs拷贝到/tftpboot目录下

$ sudo  cp  rootfs.cramfs  /tftpboot

3、将rootfs.cramfs烧写到nand flash的第三个分区上

u-boot下执行如下命令

#tftp  20008000   myrootfs.cramfs
#nand   erase   0x500000   0x1000000
#nand  write   0x20008000   0x500000   0x1000000

4、重新设置u-boot启动参数

# setenv  bootcmd  tftp  20800000  zImage  \;   go  20800000

# setenv  bootargs  root=/dev/mtdblock2  rootfstype=cramfs  init=/linuxrc  console=ttySAC0,115200

# saveenv

启动开发板,测试是否成功。

[root@farsight /root] # ls /

bin       etc      linuxrc     sbin     tmp      var

dev      lib      mnt      proc     test     usr

[root@farsight /root] # mkdir test

mkdir: Cannot create directory `test': Read-only file system

注意:cramfs格式的文件系统是只读的。

 

       四、制作jffs2文件系统

       1、配置内核支持jffs2文件系统

File systems  --->

           [*] Miscellaneous filesystems  --->

                                            <*>   Journalling  Flash  File  System  v2  (JFFS2)  support

重新编译内核并拷贝到/tftpboot下

2、mtd工具安装

$ sudo apt-get install mtd-utils
        或将liblzo2-2_2.06-1_i386.deb和mtd-utils_1%3a1.4.4-1_i386.deb拷贝到Linux下执行如下命令
           $ sudo dpkg -i *.deb

       这样我们的系统里就有了mkfs.jffs2这个工具了

       4、jffs2文件系统镜像制作

    $ cd /opt

       $ mkfs.jffs2   -r  rootfs  -o  rootfs.jffs2  -e  0x20000  --pad=0x400000  -n

解释:

-e: nand的块大小: 128K
--pad= : myrootfs.jffs2指定为多大: 和分区大小一致    (该选项不是一定要的)
-n : 不要打印不必要的调试信息

       $ sudo  cp  rootfs.jffs2  /tftpboot

       5、jffs2文件系统烧写

# tftp  20008000  rootfs.jffs2

# nand  erase  0x500000 0x1000000

# nand write.jffs2 0x20008000 0x500000 0x1000000

       6、设置u-boot启动参数

# setenv  bootcmd  tftp  20008000  zImage\; go  20008000

# set bootargs console=ttySAC0,115200 init=/linuxrc root=1f02  rootfstype=jffs2

 # saveenv

       重新启动开发板,查看是否能够创建或者是删除文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值