制作根文件系统

用的目标板是ARM-Tiny6410,制作根文件系统所用的源码包是:busybox-1.22.1.tar.bz2

 

第一步:配置、编译Busybox

              建立交叉编译环境和安装图形化配置的依赖工具Ncurses可参考龙芯1B开发板文档(在百度直接输入龙芯1B开发板文档即可)

 

             图形化配置

                              首先把busybox-1.22.1.tar.bz2解压出来
                               #cd busybox-1.22.1
                               #make menuconfig

配置选择为:

           Busybox Setings--->

           General Configuration ---> (默认)
          Build Options--->
                      [ ] Build Busybox as a static binary (no shared libs)
                      [*] Build shared libbusybox
                      (/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-)Cross Compiler prefix (需要编辑)
                      Installation Options("make install"behavior)---> (默认)
          Busybox Library Turning--->
                      [*] vi-style line editing commands(NEW)
                      [*] Fancy shell prompts(NEW)
          Init Utilities---> (默认)
                      [*]init
                      [*]Suport reading an inittab file
                      [*]Run commands with leading dash with controlling tty
                      [*]Support running init from within an initrd (not initramfs)

         Miscellaneous Utilities-->
                      [ ] inoice
                      [ ] ubiattach
                      [ ] ubidetach
                      [ ] ubimkvol
                      [ ] ubirmvol
                      [ ] ubirsvol
                      [ ] ubiupdatevol

 

 

编译Busybox

                 配置完成后,编译Busybox:

                        # make clean all

                安装到目录:

                        # make install

第二步:构建根文件系统

 

构建根文件目录:

                   # mkdir /root/rootfs

                   # cd /root/rootfs

                   #mkdir dev home proc tmp var etc lib mnt sys usr etc/rc.d

 

构建系统配置文件:

            (在这里,我们需要注意的是以下的配置文件不是在Ubuntu操作系统的根目录下创建的。)

(1)etc/inittab文件
说明:inittab 文件是init进程的配置文件,系统启动后所访问的第一个脚本文件,后续启动的文件都由它指定。
# cd /root/ rootfs
# vi etc/inittab
添加如下内容:
                        ::sysinit:/etc/rc.d/rc.sysinit //指定系统启动后首先执行的文件
                        #Example of how to put a getty on a seria line(for a terminal)
                        ::respawn:-/bin/sh                                                #no login(启动后进入shell环境)
                        #::respawn:/sbin/getty -L ttyS2 115200 vt100            #use login
                        #tty::respawn:-/bin/sh
                       #Stuff to do when restarting the init porcess
                       ::restart:/sbin/init
                       #Stuff to do before rebooting
                       ::ctrlaltdel:/sbin/reboot //捕捉ctrl+alt+del键,重启文件系统
                       ::shutdown:/bin/umount -a –r //当关机时卸载所有文件系统
                       ::shutdown:/sbin/swapoff –a

 

(2)etc/rc.d/rc.sysinit文件
说明:这是一个脚本文件,可以在里面添加想自动执行的命令。以下命令配置环境变量、主机名、dev目录环境、挂接/etc/fstab指定的文件系统、建立设备节点与设置IP。
                       #vi etc/rc.d/rc.sysinit
             添加如下内容
                       #!/bin/sh

                       #Set binary path
                       export PATH=/bin:/sbin:/usr/bin:/usr/sbin
                      #Config dev enviornment
                      mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
                      mkdir -p /dev/pts
                      mount -t devpts devpts /dev/pts
                      #mount all filesystem defined in /etc/fstab
                      echo "#mount all....."
                     /bin/mount -a
                     echo "#Starting mdev....."
                     echo /sbin/mdev > /proc/sys/kernel/hotplug
                     /sbin/mdev -s
                     #Set hostname
                     /bin/hostname "Loongson-gz"
                     export LAGNAME=root
                     #Set ip
                     #ifconfig eth0 192.168.3.123 up(根据自己的服务器的IP来修改即可)
                     ifconfig lo 127.0.0.1

 

 

(3)etc/fstab文件
说明:执行mount –a时挂接/etc/fstab指定的文件系统。
#vi etc/fstab
添加如下内容
sysfs /sys sysfs defaults          0   0
proc /proc proc defaults           0   0
tmpfs /tmp tmpfs defaults        0    0
tmpfs /mnt tmpfs defaults        0     0
tmpfs /root tmpfs defaults       0     0
tmpfs /var/log tmpfs defaults   0    0

 

(4)etc/profile文件
说明:inittab中执行了这样一个语句“::respawn:-/bin/sh”。
启动/bin/sh程序时会启动ash的配置信息,而它就是/etc/profile,sh会把profile的所有配置全部都运行一遍,因此用户可以把自己的启动程序放在这里。

#vi etc/profile
添加如下内容
#!/bin/sh
#/etc/profile:system-wide .profile file for the Bourne shells
echo "Processing /etc/profile....."
#set search library path
export LD_LIBRARY_PATH=/lib:/usr/lib:/qte/lib
#set user path
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/exe/
#Set PS1
export PS1='[\u@\h:\w]\$'
alias ll="ls -l"
echo "Done!"

 

 

(5)修改系统配置文件权限
#chmod 755 etc/*
#chmod 755 etc/rc.d/rc.sysinit

 

(6)拷贝Busybox文件
将安装好的Busybox文件拷贝到/root/rootfs/目录:
#cp ./busybox、busybox-1.22.1/_install/_install/*     /root/rootfs -rf

 

第三步:拷贝库文件(配置Busybox若选择静态编译则省略此步骤)

x86系统中,动态编译Busybox制作文件系统,需将下列几个必须库从工具链gcc-3.4.6-2f/mipsel-linux/lib拷贝到lib目录。
                      ld.so.1, ld-2.3.6.so, libcrypt.so.1, libc.so.6, libdl.so.2, libgcc_s.so.1, libm.so.6, libpthread.so.0, libstdc++.so.6(小编在操作过程中并没有前面两个文件,但不影响最后的结果)
                      #cp /opt/FriendlyARM/toolschain/4.5.1/arm-none_linux_gnueabi/sys-root/lib/*    /root/rootfs/lib/

 

第四步:镜像文件制作工具

                     (1) cramfs-1.1.tar.gz (制作cramfs 文件系统工具 )
                     (2) mtd-utils-1.0.0.tar.gz (制作jffs2文件系统工具)
                     (3) yaffs2-d43e901.tar.gz (制作yaffs2 文件系统工具)这里我用的是mkyaffs2image-128M
                     (4) zlib-1.2.3.tar.gz (依赖工具)

 

镜像文件制作工具本机安装

(1)安装依赖工具zlib:
                                      #tar zxf zlib-1.2.3.tar.gz
                                     #cd zlib-1.2.3
                                    #./configure && make && make install


(2)制作cramfs 文件系统工具mkcramfs:
                                  #tar zxf cramfs-1.1.tar.gz
                                  #cd cramfs-1.1
                                  #make
                                  当前目录生成mkcramfs,可以拷贝到/usr/bin:
                                  #cp mkcramfs /usr/bin

 


(3)制作jffs2文件系统工具mkfs.jffs2
                             #tar zxf mtd-utils-1.0.0.tar.gz
                            #cd mtd-utils-1.0.0
                            #make
                           当前目录下生成mkfs.jffs2,可以拷贝到/usr/bin:
                            #cp mkfs.jffs2 /usr/bin

 


(4)制作yaffs2 文件系统工具mkyaffs2image
                                        #tar zxf yaffs2-d43e901.tar.gz

                                       #cd yaffs2-d43e901/utils
                                       #make
                                      在当前目录yaffs2-d43e901/utils下生成mkyaffs2image,可以拷贝到/usr/bin:
                                      #cp mkyaffs2image /usr/bin

 

制作文件系统镜像文件

(1)Cramfs:
#mkcramfs /root/rootfs rootfs-cramfs.img
#chmod 777 rootfs-cramfs.img //修改文件系统权限,防止出现无法烧写的情况
或者使用自带的工具:
#mkfs.cramfs /root/rootfs rootfs-cramfs.img
#chmod 777 rootfs-cramfs.img //修改文件系统权限,防止出现无法烧写的情况


(2)Jffs2:
#mkfs.jffs2 -r /root/rootfs -o rootfs-jffs2.img -e 0x20000 --pad=0x2000000 -n
#chmod 777 rootfs-jffs2.img //修改文件系统权限,防止出现无法烧写的情况
mkfs.jffs2各参数的意义:
-r:指定要生成image的目录名。
-o:指定输出image的文件名。
-e:每一块要擦除的block size,不同的flash,其block size会不一样。这里为128KB。
--pad:用16进制来表示所要输出文件的大小,也就是rootfs-jffs2.img的大小,如果实际大小不足此设定的大小,则用0xFF补足。
-n,-no-cleanmarkers:指明不添加清楚标记(nandflash有自己的校检块,存放相关的信息)。


(3)Yaffs2:
#mkyaffs2image /root/rootfs rootfs-yaffs2.img
#chmod 777 rootfs-yaffs2.img //修改文件系统权限,防止出现无法烧写的情况

 

第五步:进行烧写

在Linux环境中打开两个终端A和B,目标板Tiny6410上电。

终端A:

           # sudo minicom

                  目标板复位

                 按y键(如果之前还没有进行内核的烧写,需要在这之前按k键)

终端B:

                # sudo ./dnw  rootfs-yaffs2.img 0

终端A:

            按b键

           复位

 

小编在进行这些编译,是在龙芯1B开发板文档加以修改得到最后的成功的,大家有空也可以百度查看一下这份文档。祝大家学习愉快微笑

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值