文件系统移植

 

【实验目的】

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

【实验环境】

1、  Ubuntu 10.10发行版

2、  u-boot-2010.03

3、  FS2410平台

4、  交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2

【实验步骤】

       一、根文件系统制作

1、  源码下载

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

http://busybox.net/downloads/

2、  解压源码

$ tar xvf  busybox-1.17.3.tar.bz2

3、  进入源码目录

$ cd busybox-1.17.3

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)

              (arm-none-linux-gnueabi-) Cross Compiler prefix

              () Additional CFLAGS

5、  编译

$ make

6、  安装

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

$ make install   (生成_install 目录)

7、  进入安装目录下

$ cd _install

$ ls

bin  linuxrc  sbin  usr

8、  添加其他需要目录

$ mkdir  dev etc  mnt proc var tmp sys root

9、  添加库(编译工具下的共享库)

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

$ cp /home/linux/toolchain/arm-none-linux-gnueabi/lib/   ./  -a

删除lib下的所有目录、.o文件和.a文件,目的是:对库进行瘦身以减小文件系统的大小

$ cd lib

$ rm *.o  *.a  -rf

$ rm -rf 所有目录

$ arm-none-linux-gnueabi-strip   *

 

10、 添加系统启动文件

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

#this is run first except when booting in single-user mode.

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

# /bin/sh invocations on selected ttys

# Start an "askfirst" shell on the console (whatever that may be)

::askfirst:-/bin/sh

# Stuff to do when restarting the init process

::restart:/sbin/init

# Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

 

在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 --->

              [*] Virtual memory file system support (former shm fs)

              [*] Tmpfs POSIX Access Control Lists

重新编译内核

      

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

#!/bin/sh

# This is the first script called by init process

/bin/mount -a

       为rcS添加可执行权限:

       chmod  +x init.d/rcS

 

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

#!/bin/sh

export HOSTNAME=farsight

export USER=root

export HOME=root

#export PS1="\[\u@\h \W\]\$ "

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

11、 设备文件创建

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

$ mknod   dev/console  c 5 1

       二、NFS测试(仅仅是在线测试一下,还没有制作成真正的根文件系统)

    1、备份/source/rootfs

    $ cp  /source/rootfs  /source/rootfs_bak -a

    2、将我们的文件系统拷贝到/source目录下

    $ cp  _install /source/rootfs –a

    3、设置uboot环境变量

# setenv bootcmd tftp 33000000 zImage\; go 33000000

# setenv  bootargs  root=nfs  nfsroot=192.168.1.111:/source/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.1.112

# savenv

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

三、制作ramdisk文件系统(自己找一个合适的目录 存放initrd.img)

通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:

       1、制作一个大小为8M的虚拟磁盘

       $ dd if=/dev/zero of=initrd.img bs=1k count=8192 (initrd.img为8M)

       2、格式化这个虚拟磁盘为ext2

       $ mkfs.ext2 -F initrd.img

       3、在mount下面创建initrd目录作为挂载点

       $ mkdir /mnt/initrd

       4、将这个虚拟磁盘挂载到/mnt/initrd下

       注意这里的initrd.img不要和Ubuntu根目录下的initrd.img弄混了,同时initrd.img不能存放在rootfs目录中

       $ mount -t ext2 -o loop initrd.img /mnt/initrd

       5、将我们的文件系统写入initrd.img中

将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面

       $ cp /source/rootfs/*  /mnt/initrd –a

       6、卸载initrd

       $ umount /mnt/initrd

       7、压缩initrd.img为initrd.img.gz

       $ gzip --best -c initrd.img > initrd.img.gz

       8、配置内核支持RAMDISK

制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统

      Device Drivers

            SCSI device support  --->

                  <*> SCSI disk support

          Block devices  --->

                 <*>RAM disk support  

      (1)Default number of RAM disks 

     (8192) Default RAM disk size (kbytes)   (修改为8M)

                  General setup  --->

            [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

重新编译内核

       9、在U-BOOT命令行重新设置启动参数:

# setenv bootcmd tftp 33000000 zImage \; tftp 30800000 initrd.img.gz \; go 33000000

# setenv bootargs root=/dev/ram rw init=/linuxrc initrd=0x30800000,8M console=ttySAC0,115200

# savenv

重新启动开发板查看能否正常启动

       四、制作cramfs根文件系统

1、cramfs文件系统镜像制作

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

$ mkfs.cramfs rootfs rootfs.cramfs

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

$ cp  rootfs.cramfs  /tftpboot

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

u-boot下执行如下命令

# tftp 30008000 rootfs.cramfs

# nand erase 500000 800000

# nand write 30008000 500000 800000

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

# setenv bootcmd tftp  33000000 zImage\; go 33000000

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

# savenv

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

[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文件系统决定的,cramfs格式的文件系统是只读文件系统

       五、制作jffs2文件系统(先制作工具)

       1、zlib的编译      

      解压zlib-1.2.3.tar.bz2并进入zlib-1.2.3配置编译安装

       $ tar xvf zlib-1.2.3.tar.bz2

       $ cd zlib-1.2.3

       $ ./configure

       $ make

       $ make install

       2、mtd工具编译

       解压mtd-snapshot-20050519.tar.bz2 并进入mtd/util编译安装

       $ tar xvf  mtd-snapshot-20050519.tar.bz2

       $ cd mtd/util

       $ make

       $ make install

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

       3、jffs2文件系统镜像制作

       $ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x4000 --pad=0x800000  -n

       $ cp rootfs.jffs2 /tftpboot

       4、jffs2文件系统烧写到 nand flash中

# tftp 30008000 rootfs.jffs2

# nand erase 500000 800000

# nand write 30008000 500000 800000

       5、设置u-boot启动参数

# setenv bootcmd  tftp  33000000 zImage\; go 33000000

# setenv bootargs root=/dev/mtdblock2       init=/linuxrc rootfstype=jffs2 rw

 console=ttySAC0,115200 

# savenv

       重新启动开发板,查看是否成功

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值