濮阳公司建站,淮北城市住建网,安徽住建和城乡建设厅官网,柯桥网站建设Uboot版本#xff1a;u-boot-2013.01 开发板#xff1a;Exynos4412 本文主要是熟悉U-boot 的使用以及如何将Uboot 烧入Exynos4412。当然在这之前首先必须保证开发板上已经有了U-boot。如果没有#xff0c;请先烧入一个已经编译好的Uboot.bin#xff0c;可以利用JTAG或DNW。… 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 consolettySAC2,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 ipaddr192.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]如是内存地址则从地址处加载文件系统