uboot编译平台环境:64位win8.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卡:SanDISK的SDCH卡(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这一行设备文件

 

 

运行如下命令:

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

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

完成后卸载/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/sdc。SD卡制作完成后也不需要umount(如下图,会显示/dev/sdc没有挂载),直接拔读卡器就可以了

 

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

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

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

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

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

    

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

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

  按任意键进入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


在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

配置:

配置完成后,编译和安装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”:

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

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

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

  1. 制作SD卡启动自己编译的uboot.bin

    README for FriendlyARM Tiny4412 ----------------------------------------------------- 1. Build uboot ...

  2. 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT

    [TINY4412]U-BOOT移植笔记:(9)SD卡启动U-BOOT 宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64 目标板[底板]: Tiny4412SDK - 1506 目标板 ...

  3. S5PV210体系结构与接口09:SD卡启动详解

    目录 1. MMC技术演进 1.1 NandFlash & NorFlash芯片 1.2 MMC卡 & SD卡 & MicroSD卡(TF卡) 1.2.1 代际关系 1.2.2 ...

  4. 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)

    嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...

  5. 第十一天: SD卡原理分析及SD卡启动详解

    主流的外存设备 内存和外存的区别: 一般是把这种(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器 ...

  6. 常见存储介质介绍以及SD卡启动系统方法

    主流的外存设备介绍 内存和外存的区别: 一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存: 把ROM(read only memory ...

  7. [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统

    转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...

  8. Exynos4412——SD卡启动

    实现Tiny4412从SD卡的启动内核与根文件系统. 前面启动开发板时,需要从SD卡启动Uboot,然后从DNW下载内核和根文件系统到RAM,或者NFS挂载根文件系统. Uboot应该是支持SD卡的, ...

  9. ARM芯片开发(S5PV210芯片)——SD卡启动

    1.SD卡启动 顾名思义就是启动代码存放在SD卡中,设备从SD卡中启动.用SD卡启动有一些好处:譬如可以在不借用专用烧录工具(类似Jlink)的情况下对SD卡进行刷机,然后刷机后的SD卡插入卡槽,So ...

最新文章

  1. 神经网络中参数量parameters和FLOPs计算
  2. HDOJ 1253 HDU 1253 胜利大逃亡 ACM 1253 IN HDU
  3. Hacking PostgreSQL
  4. Sublime text3 Emmet使用
  5. 动态给a标签赋值_怎样利用Excel制作抖音上的心形动态函数图像?
  6. wxWidgets:绘制自定义控件
  7. sas数据导入终极汇总-之一
  8. linux中常用的shell脚本,Linux常用shell脚本
  9. FPGA资源不足导致vivado生成bit失败
  10. turtlebot3 模型没有显示_Turtlebot3新手教程:Open-Manipulator机械臂
  11. 项目还有哪些优化的地方
  12. linux 怎么查看谁登过这台服务器,如何查看linux服务器是否被入侵
  13. 南琼考试系统APP服务器,南琼考试系统
  14. 服务器搬迁没有搭建文档,云服务器搬迁
  15. 合并报表编制采用的理论_合并报表的基本逻辑是什么?
  16. 淘宝新店刚开详情页到底需要怎么做
  17. 个人技术总结——Unity中角色动画制作及动画切换逻辑的实现
  18. 2020年下半年湖北软考报名通知
  19. EAX、ECX、EDX、EBX
  20. 别样肉客首次针对中国市场独家研发创新植物性猪肉糜产品

热门文章

  1. java能不能播放mp4_如何在Java Swing应用程序中播放MP4视频
  2. 【ML4CO论文精读】具有离散拆分送货和取货的车辆路径问题的禁忌搜索算法(Meng Qiu, 2018)
  3. GetMessage PeekMessage SendMessage PostMessage
  4. C语言函数大全--h开头的函数
  5. OpenGL光和材质
  6. Jetbrains系列软件高版本闪退问题解决
  7. 【计算机体系】LFU与LRU的区别
  8. 社区发现的3个评估指标:标准化互信息NMI,ARI指标,以及模块度(modularity)
  9. 《容忍与自由》读后感
  10. 最简单的树上染色问题(没有之一)