Uboot版本:u-boot-2013.01
开发板:Exynos4412
本文主要是熟悉U-boot 的使用以及如何将Uboot 烧入Exynos4412。当然在这之前首先必须保证开发板上已经有了U-boot。如果没有,请先烧入一个已经编译好的Uboot.bin,可以利用JTAG或DNW。
一、环境搭建
为了方便开发,这里利用网络传输数据,主要用到 tftp 与 nfs。tftp用于数据传输,nfs用于挂载根文件系统。
1、tftp模式设置
具体配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50319877,这里使用tftp有两种模式:a、交互模式(手动)b、自动模式。
a -- 交互模式
在Uboot界面输入以下命令:
tftp 41000000 uImage // 将tftp主机端uImage 拷贝到4412内存地址41000000处
tftp 42000000 exynos4412-fs4412.dtb
bootm 41000000 - 420000000
b-- 自动模式:
设置bootcmd,这样Uboot 加载成功后,会执行bootcmd命令,自动下载文件,并引导内核
setenv bootcmd tftp 41000000 uImage \; tftp 42000000 exynos4412-fs4412.dtb\; bootm 41000000 - 42000000
saveenv
bootcmd每条命令间要用到 '\' ,用于多条命令的输入。
2、通过NFS挂载根文件系统
1)配置nfs
a -- 下载
sudo apt-get install nfs-kernel-server
b -- 配置
sudo vi /etc/exports
在最后一行添加你的nfs共享目录
/nfsboot *(rw,sync,no_subtree_check) note:保证此目录已存在(权限:777)
c -- 重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
d -- 测试
第一种方法)showmount -e
第二种方法)自己挂载
mount -t nfs 127.0.0.1:/nfsboot /mnt/xxx
具体配置可以移步http://blog.csdn.net/zqixiao_09/article/details/50337933
2) 拷贝解压已制作好的根文件系统
cp xxx/rootfs.tar.xz /nfsboot
tar xvf rootfs.tar.xz
3) 设置开发板bootargs
setenv bootargs root=/dev/nfs nfsroot=虚拟机ip:/nfsboot/rootfs rw console=ttySAC2,115200 ip=开发板ip init=/linuxrc
saveenv
注:root=/dev/nfs 表示根文件系统在/dev/nfs 上;nfsroot=虚拟机ip:/nfsboot/rootfs 为虚拟机文件系统所在位置;init=/linuxrc 为开机后启动的第一个进程;
4) 测试
写程序在开发板运行
二、常用Uboot命令详解
1、环境设置命令
a -- 查看当前环境变量
printenv
b -- 增加环境变量
setenv
例: set ipaddr 192.168.1.1 ====>ipaddr=192.168.1.1
c -- 修改环境变量
setenv 变量名 值
d -- 删除环境变量
setenv 变量名
e--常用环境变量作用
ipaddr:设置开发平台ip
serverip:tftp服务器ip
netmask:子网掩码
gatewayip:网关
bootcmd:启动内核变量(自动启动时执行的命令)
bootargs:传输给内核的参数(到内核阶段,原环境变量已经不起作用)
bootdelay:设置交互延时
2、数据传输命令
a -- 网络
tftp 内存地址 文件名 (利用TFTP协议传输文件)
b -- 串口
loadb 内存地址 (利用Kermit 传输协议)
3、存储器访问命令
a -- 内存:
md 显示内存内容
格式:md 41000000
mm 修改内存值(地址自动加一)
格式:mm 41000000
以 . 结束
mm.w (2B) mm.l(4B,默认)
mw 用指定的数据填充内存
格式:mw 41000000 12345678 10
向0x41000000起始地址写0x10次 0x12345678
b-- 外存:
1) -- nand:
nand write 20008000 0 40000
nand read 20008000 0 40000
nand erase 0 40000
2) -- emmc:
movi write kernel 41000000
将内存41000000 数据写入到emmc的kernel分区
movi read kernel 41000000
将emmc的kernel分区中的内容载入到内存41000000地址
注:Exynos4412 用的外存都是emmc,没有nand flash、nor flash.
4、运行
a -- bootm
bootm指令是专门用于启动在SDRAM中用U-boot 的mkimage工具处理过的内存映像(将pc指针指向内存地址,还有其它操作)
b -- go
将pc指针指向内存地址
c -- boot
重启开发板
5、其它
run:运行指定环境变量的内容
help:查看所有命令
三、下载与烧写
1、产品模式:
产品模式指Uboot、Kernel、rootfs已经移植制作成功,可以烧入外存中直接使用.
下面主要是将uboot,kernel,dtb,rootfs烧写到emmc的方法,这里将uboot,kernel,dtb,rootfs加载到内存中的方法都是用的tftp,当然还有其他方法,nfs 、SD卡都可以
1) -- uboot 烧写:
a) -- emmc中已经存在uboot
通过网络 :
tftp 41000000 u-bootxxx.bin
movi write u 41000000
重启生效。
b) -- emmc为空
通过sd卡烧录:
一:开关拔到1000 (sd卡启动)
输入命令: sdfuse flashall
二:开关拔回到0110 (emmc启动)
重启生效
2)-- kernel及dtb烧写
通过网络 tftp 41000000 uImage
movi write k 41000000
通过网络 tftp 41000000 exynos4412-fs4412.dtb
movi write d 41000000
3) -- ramdisk烧写(rootfs的镜像)
通过网络 tftp 41000000 ramdisk.img
movi write r 41000000 300000
4) -- 设置启动参数bootcmd
setenv bootcmd movi read k 41000000\; movi read d 42000000\;movi read r 43000000 300000\; bootm 41000000 43000000 42000000
NOTE:bootm中间的数据如是'-',说明从nfs挂载[参考bootargs],如是内存地址,则从地址处加载文件系统