Tiny6410挂载nfs根目录文件系统(一)

2014-11-24 07:33:53 · 作者: · 浏览: 0

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


上次好像我们讲到了自己配的内核到挂在完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-

\

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

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

\

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参数保持