初学编译制作yaffs根文件系统

# 本所使用的是ARM Tiny6410开发板。

# 以下所属个人实际操作的来,若有不妥或是不对之处,请多多之处不足之处。

# 部分资源来源网上学习资料。

# 首先要明确:实现镜像文件是用来做什么的,每一步的结果是做什么的。

          一.准备ARM,ARM已经烧写了boot,可以下载内核。(有时间将补充此处知识)

          二.准备宿主计算机,拥有arm-linux 编译环境(因编译环境而改变)。

          三.准备yaffs包 (yaffs2-d43e901.tar.gz)依赖工具包 (zlib-1.2.3.tar.gz)busybox包(busybox-1.22.1.tar.bz2)

——————————————————————————————————————————————————————————

宿主计算机安装镜像文件工具(非root用户记得加sudo)

       安装依赖工具:

              # tar zxf zlib-1.2.3.tar.gz

              # cd zlib-1.2.3

              # ./configure && make && make install

                            这里如果不是 root用户则使用  sudo ./configure && sudo make && sudo make install 如果不行请拆开命令执行

       

        制作 yaffs2 文件系统工具 mkyaffs2image

              # tar zxf yaffs2-d43e901.tar.gz

              # cd yaffs2-d43e901/utils(虽然 yaffs2-d43e901 中也有makefile 但是我们使用的是 utils 中的makefile)

              # make 此时就会生成 mkyaffs2image可执行文件 

              # cp mkyaffs2image到/uer/bin  这样我们就可以像 ls 等命令 直接用啦~


——————————————————————————————————————————————————————————

配置及编译busybox

       建立交叉编译环境,也就是激活arm-linux- 环境


       建立图形界面化的依赖工具 Ncurses

              # apt-get install libncurses5-dev


       图形化的配置

              #tar jxf busybox-1.22.1.tar.bz2  (因为使用的 tar.bz2 所以是用 jxf 解压)

               # cd busybox-1.22.1

              # make menuconfig

              这里要留意一个小问题:如果终端的字体太大会使图形界面打不开的哦!


       配置的选择(因为初学所以只能简单配置,不涉及的统一采用默认)

               Busybox Setings--->

                     Build Options--->

                            [   ] Build Busybox as a static binary (no shared libs)

                            [ * ] Build shared libbusybox

                            (编译环境) Cross Compiler prefix 我的编译环境  /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-

                           (/opt/FriendslyARM/toolschain/4.5.1/bin/arm-linux-) Cross Compiler Prefix

                     Busybox Library Turning--->

                               [ * ] vi-style line editing commands

                               [ * ] Fancy shell prompts

                      Init Utilites--->(默认,不过最好检查一下)

                                [ * ] init

                                [ * ] Suport reading an inittab file

                                [ * ] Run commands with leading dash with controlling tty

                                [ * ] Support runing init from within an initrd (not initramfs)

                Miscellaneous Utilities-->

                        [   ] inoice

                        [   ] ubiattach

                        [   ] ubidetach

                        [   ] ubimkvol

                        [   ] ubirmvol

                        [   ] ubirsvol

                        [   ] ubiupdatevol


——————————————————————————————————————————————————————————

编译 Busybox

         # make clean all

         # make install

                          之后就会生成一个_install 目录 里面有目录 bin sbin usr 和一个链接文件 linuxrc


——————————————————————————————————————————————————————————

构建根文件系统

        # mkdir rootfs

        # cd /rootfs


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

        # chmod 777 tmp


        # cd dev

        # mknod console c 5 1

        # mknod null c 1 3

                                         

——————————————————————————————————————————————————————————

建立系统配置文件

        # cd /rootfs

        # vi etc/inittab    //inittab 是 init 进程的配置文件,启动后的第一个脚本文件,之后的启动文件都是由它决定

                 添加内容

::sysinit:/etc/rc.d/rc.sysinit
//指定系统启动后首先执行的文件
#Example of how to put a getty on a seria line(for a terminal)
#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
::shutdown:/bin/umount -a –r
::shutdown:/sbin/swapoff –a


        # vi etc/rc.d/rc.sysinit    //设置脚本文件,里面配置环境变量,主机名,dev 目录环境 ,挂接 /etc/fstab 指定文件系统,建立设备节点和设置IP 等。

                 添加内容

#!/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.110 up
ifconfig lo 127.0.0.1


        # vi etc/fstab        //建立执行 mount -a 时,挂接/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


        # vi etc/profile    //inittab 中执行了这样一个语句“::respawn:-/bin/sh”。启动/bin/sh 程序时会启动 ash 的配置信息,而它就是/etc/profile, sh会把 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!"


          修改系统文件权限

                  # chmod 755 etc/*

                  # chmod 755 etc/rc.d/rc.sysinit


          拷贝 Busybox 文件

                  # cp ./Busybox1.22.1/_install/*   /rootfs -rf


          拷贝 交叉编译 文件

                  # cp ./opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* /rootfs/lib/ -d


——————————————————————————————————————————————————————————

制作文件系统镜像

        # mkyaffs2image /rootfs rootfs-yaffs2.img

        # chmod 777 rootfs-yaffs2.img


——————————————————————————————————————————————————————————

最后用boot烧写,yaffs 根文件就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值