SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统

uboot编译平台环境:64win8.1的虚拟机vmware10下的ubuntu-12.04.5-64bit

交叉编译工具链为:  arm-linux-gcc-4.5.1

uboot压缩包:            uboot_tiny4412-20130729.tgz

linux压缩包:              linux-3.5-20131028.tgz

busybox压缩包:       busybox-1.17.2-20101120.tgz


一、Build uboot

配置并且编译出uboot.bin

解压:

book@book-virtual-machine:/work/tiny4412$ tar -xzf uboot_tiny4412-20130729.tgz

进入解压出来的uboot_tiny4412文件夹:

book@book-virtual-machine:/work/tiny4412$ cd uboot_tiny4412

配置tiny4412config
book@book-virtual-machine:/work/tiny4412/uboot_tiny4412$ make tiny4412_config

编译:

book@book-virtual-machine:/work/tiny4412/uboot_tiny4412$ make

编译生bl2的工具

进入sd_fuse文件夹:

book@book-virtual-machine:/work/tiny4412/uboot_tiny4412$ cd sd_fuse/

编译:

book@book-virtual-machine:/work/tiny4412/uboot_tiny4412/sd_fuse$ make

make成功会出现以下红框内的两行

 

 

二、制作SD卡用来启动uboot

使用的SD卡:SanDISKSDCH卡(8G

注:制作SD卡时,SD卡里原有的数据会被损坏,如果SD卡里面包含需要的文件,需要先备份

1)SD卡分区与格式化

    下载mkcard.sh脚本,并将其拷贝到/usr/local/bin目录下,使它可以在其它目录里使用;

mkcard.sh脚本下载地址:

http://download.csdn.net/detail/q1302182594/9621827

    对SD卡进行分区和格式化,具体可以参考这篇博客《OMAPL138开发板SD系统启动卡制作方法》,完成后会生成boot和rootfs两个分区;

博客地址是:

http://blog.csdn.net/u012091895/article/details/11584869

2)将uboot烧写到SD卡

使用的SD卡被USB识别为/dev/sdc

如何让linux识别到SD卡:

SD卡放入读卡器,将读卡器插入PC前,将虚拟机ubuntu放在窗口最前面,并将鼠标放在窗口上,插入U盘。U盘正确识别后,会出现/dev/sdc这一行设备文件

 SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第1张图片

 

运行如下命令:

book@book-virtual-machine:/work/tiny4412/uboot_tiny4412/sd_fuse/tiny4412$ sudo ./sd_fusing.sh /dev/sdc

SD卡制作好后出现的界面:

 SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第2张图片

完成后卸载/dev/sdc

book@book-virtual-machine:/work/tiny4412/uboot_tiny4412/sd_fuse/tiny4412$umount /dev/sdc

注:如果使用df命令没有查看到/dev/sdc,可以使用”ls /dev/sd*”命令查看没有,如果存在则说明没有挂载。没有挂载也可以正常制作SD卡的,只要使用”ls /dev/sd*”命令查看到/dev/sdcSD卡制作完成后也不需要umount(如下图,会显示/dev/sdc没有挂载),直接拔读卡器就可以了

 


1)卸将已经制作好的SD卡插到Tiny4412板子上,拨动S2切换到SDBOOT,同时连接串口线到PC 

Ps:我的板子有两个九针串口,只有连在靠近电源的那个串口才可以正常打印信息

如何查看打印的信息来判断板子是否正常被启动?

答:通过linux下的minicom,具体的安装和使用参看下面的链接:

http://blog.csdn.net/zy799894671/article/details/16846817

    

2)开发板上电,然后在串口控制台(minicom)查看打印信息如下:

 SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第3张图片

出现错误是因为没有烧写内核进去,暂时不管。

  按任意键进入uboot命令行模式,出现”TINY4412 #”


三、使用SD卡启动linux系统

book@book-virtual-machine:/work/tiny4412/contex-a9$tar zxvf linux-3.5-20131028.tgz

book@book-virtual-machine:/work/tiny4412/contex-a9$cd linux-3.5/

book@book-virtual-machine:/work/tiny4412/contex-a9/linux-3.5$ cp tiny4412_linux_defconfig  .config

book@book-virtual-machine:/work/tiny4412/contex-a9/linux-3.5$make


最后出现下面两行则表示编译成功:

OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready

SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第4张图片

book@book-virtual-machine:/work/tiny4412/linux-3.5/arch/arm/boot目录下生成zImage这个镜像文件



内核拷贝到SD卡

book@book-virtual-machine:/work/tiny4412/contex-a9/linux-3.5$ cp arch/arm/boot/zImage    /media/boot


四、设置NFS服务

1)在ubuntu12.04上安装NFS Server

book@book-virtual-machine:/work/nfs_root$ sudo apt-get install portmap

book@book-virtual-machine:/work/nfs_root$ sudo apt-get install nfs-kernel-server

book@book-virtual-machine:/work/nfs_root$ sudo apt-get install nfs-common

2)修改/etc/exports文件

book@book-virtual-machine:/work/nfs_root$ sudo vi /etc/exports

在文件的末尾添加这一句:

/work/nfs_root  *(rw,sync,no_root_squash,no_subtree_check)

格式说明:

*:允许所有的网段访问,也可以使用具体的IP

rw:挂接此目录的客户端对该共享目录具有读写权限

sync:资料同步写入内存和硬盘

no_root_squash:root用户具有对根目录的完全管理访问权限。

no_subtree_check:不检查父目录的权限。

注意,*和后面的括号不能出现空格。

然后保存退出。


3)重启NFS服务

book@book-virtual-machine:/work/nfs_root$ sudo /etc/init.d/portmap restart

book@book-virtual-machine:/work/nfs_root$ sudo /etc/init.d/nfs-kernel-server restart


4)测试NFS服务是否成功

把本地的文件夹挂载到mnt上

book@book-virtual-machine:/work/nfs_root$ sudo mount -t nfs localhost:/work/nfs_root /mnt

在nfs_root文件目录下创建一个新的文件“hello”,在mnt文件目录下可查看到“hello”,说明挂载成功

取消挂载

book@book-virtual-machine:/work/nfs_root$ sudo umount /mnt

NFS服务设置完成


五、安装busybox

book@book-virtual-machine:/work/nfs_root$ mkdir filesystem

book@book-virtual-machine:/work$ tar -xzvf busybox-1.17.2-20101120.tgz

book@book-virtual-machine:/work$ cd busybox-1.17.2/

book@book-virtual-machine:/work/busybox-1.17.2$ make menuconfig

配置:

SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第5张图片SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第6张图片SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第7张图片SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第8张图片SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第9张图片

配置完成后,编译和安装busybox:

book@book-virtual-machine:/work/busybox-1.17.2$ make

book@book-virtual-machine:/work/busybox-1.17.2$ make install

成功安装后会在/work/nfs_root/filesystem下生成一下四个文件:

bin

linuxrc

sbin 

usr

检测busybox是否成功

book@book-virtual-machine:/work/nfs_root/filesystem$ file bin/busybox

bin/busybox: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped

上面显示ARM平台运行,说明安装成功


六、制作根文件系统

book@book-virtual-machine:/work/nfs_root/filesystem$ mkdir   etc dev opt sys tmp mnt lib proc

book@book-virtual-machine:/work/nfs_root/filesystem$ mkdir  etc/init.d

book@book-virtual-machine:/work/nfs_root/filesystem$ vi  etc/init.d/rcS

在rcS里添加如下内容:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/mount -a # 挂载fstab文件中所有指定的文件系统
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s                #  在/dev目录下建立必须的设备节点
/bin/hostname -F /etc/sysconfig/HOSTNAME #设置主机的名字

保存退出


book@book-virtual-machine:/work/nfs_root/filesystem$vi etc/inittab 

在inittab里添加如下内容:

::sysinit:/etc/init.d/rcS# 设置内核的热插拔,有mdev接收来自内核的消息并做出响应
ttySAC0::askfirst:-/bin/sh     # 在串口启动一个登陆会话
:ctrlaltdel:/bin/umount -a -r# 作为init重启执行程序
::showdown:/bin/mount -a -r# 告诉init在关机时运行umount命令卸载所有文件系统,

   如果卸载失败,以只读方式重新挂载

保存退出


book@book-virtual-machine:/work/nfs_root/filesystem$vi etc/fstab 

在fstab里添加如下内容:

proc       /proc    proc       defaults        0       0
sysfs      /sys      sysfs      defaults        0       0
tmpfs     /tmp      tmpfs     defaults        0       0

保存退出

注意:

第一列是挂载设备  

第二列是挂载目录

第三列是挂载文件系统类型

第四列是挂载选项

book@book-virtual-machine:/work/nfs_root/filesystem$ vi etc/profile 

在profile里添加如下内容:

#/etc/profile:system-wide .profile file for the Bourne shells
#!/bin/sh
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1

USER="id -un"
LOGNAME=$USER
PS1='[root@tiny4412]#'
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH

保存退出


book@book-virtual-machine:/work/nfs_root/filesystem$ sudo chmod +x rcS//rcS添加权限,让其可执行

创建设备文件:

book@book-virtual-machine:/work/nfs_root/filesystem$ sudo mknod /dev/console c 5 1


完善动态链接库:

(1)我们在busybox设置的是动态链接库,而且编译器是arm-linux-gcc,找到安装arm-linux-gcc的安装路径

book@book-virtual-machine:/work/nfs_root/filesystem$ which arm-linux-gcc

/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc

上面是我的路径,/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib,这个就是要复制出来的动态库的路径,把里面的动态链接文件复制到filesystem文件夹下

(2)复制动态链接文件

book@book-virtual-machine:/work/nfs_root/filesystem$ cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/*  ./lib   -r

简单小结一下:

1.      inittab,rcS,fstab关系

系统启动挂载文件系统--->

--->读取/etc/inittab文件,解析其中定义的动作

--->根据sysinit定义的process执行/etc/init.d/rcS

--->/etc/init.d/rcS中第一条命令 mount -a

--->读取/etc/fstab文件

--->根据文件列表内容逐个挂载其中的设备到指定地

2.profile文件

设置环境变量,根据这里设置命令提示符号相关的环境变量

用户可以根据自己需要添加环境变量

3./etc/init.d/rcS

执行系统初始化时候,想开机启动的程序都可以写在这个文件中


七、在uboot中设置参数和启动命令

TINY4412# set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.123:/work/nfs_root/filesystem ip=192.168.1.17:192.168.1.123:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0

格式说明:bootargs noinitrd root=/dev/nfs nfsroot=虚拟机linux系统ip:根文件系统绝对路径 ip=开发板ip:虚拟机linux系统ip:网关:子网掩码::开发板的网卡设备名(一般是eth0,不是虚拟机):off   init=/linuxrc console=ttySAC0

TINY4412# set bootcmd fatload mmc 0:1 0x40008000 zImage;bootm 0x40008000

TINY4412# save


八、挂载根文件系统

1)虚拟机、PC、开发板三者互ping成功(三者必须处于同一网段,如192.168.1.xxx)

2)启动开发板

linux系统成功启动,出现“Please press Enter to activate this console”:

SD卡启动tiny4412标准版(1306)的linux系统并挂载网络根文件系统_第10张图片

网络根文件系统挂载成功:



到这里,从启动uboot,引导linux内核,到挂载网络根文件系统,整个开发环境的搭建就成功了!

你可能感兴趣的:(linux系统开发环境搭建)