您的位置:首页 > 其它

Busybox文件系统的移植

2015-11-18 14:19 351 查看
相关软件下载地址:http://pan.baidu.com/s/16yo8Y

fsc100开发板

交叉编译器:arm-cortex_a8-linux-gnueabi-gcc

busybox-1.17.3.tar.bz2

一、根文件系统制作

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、 添加库

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

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

删除静态库和共享库文件中的符号表

$ rm lib/*.a

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

删除不需要的库,确保所有库大小不超过4M

$ rm lib/libstdc++*

$ 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=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

11、 设备文件创建

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

$ sudo mknod dev/console c 5 1

重要:新制作的文件系统尺寸若超出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作为启动文件系统

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 20800000 initrd.img.gz \; go 20008000

# setenv bootargs root=/dev/ram rw init=/linuxrc initrd=0x20800000,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 400000 400000

# nand write 20008000 400000 400000

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

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

2、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

$ sudo make install

3、mtd工具编译

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

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

$ cd mtd/util

$ make

$ sudo make install

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

4、jffs2文件系统镜像制作

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

$ sudo cp rootfs.jffs2 /tftpboot

5、jffs2文件系统烧写

# tftp 20008000 rootfs.jffs2

# nand erase 400000 400000

# nand write 20008000 400000 400000

6、设置u-boot启动参数

# setenv bootcmd tftp 20008000 zImage\; go 20008000

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

console=ttySAC0,115200

# saveenv

重新启动开发板,查看是否成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: