<十四> 文件系统的移植

注 :次实验前提 Nand flash 驱动的移植

参考:http://blog.csdn.net/qq_26058749/article/details/52792094

一、根文件系统制作

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-cortex_a8-linux-gnueabi-) Cross Compiler prefix
() Additional CFLAGS
5、 编译
$ make
6、 安装
busybox 默认安装路径为源码目录下的_install
$ make install
7、 进入安装目录下$ cd _install
$ ls
bin linuxrc sbin usr
8、 创建其他需要的目录
$ mkdir dev etc mnt proc var tmp sys root
9、 添加库
a 将工具链中的库拷贝到_install 目录下
$ cp /home/linux/ toolchain /arm-cortex_a8-linux-gnueabi/lib/ ./ -a
b 删除静态库和共享库文件中的符号表
$ rm lib/*.a
$ arm-cortex_a8-linux-gnueabi-strip lib/*
c 删除不需要的库,确保所有库大小不超过 4M
$ du -mh lib/
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
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
为 rcS 添加可执行权限:
$ chmod +x init.d/rcS
在 etc 下添加 profile 文件,文件内容为:
#!/bin/sh
export HOSTNAME=lz210
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
重要:新制作的文件系统尺寸若超出 8M,删除不需要的库文件
二、 NFS 测试
1、删除原先的/source/rootfs
$ sudo rm -rf /source/rootfs
2、将我们新建的根文件系统拷贝到/source/rootfs 目录下
$sudo mkdir /source/rootfs
$ sudo cp _install/* /source/rootfs –a
3、设置 uboot 环境变量
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=nfs nfsroot=192.168.1.100:/source/rootfs init=/linuxrc
console=ttySAC0,115200 ip=192.168.1.200
# saveenv
重新启动开发板,查看是否能够正常挂载,功能是否正常
三、制作 ramdisk 文件系统
通过 NFS 测试以后,就可以制作 ramdisk 文件系统了,具体如下:
1、制作一个大小为 8M 的镜像文件
$ cd ~
$ dd if=/dev/zero of=initrd.img bs=1k count=8192 ( initrd.img 为 8M)
2、格式化这个镜像文件为 ext2
$ mkfs.ext2 -F initrd.img
3、在 mount 下面创建 initrd 目录作为挂载点
$ sudo mkdir /mnt/initrd
4、将这个磁盘镜像文件挂载到/mnt/initrd 下注意这里的 initrd.img 不要和 ubuntu 根目录下的 initrd.img 弄混了,同时 initrd.img 不能
存放在 rootfs 目录中
$ sudo mount -t ext2 -o loop initrd.img /mnt/initrd
5、将我们的文件系统复制到 initrd.img 中
将测试好的文件系统里的内容全部拷贝到 /mnt/initrd 目录下面
$ sudo cp /source/rootfs/* /mnt/initrd –a
6、卸载 initrd
$ sudo umount /mnt/initrd
7、压缩 initrd.img 为 initrd.img.gz 并拷贝到/tftpboot 下
$ gzip --best -c initrd.img >initrd.img.gz
$ cp initrd.img.gz /tftpboot
8、配置内核支持 RAMDISK
制作完 initrd.img.gz 后,需要配置内核支持 RAMDISK 作为启动文件系统
File systems --->
<*> Second extended fs support
Device Drivers
SCSI device support --->
<*> SCSI disk support
Block devices --->
<*>RAM block device 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
重新编译内核,复制到/tftpboot
9、在 U-BOOT 命令行重新设置启动参数:
# setenv bootcmd tftp 20008000 zImage \; tftp 21000000 initrd.img.gz \; go 20008000
# setenv bootargs root=/dev/ram rw init=/linuxrc initrd=0x21000000,8M
console=ttySAC0,115200
# saveenv
重新启动开发板查看能否正常启动
四、制作 cramfs 文件系统
1、 cramfs 文件系统镜像制作
由于系统提供制作 cramfs 文件系统的工具,可以直接使用。具体操作如下;
$ mkfs.cramfs /source/rootfs rootfs.cramfs
2、将 rootfs.cramfs 拷贝到/tftpboot 目录下
$ sudo cp rootfs.cramfs /tftpboot
3、将 rootfs.cramfs 烧写到 nand flash 的第三个分区上
u-boot 下执行如下命令
# tftp 20008000 rootfs.cramfs
# nand erase 500000 800000
# nand write 20008000 500000 800000
4、重新设置 u-boot 启动参数# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=/dev/mtdblock2 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
(0) JFFS2 debugging verbosity (0 = quiet, 2 = noisy)
[*] JFFS2 write-buffering support
[*] Verify JFFS2 write-buffer reads
重新编译内核并拷贝到/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
4、 jffs2 文件系统镜像制作
$ mkfs.jffs2 -r /source/rootfs -o rootfs.jffs2 -e 0x20000 --pad=0x800000 -n
$ sudo cp rootfs.jffs2 /tftpboot
5、 jffs2 文件系统烧写
# tftp20008000 rootfs.jffs2
# nand erase 500000 800000
# nand write 20008000 500000 800000
6、设置 u-boot 启动参数
# setenv bootcmd tftp 20008000 zImage\; go 20008000
# setenv bootargs root=/dev/mtdblock2 rootfstype=jffs2 rw init=/linuxrc
console=ttySAC0,115200
# saveenv

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值