Tiny6410挂载nfs根目录文件系统

        本文专属tiny6410吐槽系列~如有得罪,请多包涵~在此也留个联系方式[email protected],欢迎大家一起交流吐槽心得~


        上次好像我们讲到了自己配的内核到挂在完nfs就挂掉了,提示是找不到init是吧~记得好像是,所以今天我们来解决掉这个问题,从新开始制作一个根目录文件系统。

        这里不得不下载的就是busybox啦~这是木有办法的啦,谁叫这是神奇呢~又截止到我码下这些文字的时刻,2013/12/05晚上23:10分,busybox官网发布的最新版本是29 June 2013 -- BusyBox 1.21.1 (stable)

        所以到busybox官网把busybox1.21.1下载下来

        http://www.busybox.net/


        然后tar解压出来~再再然后直接make menuconfig进入配置菜单

        


        1.Busybox Settings --->Build Options --->

        如下配置,编译成静态库,这样会省去一点麻烦,以后我们再编译成动态库的形式~

        然后指定交叉编译器arm-linux-

        Tiny6410挂载nfs根目录文件系统_第1张图片

        2.Busybox Settings --->Installation Options --->

这里是编译busybox后的安装位置,这里最好不要选择默认的,我们把busybox的安装路径设置成nfs共享文件系统根目录的,比如说我是这样的设置:

        Tiny6410挂载nfs根目录文件系统_第2张图片

        3.其他暂时先保持默认~exit出来后就可以make -j2啦~


        4.在make install busybox之前,首先创建根目录文件夹和根目录下系统常备的文件夹~您可以看一下您linux发行版的根目录下都有哪些文件夹~类似的,我也在根目录也创建这些文件夹~但是这里由于时间关系和不浪费您宝贵的时间,我直接贴出脚本来。

        Creat file脚本文件,脚本不要用sudo去执行,后面你会知道错的

#!/bin/sh
echo "----------   Create rootfs directons start...   ----------"
mkdir rootfs 
cd rootfs 
echo "----------   Create root,dev....   ----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr opt
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
mkdir lib/modules
mkdir lib/modules/3.2.53
echo "make node in dev/console dev/null"
mknod -m 660 dev/console c 5 1
mknod -m 660 dev/null c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp
chmod 777 tmp
chmod 777 var/tmp
echo "----------   Creat some necessary files   ----------"
touch etc/init.d/rcS etc/sysconfig/HOSTNAME etc/inittab etc/fstab etc/profile
cp /etc/passwd  rootfs/etc
cp /etc/group rootfs/etc
cp /etc/shadow rootfs/etc
echo "----------   make direction done   ----------"

        然后执行完脚本之后用管理员身份创建和复制几个文件

        如果上面的脚本不能执行的话,就手动复制那些necessary files

touch etc/init.d/rcS etc/sysconfig/HOSTNAME etc/inittab etc/fstab etc/profile
cp /etc/passwd  rootfs/etc
cp /etc/group rootfs/etc
cp /etc/shadow rootfs/etc

        然后,比如我建立的根目录是/home/chanfai/workspace/rootfs,那么busybox编译后的安装路径也是这个~

        所以,现在可以切入busybox目录下make install,然后逐个逐个修改根目录的文件


        1.etc/inittab,系统init进程配置文件,参考busybox源码example/inittab文件说明

        Inittab配置

::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh #没有这就不行,就不能打开console控制台。
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a

 

        2.etc/init.d/rcS,系统启动加载项文件

        rcS配置

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts #用于telnet登录时使用

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock
/bin/hostname -F /etc/sysconfig/HOSTNAME


        3.etc/fstab 系统挂载文件系统列表文件,

        Fstab配置

#device mount-point type option dump fsck order 
proc /proc proc defaults 0 0 
sysfs /sys sysfs defaults 0 0 
mdev /dev ramfs defaults 0 0
none /var ramfs defaults 0 0
none /tmp ramfs defaults 0 0


        4.etc/profile用户环境配置文件

        Profile配置

# Ash profile
# vim: syntax= sh
# No core file by defaults
# ulimit - S - c 0> / dev/ null 2> & 1

USER="id -un" 
LOGNAME=$USER
PS1="[\u@\h \w]#"  #\w 目录将显示全路径
PATH=$PATH
HOSTNAME= '/bin/hostname' 
alias cls="clear"
export USER LOGNAME PS1 PATH


        5.etc/sysconfig/HOSTNAME,填入自己的用户名字,我这里是chanfai


        6.还有一点,为了必须某些bug,rootfs/lib目录要求某些动态库~其实就是交叉编译器里面的一些动态库,说明这个很费时间的,这里我是比较懒,从友善编译好的文件系统中直接抽出lib目录部分~

        cp过去就行,记得带上-a参数保持软连接状态


        好,文件系统暂时就这样先定,最后来一张图结束这一次的吐槽~

        Tiny6410挂载nfs根目录文件系统_第3张图片

        下节移植lcd驱动和tslib,然后在文件系统中加入QT库,再然后就真正进入各个驱动的移植,然后顺带在应用层写QT界面去控制各个外设,这样可以达到交叉学习的效果

你可能感兴趣的:(嵌入式)