uboot(基于IMX6ull)
一、U-Boot初次编译
1、首先在 Ubuntu 中安装 ncurses 库,否则编译会报错,安装命令如下:sudo apt-get install libncurses5-dev
2、解压官方Uboot:tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2
3、编写编译脚本文件:xxx.sh
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- (加空格)
mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
mx6ull_14x14_ddr512_emmc_defconfig是配置文件,在Uboot中,通过“make xxx_defconfig”来配置 uboot,xxx_defconfig 就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。-j12用于设置主机使用多线程编译,VMware里面给虚拟机分配了4个核,那么就使用-j4,这样4个核都会一起编译。
4、运行脚本文件编译uboot:./xxx.sh
5、Uboot的烧写:从SD卡启动
chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可 ./imxdownload u-boot.bin /dev/sdb
二、U-Boot命令使用
1、进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令。
2、信息查询命令:bdinfo、printenv、version
bdinfo:查看板子信息
printenv:打印环境变量信息
version: 查看Uboot版本号
3、环境变量操作命令
a、 修改环境变量setenv
①、setenv+环境变量+值 -> setenv bootdelay 5
②、对带有空格的环境变量,比如:bootcmd,bootargs等,这时候环境变量值要用单引号括起来。
-> setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
b、新建环境变量setenv用法与修改环境变量一样 -> setenv author 123
c、删除环境变量setenv,给环境变量赋值为空即删除
d、保存环境变量saveenv,每次修改环境变量都要用saveenv保存,否则再次重启时会被清除。
4、内存操作命令
内存操作命令就是用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、
mm、mw、cp 和 cmp。
a、md命令用于显示内存值:格式md[.b, .w, .l] address [# of objects]
命令中的[.b .w .l]对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值。address 就是要查看的内存起始地址,[# of objects]表示要查看的数据长度,这个数据长度单位不是字节,而是跟你所选择的显示格式有关。uboot 命令中的数字都是十六进制的!不是十进制的!
md.b 80000000 10 //16*1=16个字节 md.w 80000000 10 //16*2=32个字节 md.l 80000000 10 //16*4=64个字节
b、nm命令用于修改指定地址的内存值:格式nm [.b, .w, .l] address
c、mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令 nm 的话地址不会自增。
格式:mm [.b, .w, .l] address
d、mw命令用于使用一个指定的数据填充一段内存:格式mw [.b, .w, .l] address value [count]
e、cp命令,数据拷贝,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 NorFlash 中的数据拷贝到 DRAM 中。
格式:cp [.b, .w, .l] source target count
f、cmp比较命令,用于比较两段内存的数据是否相等:格式cmp [.b, .w, .l] addr1 addr2 count
5、网络操作命令
ping、dhcp、nfs、tftpboot
首先需要配置相关的网络环境
setenv ipaddr 192.168.1.50 setenv ethaddr 00:04:9f:04:d2:35 setenv gatewayip 192.168.1.1 setenv netmask 255.255.255.0 setenv serverip 192.168.1.250 saveenv
a、ping命令:ping+ip
b、dhcp命令:从路由器获取 IP 地址,前提得开发连接到路由器上的,如果开发板是和电脑直连的,那么 dhcp 命令就会失效。
c、nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。
命令格式:nfs [loadAddress] [[hostIPaddr:]bootfilename]-> nfs 80800000192.168.1.112:/home/dht/linux/nfs/zImage
loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。
d、tftp命令:tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器,需要安装 tftp-hpa 和 tftpd-hpa。
sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd