U-Boot

U-Boot

简介

Universal Boot Loader 通用引导加载程序

uboot是一个裸机代码,可以看作是一个裸机综合例程

uboot 官方的 U-Boot 源码 是给半导体厂商准备的 半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。

U-Boot 初次编译

进入要编译的uboot目录

/home/lk/linux/yz_uboot

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

编译结果:

LD      u-boot
OBJCOPY u-boot-nodtb.bin
OBJCOPY u-boot.srec
SYM     u-boot.sym
COPY    u-boot.bin
CFGS    board/freescale/mx6ullevk/imximage-ddr512.cfg.cfgtmp
MKIMAGE u-boot.imx

其中 u-boot.bin 就是编译出来的 uboot二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行 u-boot.imx 文件就是添加头部以后的 u-boot.bin, u-boot.imx 就是我们最终要烧写到开发板中的 uboot 镜像文件 。

烧进开发板启动之后
在这里插入图片描述

第一行有编译时间

U-Boot 命令使用

  • reset //重启uboot

  • help //列出当前uboot所有支持的命令

  • help 命令 //查看指定命令的帮助

  • bootm //用于启动内核

    • 用法: bootm 0x42000000 //从内存地址0x42000000启动内核, 启动前需把内核镜像uImage存放到指定的内存地址
  • printenv //打印所有环境变量的值

  • printenv 环境变量名 //查看指定的环境变量值

    • 常用环境变量:
      • bootdelay // uboot启动后, 倒计时多少秒后自动执行环境变量bootcmd的语句
      • bootcmd // 倒计时到0后,自动执行里面的语句
      • bootargs // 是用于提供给内核的启动参数语句
  • run //执行指定的环境变量里的语句

    • 用法:
      • run bootcmd //执行环境变量bootcmd里的语句
  • setenv //设置/修改/删除环境变量的值

    • 用法:
      • setenv 环境变量名 //删除指定的环境变量
      • setenv myargs "hello" //设置环境变量myargs=hello, 如果环境变量没有会创建出来,如果已存则会修改它的值
  • saveenv //保存环境变量,环境变量修改过后必须执行此命令才可以保存起来,否则重启后环境变量就恢复了.

  • loady //用于从uart线下载文件到板上内存里(loadb, loads, loadx基本一样)

    • 用法:
      • loady 0x40008000 //把下载的文件从内存地址0x40008000开始存放
  • md 内存地址 //用于查看内存地址上的值

    • 用法:

      • md.b    0x40008000 100 //从内存地址0x40008000开始,查看0x100个8位值并输出值

      • md.w 0x40008000 100 //从内存地址0x40008000开始,查看0x100个16位值并输出值

      • md.l 0x40008000 100 //从内存地址0x40008000开始,查看0x100个32位值并输出值

        b:8位
        w:16位
        l:32位(默认值)

  • mw //用于修改内存地址上的值

    • 用法:
      • mw.b    0x40008000 0xab 100 //从内存地址0x40008000开始的0x100字节空间,设值为0xab
      • mw.w 0x40008000 0xabcd 100 //从内存地址0x40008000开始的0x200字节空间,每16位值设为0xabcd
      • mw.l 0x40008000 0xabcdef88 100 //从内存地址0x40008000开始的0x400字节空间,每32位值设为0xabcdef88
  • go //执行指定内存地址上的指令

    • 用法:
      • go 0x40008000
  • mmc // sd/mmc接口设备(sd卡, emmc)操作命令, 按扇区操作(每扇区512字节)

    • 用法:
      • mmc read addr blk cnt //从mmc设备上的第blk个扇区开始,共读出cnt个扇区到内存地址addr上
      • mmc write addr blk cnt //把内存地址addr上的数据写入mmc设备的第blk个扇区,共cnt个扇区大小
      • mmc dev //用于当看当前的mmc设备是第几个
      • mmc erase blk cnt //把mmc设备的第blk个扇区开始清零,共清除cnt个扇区大小
      • mmc part //列出当前mmc设备的分区信息
      • mmc list //列出所有的mmc设备信息
  • ext4ls //查看存储设备的ext2/3/4分区里的内容

    • 用法:
      • ext4ls mmc 0:2 //查看第0个存储设备的第二个分区
  • ext4load //从ext2/3/4分区里读出文件到指定的内存地址

    • 用法:
      • ext4load mmc 0:2 0x40008000 /uImage //从第0个存储设备的第2个分区的根目录读出uImage文件到内存地址0x40008000
  • fatls //查看存储设备的fat分区里的内容

    • 用法:
      • fatls mmc 0:1 //查看第0个存储设备的第1个分区(fat分区)
  • fatload //从fat分区里读出文件到指定的内存地址

    • 用法:
      • fatload mmc 0:1 0x40008000 /uImage //从第0个存储设备的第1个分区的根目录读出uImage文件到内存地址0x40008000
  • fatwrite //把内存上的数据存储到fat分区的一个文件里

    • 用法:
      • fatwrite mmc 0:1 0x40008000 /my.txt 0x35 //把内存地址0x40008000开始的0x35个字节数据写入到第0个设备的第1个分区里,文件名为my.txt

//如uboot上已驱动好网络设备并环境变设好IP及PC端IP,还可以使用以下命令:

tftpboot 0x40008000 文件名 // 通过网络下载文件到内存地址0x40008000, PC端需配置好tftp服务器

nfs 0x40008000 pc端IP:/带路径的文件名 //pc端需配置好nfs服务器

ping ip //检测网络是否通

例子:

网络相关环境变量设置

setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.253
saveenv

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

和 NFS 一样, TFTP 也需要一个文件夹来存放文件,在用户目录下新建一个目录,命令如下:

mkdir /home/lk/linux/tftpboot
chmod 777 /home/lk/linux/tftpboot

我们要给 tftpboot 文件夹权限,否则的话 uboot 不能从tftpboot 文件夹里面下载文件。

最后配置 tftp,安装完成以后新建文件/etc/xinetd.d/tftp, 如果没有/etc/xinetd.d 目录的话自行创建, 然后在里面输入如下内容:

server tftp
{
 socket_type = dgram
 protocol = udp
 wait = yes
 user = root
 server = /usr/sbin/in.tftpd
 server_args = -s /home/lk/linux/tftpboot/
 disable = no
 per_source = 11
 cps = 100 2
 flags = IPv4
}

sudo service tftpd-hpa start

打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容 :

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/lk/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

sudo service tftpd-hpa restart

将 zImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 zImage 相应的权限,命令如下:

cp zImage /home/lk/linux/tftpboot/
cd /home/lk/linux/tftpboot/
chmod 777 zImage

板子端uboot命令:

//tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

tftp 80800000 zImage

tftp 命令 不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可

下载到开发板 DRAM 的 0X80800000 地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值