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

 

posted @ 2021-03-06 23:02  Hero_A  阅读(485)  评论(0编辑  收藏  举报