1.0 Uboot介绍及调试

本博客主要对学习嵌入式Linux进行总结,学习视频参考正点原子。开发板使用Imx6ull芯片。

1. 什么是Uboot

1 Uboot是一个裸机程序,比较复杂。
2 Uboot就是一个bootloader,最终目的是启动系统(linux)。
  主要工作是初始化DDR,将Linux系统镜像(zImage.uImage)、设备树(dtb)文件从SD、EMMC、Nand、Spi Flash等搬移到DDR中运行。
3 Uboot是一个通用Bootloader,支持多种系统。

2. Uboot获取

1.从uboot官网获取,缺点支持少,某一款具体芯片驱动不完善
2.从SOC厂商获取,该厂商从Uboot官网下载某版本并修改该版本加入响应的SOC以及驱动,这就是SOC厂商定制的Uboot,SOC厂商会提供评估板。
3.从开发板厂商获取,驱动有所不同,开发板厂商也是依赖SOC厂商做的评估板。

3. Uboot编译

编译uboot后生成u-boot.bin文件,但还需要用相应软件添加头部信息,最终生成u-boot.imx

1.清理工程

make distclean

2.配置文件

make mx6ull_mynand_defconfig

3.向顶层makefile中添加(大约252行)

ARCH ?= arm #arm架构
CROSS_COMPILE ?= arm-linux-gnueabihf- #配置编译器

4.编译

make -j4

4. Uboot输出信息

在这里插入图片描述

5.Uboot相关命令

5.1 Uboot调试命令

1. help ? 命令名 :查看某一个命令帮助信息,
2. bdinfo :查看板子信息
3. printenv :查看当前板子的环境变量
4. setenv :设置环境变量以及删除环境变量
5. saveenv : 保存环境变量

5.2 内存命令(Uboot中的数字都是十六进制)

.b为byte(1字节).w为word(2字节).l为long(4字节)
1.md命令:md[.b,.w,.l] address (md.b 80000000 14) #显示内存值
2.nm命令:nm[.b,.w,.l] address (nm.l 80000000) #修改指定地址的内存值,不会自增
3.mm命令:mm[.b,.w,.l] address (mm.l 80000000) #修改指定地址的内存值,会自增
4.cp命令:cp[.b,.w,.l] source target count (cp.l 80000000 80000100 10) #将DDR中一段内存拷贝到另一段中
5.cmp命令:cmp[.b,.w,.l] addr1 addr2 count (cmp.l 80000000 80000100 10) #比较DDR中的一段内存与另一段内存进行比较

5.3 网络命令

1.设置MAC地址:setenv ethaddr 00:04:9f:04:d2:35
2.设置IP地址:setenv ipaddr 192.168.1.50 
3.设置网关地址:setenv gatewayip 192.168.1.1
4.设置子网掩码:setenv netmask 255.255.255.0
5.设置服务器IP:setenv serverip 192.168.1.66

5.4 EMMC操作

1.查看设备信息:mmc info
2.列出含有的EMMC设备:mmc rescan / mmc list
3.切换设备:mmc dev 0
4.查看当前设备分区: mmc  part
5.切换入设备中的分区:mmc dev 1 0
6.读取设备分区中的内存:mmc read 80800000 600 10
7.写入设备升级:mmc write 80800000 2 32e

5.5 根文件系统操作(SD卡文件系统)

FAT格式文件系统:对于I.MX6U芯片,SD/EMMC分为三个分区
第一分区:存放Uboot文件
第二分区:存放linux的zImage(镜像)和dtb(设备树)文件
第三分区:存放根文件系统(EXT4)
1.fatinfo(fatinfo mmc 1:1) #查询设备下对应分区信息
2.fatls(fatls mmc 1:1) #查询fat格式设备的目录和文件信息
3.fstype(fstype mmc 1:0) #查询设备分区的文件系统格式
4.fatload (fatload mmc 1:1 80800000 zImage) #将指定的文件读取到DDR中

5.6 NAND操作

1.nand info:打印Nand Flash信息
2.nand device:切换设备
3.nand erase:擦除Nand flash
4.nand write:往Nand的指定地址写入指定的数据
5.nand read:从Nand的指定地址读出指定大小数据到DDR中

6. Boot指令

6.1 从网络启动linux

1.使用tftp命令将zImage下载到DDR的0x800000地址处
		tftp 80800000 zImage
2.将设备树imx6ull_mynand.dtb下载到DDR的0x83000000
		tftp 83000000 imx6ull_mynand.dtb
3.bootz启动linux内核
		bootz 80800000 - 83000000

6.2 EMMC中启动linux

1.使用fatload命令将zImage下载到DDR的80800000
		fatload mmc 1:1 80800000 zImage
2.使用fatload命令将设备树下载到DDR的83000000
		fatload mmc 1:1 83000000 imx6ull_mynand.dtb
3.bootz启动linux内核
		bootz 80800000 - 83000000

6.3 设置bootcmd环境变量进行启动linux

1.设置环境变量
	setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull_mynand.dtb; bootz 80800000 - 83000000'
2.保存环境变量
	saveenv
3.启动linux
	boot
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值