您的位置:首页 > 其它

Exynos4412 Uboot 的使用与烧写

2016-03-03 19:12 302 查看
Uboot版本:u-boot-2013.01

开发板:Exynos4412

本文主要是熟悉U-boot 的使用以及如何将Uboot 烧入Exynos4412。当然在这之前首先必须保证开发板上已经有了U-boot。如果没有,请先烧入一个已经编译好的Uboot.bin,可以利用JTAG或DNW。

一、环境搭建

为了方便开发,这里利用网络传输数据,主要用到 tftp 与 nfs。tftp用于数据传输,nfs用于挂载根文件系统。

1、tftp模式设置

具体配置可以移步/article/7694397.html,这里使用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

具体配置可以移步/article/7694400.html

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],如是内存地址,则从地址处加载文件系统
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: