【实验十三】文件系统的移植

实验十三 文件系统的移植

【实验目的】

       熟悉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、  进入源码目录

$ tar xvf busybox-1.17.3.tar.bz2

4、  配置源码

$ make menuconfig

Busybox Settings --->

       BuildOptions --->

              [*]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

7、  进入安装目录下

$ cd _install
$ ls

显示:bin  linuxrc  sbin usr

8、  添加其他需要目录

$ mkdir  devetc  mnt proc var tmp sys root

9、  添加库

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

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

删除lib下的所有目录、.o文件和.a文件

对库进行瘦身以减小文件系统的大小

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

10、 添加系统启动文件

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

#this is run first except when booting insingle-user mode.
:: sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# Start an "askfirst" shell on theconsole (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 --->

       Pseudofilesystems --->

              [*]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环境变量(在u-boot里面设置)

# setenv bootcmd tftp 33000000 zImage\; go33000000
# setenv bootargs  root=nfs  nfsroot=192.168.1.111:/source/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.1.112
# savenv

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

三、制作ramdisk文件系统

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

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

       

$ dd if=/dev/zero of=initrd.img bs=1kcount=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

       SCSIdevice support  --->

              <*>SCSI disk support

       Blockdevices  --->

              <*>RAMdisk support  

(1)Default number of RAM disks 

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

              Generalsetup  --->

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

重新编译内核

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

# setenv bootcmd tftp 33000000 zImage \; tftp 30800000initrd.img.gz \; go 33000000
# setenv bootargs root=/dev/ram rw init=/linuxrcinitrd=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-onlyfile 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文件系统烧写

# tftp 30008000 rootfs.jffs2
# nand erase 500000 800000
# nand write 30008000 500000 800000

       5、设置u-boot启动参数

# setenv bootcmd tftp  33000000 zImage\; go33000000
# setenv bootargs root=/dev/mtdblock2       init=/linuxrc rootfstype=jffs2 rw  console=ttySAC0,115200 
# savenv

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

三、制作ramdisk文件系统

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

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

       $ dd if=/dev/zero of=initrd.img bs=1kcount=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

       SCSIdevice support  --->

              <*>SCSI disk support

       Blockdevices  --->

              <*>RAMdisk support  

(1)Default number of RAM disks 

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

              Generalsetup  --->

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

重新编译内核

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

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

# setenv bootargs root=/dev/ram rw init=/linuxrcinitrd=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-onlyfile 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文件系统烧写

# tftp 30008000 rootfs.jffs2

# nand erase 500000 800000

# nand write 30008000 500000 800000

       5、设置u-boot启动参数

# setenv bootcmd tftp  33000000 zImage\; go33000000

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

 console=ttySAC0,115200 

# savenv

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值