您的位置:首页 > 编程语言 > PHP开发

用busybox制作rootfs && yaffs文件系统

2014-01-26 19:51 405 查看
###平台AM335X实验未成功###

我们知道一个linux的启动过程,包括BIOS的加电自检POST,拷贝MBR的信息(启动BootLoader),加载内核,挂载根文件安系统这几大步,在嵌入式系统的移植方面我们也要自己动手制作内核映像,根文件系统等。

概要:
    1.busybox(busybox-1.9.1)
        下载一个版本的busybox。下载地址。
        busybox是主要用来提供一些bash shell命令的工具。
    2.配置文件
        重点配置文件是在境的上一篇文章提到的几个文件。linux启动过程中的几个重要文件的详解
    3.设备文件(文中会教你如何添加)
    4.必要的库文件(选用)
        所以今天我要的做的就是由busybox等组成的rootfs。

BusyBox简介:
    1.BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。

    2.BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了
Linux 的许多工具和命令。

制作过程:
一、编译busybox获得shell工具
1.建立一个根文件系统目录,可以利用下面这个脚本快速建立一些默认的文件系统框架
[xt@butbueatiful ~]$ vi mkrootfsdir.sh
#------------------------------------------------------------ 
#!/bin/sh
echo ">>>>>> Create rootfs directons <<<<<<"
mkdir /home/xt/rootfs
cd /home/xt/rootfs
echo "--------- Create root,dev ......"
mkdir bin dev etc lib mnt opt proc sbin srv sys tmp usr var workspace
mkdir usr/sbin usr/bin usr/lib usr/modules
mkdir etc/sysconfig etc/init.d etc/network
mkdir etc/network/if-down.d etc/network/if-post-down.d etc/network/if-pre-up.d etc/network/if-up.d
mkdir lib/modules
chmod 1777 tmp
cd ..
echo "------- make direction done ---------"
#------------------------------------------------------------ 

保存退出。
更改可执行权限
[xt@butbueatiful ~]$ chmod +x mkrootfsdir.sh
[xt@butbueatiful ~]$ /mkrootfsdir.sh
>>>>>> Create rootfs directons <<<<<<
-------- Create root,dev ......
------- make direction done ---------
这样就建好了一个根文件系统的大致框架。

2.将刚才的下载的busybox解压到你的主目录,并转至:
[xt@butbueatiful ~]$ tar xvjf busybox-1.9.1.tar.bz2
[xt@butbueatiful ~]$ cd busybox-1.9.1/

3.修改makefile文件来修改我们的arch和gcc编译工具;没有安装交叉编译工具的筒子请看快速安装ubuntu交叉编译工具
[xt@butbueatiful busybox-1.9.1]$ vi Makefile
修改175行:ARCH ?= arm
修改176行:ROSS_COMPILE ?= arm-linux-

4.配置
[xt@butbueatiful busybox-1.9.1]$ make defconfig        #生成一个默认的配置
[xt@butbueatiful busybox-1.9.1]$ make menuconfig

5.优化配置选项,在做make menuconfig之前最好,[全屏打开你的terminal],这样才还显示类似编译内核一样的配置框,如下:
主要也是根据个人口味来选择优化配置,境选择如下:
   Busybox Settings  --->
       General Configuration  --->                
    Build Options  --->       
    Debugging Options  --->      
    Installation Options  ---> 
        Busybox installation prefix 设置为 /home/xt/rootfs
    Busybox Library Tuning  --->
这几项都稍微看下,决定对你的有需要的就选上。

6.编译安装我们的busybox
[xt@butbueatiful busybox-1.9.1]$ make
[xt@butbueatiful busybox-1.9.1]$ make install

二、创建配置文件:
1.创建设备文件
mdev 是通过 init 进程来启动的,在使用 mdev 构造 /dev 目录之前,init 至少要用到设备文件/dev/console、 /dev/null ,所以需要事先建立这两个设备文件:

[xt@butbueatiful busybox-1.9.1]$ cd ~/rootfs/dev
[xt@butbueatiful dev]$ sudo mknod -m 660 console c 204 64
[xt@butbueatiful dev]$ sudo mknod -m 660 null c 1 3
[xt@butbueatiful dev]$ ls -l
total 0
crw-rw----. 1 root root 204, 64 May 16 17:19 console
crw-rw----. 1 root root   1,  3 May 16 17:19 null

2.准备一些配置文件和系统启动时所需的文件,这些文件的作用可以查看(看好所在的目录)
(1)在etc下添加mdev。conf;
[xt@butbueatiful dev]$ cd ../etc
[xt@butbueatiful etc]$ touch mdev.conf

(2)在etc/init.d下添加rcS;
[xt@butbueatiful etc]$ cd init.d/
[xt@butbueatiful init.d]$ vi rcS
将下面内容写进去
#-------------------------------------------------------------- 
#!/bin/sh
echo "Processing /etc/init.d/rcS"
echo "mount -a"
mount -a #mount上fstab文件中所有文件系统
exec /etc/rc.local
#-------------------------------------------------------------- 

(3)在etc下添加rc.local文件;
[xt@butbueatiful init.d]$ cd ..
[xt@butbueatiful etc]$ vi rc.local
添加下面内容:
#-------------------------------------------------------------- 
#!/bin/sh
echo "Processing /etc/rc.local"
echo "get hostname"
/bin/hostname -F /etc/hostname
echo "Starting mdev"
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo "ifconfig eth0 192.168.0.111"
ifconfig eth0 192.168.0.111
echo "*********************************************************"
echo "*                                                       *"
echo "*           Kernle: Linux 2.6.27                        *"
echo "*           Compiler: arm-linux-4.0.2                   *"
echo "*           Date: 2012-05-16                            *"
echo "*           Author: xttao                               *"
echo "*                                                       *"
echo "*                                                       *"
echo "*********************************************************"
#-------------------------------------------------------------- 

(4)在etc下添加profile文件:
[xt@butbueatiful etc]$ vi profile
添加下面内容:
#-------------------------------------------------------------- 
#/etc/profile
echo "Processing /etc/profile"
echo "set user path"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
echo "set search library path"
LD_LIBRARY_PATH=/lib:/usr/lib
echo "set PS1"
HOSTNAME=`/bin/hostname`
PS1='\u@\h:\w\$ ' 
export PS1="[\u@\h \W]\$"    #设置命令提示符为Redhat风格
export PATH LD_LIBRARY_PATH HOSTNAME PS1
#------------------------------------------------------------ 

(5)改变权限;
[xt@butbueatiful etc]$ chmod 775 init.d/rcS rc.local profile

(6)在etc下添加inittab文件:
[xt@butbueatiful etc]$ vi inittab
添加下面内容:
#------------------------------------------------------------ 
#/etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh   
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
#------------------------------------------------------------ 

(7)在etc下添加fstab文件:
[xt@butbueatiful etc]$ vi fstab
添加下面内容:
#------------------------------------------------------------ 
#/etc/fstab: static file system information.
#<File system> <mount pt>     <type>   <options>         <dump> <pass>
proc  /proc proc  defaults 0 0
sysfs /sys  sysfs defaults 0 0
mdev  /dev  ramfs defaults 0 0
none  /tmp  ramfs defaults 0 0
#------------------------------------------------------------ 

(8)在etc下添加passwd文件:
[xt@butbueatiful etc]$ vi passwd
添加下面内容:
#------------------------------------------------------------ 
#username:password:User ID:Group ID:comment:home directory:shell
root::0:0:root:/root:/bin/sh
#------------------------------------------------------------ 

(9)将你安装交叉编译器下lib库文件复制到rootfs/lib目录下:
cd /usr/local/arm/gcc-4.0.2-glibc-2.3.6/arm-linux/arm-linux/lib
cp -dp *so* ~/rootfs/lib

三、生成CramFS文件系统镜像文件rootfs.img
sudo mkfs.cramfs rootfs/ rootfs.cramfs    #制作一个rootfs文件系统

现在你可以将该镜像烧写到你的开发版上了

四、创建yaffs文件系统
进入nfs网络文件系统:
写一个脚本mkyaffs.sh
内容如下:
#------------------------------------------------------------ 
#!/bin/sh

echo "make yaffs staring ......"
cd /
/sbin/flash_eraseall /dev/mtd2
mount -t yaffs /dev/mtdblock2 /mnt
cp -a bin etc lib linuxrc opt sbin srv tmp usr workspace /mnt
mkdir -p /mnt/proc /mnt/sys /mnt/dev /mnt/mnt /mnt/var/run
mknod -m 600 /mnt/dev/console c 5 1
mknod -m 666 /mnt/dev/null c 1 3
umount mnt
echo "make yaffs done ............."
#------------------------------------------------------------ 
更改权限后执行即可生成一个yaffs文件系统

从不同的文件系统启动由u-boot在里设置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: