使用Ubuntu14.04虚拟机,virtualbox5.2版本,friendlyarm自带4.4.3编译器,micromini2440开发板。Linux内核版本2.6.32.2,uboot版本u-boot-2010.3(移植参考:http://blog.chinaunix.net/uid-23787856-id-115375.html),busybox1.13.3。
一、制作root文件系统
根文件系统是内核启动后挂载的第一个文件系统,设备文件以及启动配置文件都会加载到该文件系统上。根文件系统目录结构由mkyaffs2image工具生成一个二进制文件烧录到NAND FLASH中,待内核加载该文件系统到DRAM内存中。
1.1 制作根文件目录结构
首先手动创建内核需要的目录结构,使用友善之臂提供的脚本生成目录。用以下命令创建一个脚本文件creat_root,并使用命令chmod +x creat_root修改脚本文件执行属性。运行./creat_root脚本后,当前目录下会出现rootfs文件夹,证明创建成功。
#!/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
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules
echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 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 1777 tmp
chmod 1777 var/tmp
echo "-------make direction done---------"
1.2 建立动态链接库
拷贝友善之臂提供的库文件到rootfs/lib库文件夹下。根据以下参考方法拷贝。
tar –zxvf root_qtopia.tgz –C /opt/studyarm
cp –rfd /opt/studyarm/root_qtopia/lib/* /opt/studyarm/rootfs/lib/*
在 rootfs 目录下会生成目录 bin、 sbin、 usr 和文件 linuxrc 的内容。
1.4 建立 etc 目录下的配置文件
1、 etc/mdev.conf 文件,内容为空。
2、拷贝主机 etc 目录下的 passwd、 group、 shadow 文件到 rootfs/etc 目录下。
3、 etc/sysconfig 目录下新建文件 HOSTNAME,内容为” H3-Studio”。
4、 etc/inittab 文件:
#etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
5、 etc/init.d/rcS 文件:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "***********************************************"
echo "****************Studying ARM*********************"
echo "Kernel version:linux-2.6.32.2"
echo "***********************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME
(或者直接 /bin/hostname H3-Studio )
使用以下命令改变 rcS 的执行权限:
Chmod +x rcS
6、 etc/fstab 文件:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
7、 etc/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]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
二、Ubuntu中开启nfs服务器
参考:https://www.linuxidc.com/Linux/2016-04/129848.htm
2.1-安装Ubuntu nfs服务器端:
sudo apt-get install nfs-kernel-server
2.2-安装nfs的客户端:
sudo apt-get install nfs-common
(在安装nsf-kernel-server的时候,也会安装nfs-commom。如果没有安装这个软件包,则要执行1.2中的命令了)
2.3-设置共享的文件目录
sudo mkdir /opt/studyarm/rootfs
2.4-修改配置文件/etc/exports
在最后一行添加:/opt/studyarm/rootfs *(rw,sync,no_root_squash,no_subtree_check)
前面那个目录是与nfs服务客户端共享的目录,*代表允许所有的网段访问(也可以使用具体的IP)
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:客户机用root访问该共享文件夹时,不映射root用户。(root_squash:客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户)
no_subtree_check:不检查父目录的权限。
2.5-nfs是一个RPC程序,使用它前,需要映射好端口,通过rpcbind 设定:
sudo service rpcbind restart restart
2.6-重启nfs服务:
sudo service restartnfs-kernel-server restart
2.7 刷新配置
启动之后可以通过status来查看状态,如果下次修改了配置,可以重启服务来使配置生效,也可以直接执行如下命令刷新配置:
exportfs -a
2.8挂载指令
在任意一台服务器中执行挂载指令,则可以将指定ip服务器上的共享路径,挂载到本地。挂载成功后可在客户机nfs-client路径下查看nfs中文件。
sudo mount -t nfs ***.***.***.***:/opt/studyarm/rootfs /nfs-client/ //红色为nfs服务器主机地址,绿色是主机共享文件夹绝对路径。蓝色为客户机上挂载点文件夹绝对路径。
三、uboot 引导参数配置
内核启动时需要根据内核传入的配置参数来决定从哪里加载根文件系统,需要在include/configs/mini2440.h中更改配置参数。配置参数如下所示。
#define CONFIG_BOOTARGS "noinitrd root=/dev/nfs rw nfsroot=192.168.1.187:/opt/studyarm/rootfs init=/linuxrc console=ttySAC0 " \
"ip=192.168.1.69:192.168.1.1:192.168.1.1:255.255.255.0:"
四、内核中开启nfs编译选项
需要将nfs以及nfsroot编译进内核镜像文件。根据如下步骤操作即可。Linux内核版本为2.6.32.2,友善之臂提供。
五、镜像烧录与内核启动
5.1 烧录uboot
使用友善之臂提供烧录工具烧录uboot。使用norflash启动方式,启动后在终端输入v升级boot,使用super vivi选择uboot镜像并烧录。
5.2 烧录内核
需要重新编译uboot能识别的uimage镜像,可从网上参考内核镜像制作方法。使用友善之臂提供烧录工具烧录内核。使用norflash启动方式,启动后在终端输入k升级kernel,使用super vivi选择kernel镜像并烧录。
5.3 网络环境检测与启动内核
uboot启动后进入命令模式,通过ping Ubuntu主机方式确定网络是否正常。出现红色方框提示表示网络正常。然后输入boot命令,直接启动内核。