当前位置: 首页 > news >正文

20.UBOOT

20.UBOOT

uboot作为bootloader的一种,负责初始化DDR等外设、将linux内核从flash中拷贝到ddr中、启动linux内核

1、配置和编译uboot

将厂商提供的uboot进行解压

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz

使用如下命令进行配置uboot以及编译

方法一:
make ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- -j12

先清除一下工程,再make 一下mx6ull_14x14_ddr512_emmc_defconfig为解压出来的配置文件

方法二:

使用sh脚本将上述指令编写到脚本中

创建mx6ull_alientek_emmc.sh

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-guneabihf- -j12

chmod授权后执行即可,执行命令

./mx6ull_alientek_emmc.sh
方法三:

在解压出来的顶层Makefile中定义全局变量,大概在247行endif后面添加如下内容:

endif
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabihf-

arm-linux-gnueabihf-后面不能有空格

接着直接使用make命令即可。

按照上面方法编译之后,会在当前文件夹下多出来几个重要的文件

u-boot.bin 二进制的编译后的程序,需要加上头部信息变成了下面的imx文件

头部信息文件在/uboot/board/freescale/mx6ullevk/imximage.cfg文件中,包括DDR的初始化

u-boot.cfg 前面生成了配置文件

u-boot.imx 可以直接烧写的imx文件。

烧写

方式一:

将之前的烧写工具imxdownload工具拷贝到当前目录下

使用下面命令烧写到sd卡中

./imxdownload u-boot.imx /dev/sdb

插入板子后sd卡启动即可将刚编译的uboot烧写到板子中,且只有uboot程序,无设备树、linux内核等程序。

方式二:

使用正点原子的mfgtool,将编译出来的u-boot.imx重命名为u-boot-imx6ull-14x14-emmc.imx替换\mfgtool\Profiles\Linux\OS Firmware\firmware下的同名文件

将编译出来的u-boot.imx再重命名为u-boot-imx6ull-14x14-ddr512-emmc.imx替换掉\mfgtool\Profiles\Linux\OS Firmware\files\boot的同名文件

最后启动方式为OTG、链接OTG线、启动板子、打开Mfgtool2-eMMC-ddr512-eMMC.vbs进行识别到设备后点击start烧写,done之后再stop,exit即可重启板子即可,

总结:烧写时间长,原因是不止烧写了uboot还有设备树、linux内核等程序。因此采用单独烧写uboot的sd方式来进行后续学习。

u-boot命令使用

在启动板子的3m内,在串口中任意键盘输入,会进入到u-boot命令行模式,可以使用uboot命令行来执行相关的命令;3s内没有输入,则uboot会以默认参数来启动linux内核。

uboot中的命令可以配置、需要使用什么命令使能即可。学习默认支持的命令

uboot也支持自动补全tab

help  		//查看所有命令的帮助
?     		//同上
help cmd 	//查看某个命令的使用方式
? cmd 		//同上//信息查询命令
bdinfo		//查看板子信息如ddr大小、启动参数保存地址、波特率、sp起始地址等信息
printenv	//输出环境配置,环境配置是以字符串的形式保存,可以改变环境配置
version		//查看uboot的版本号//环境变量的操作//修改和新建
setenv [变量名] [值]	//修改环境变量
setenv bootdelay 5		//修改进入uboot倒计时
setenv author YL		//不存在环境变量值,会直接新建一个
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'saveenv					//保存环境变量//删除环境变量
setenv author			//给一个空值即删除该环境变量//内存操作//读取指定的地址值
md[.b, .w, .l] address [# of objects]uboot 命令中的数字都是十六进制的!不是十进制的!
=> md.b 80000000 10
80000000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
=> md.w 80000000 10
80000000: ffff ffff ffff ffff ffff ffff ffff ffff    ................
80000010: ffff ffff ffff ffff ffff ffff ffff ffff    ................
=> md.l 80000000 10
80000000: ffffffff ffffffff ffffffff ffffffff    ................
80000010: ffffffff ffffffff ffffffff ffffffff    ................
80000020: ffffffff ffffffff ffffffff ffffffff    ................
80000030: ffffffff ffffffff ffffffff ffffffff    ................//修改指定地址的内存值
nm [.b, .w, .l] address=> nm.l 80000000 
80000000: ffffffff ? 12345678
80000000: 12345678 ? q
=> md.l 80000000 1
80000000: 12345678                               xV4.//连续修改指定地址的内存值
mm [.b, .w, .l] address=> mm.l 80000000
80000000: 12345678 ? 87654321
80000004: ffffffff ? 12345678
80000008: ffffffff ? q
=> md.l 80000000 3
80000000: 87654321 12345678 ffffffff             !Ce.xV4.....//使用一个指定的数据填充一段内存
mw [.b, .w, .l] address value [count]
=> mw.l 80000000 0A0A0A0A 10
=> md.l 80000000 10         
80000000: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000010: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000020: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000030: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................//数据拷贝命令用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor
Flash 中的数据拷贝到 DRAM 中。
cp [.b, .w, .l] source target count=> cp.l 80000000 80000100 10
=> md.l 80000000 10
80000000: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000010: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000020: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000030: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
=> md.l 80000100 10
80000100: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000110: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000120: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................
80000130: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    ................//比较命令,用于比较两段内存的数据是否相等
cmp [.b, .w, .l] addr1 addr2 count
cmp.l 80000000 80000100 10=> cmp 80000000 80000100 10
word at 0x00000000 (0xe59ff01c) != word at 0x80000100 (0xa0a0a0a)
Total of 0 word(s) were the same
=> cmp.l 80000000 80000100 10
Total of 16 word(s) were the same
=> nm.l 80000100  
80000100: 0a0a0a0a ? B0b0b0b0
80000100: b0b0b0b0 ? q
=> cmp.l 80000000 80000100 10
word at 0x80000000 (0xa0a0a0a) != word at 0x80000100 (0xb0b0b0b0)
Total of 0 word(s) were the same
=> mm.l 80000100             
80000100: b0b0b0b0 ? 0a0a0a0a
80000104: 0a0a0a0a ? 10101010
80000108: 0a0a0a0a ? q
=> cmp.l 80000000 80000100 10
word at 0x80000004 (0xa0a0a0a) != word at 0x80000104 (0x10101010)
Total of 1 word(s) were the same

网络相关

网络环境要求较高,后续在来实现

//网络操作命令//手动设置网络
=> 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
Saving Environment to MMC...
Writing to MMC(0)... done//自动配置网络
=> dhcp
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
BOOTP broadcast 5
DHCP client bound to address 192.168.1.137 (7962 ms)
***Warning: no boot file name; using 'COA80189.img'
Using FEC1 device
TFTP from server 192.168.1.1;0ur IP address is 192.168.1.137
Filename 'C0A80189.img'.
Load address: Ox80800000
Loading: T T T T
//开发板通过 dhcp 获取到的 IP 地址为 192.168.1.137。同时可以看到“warning: no boot file name;”、“TFTP from server 192.168.1.1”这样的字样。
这是因为 DHCP 不单单是获取 IP 地址,其还会通过 TFTP 来启动 linux 内核

BOOT 操作命令

uboot 的本质工作是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有: bootz、 bootm 和 boot。

1、 bootz 命令

bootz 命令用于启动 zImage 镜像文件

bootz [addr [initrd[:size]] [fdt]]

命令 bootz 有三个参数, addr 是 Linux 镜像文件在 DRAM 中的位置, initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可, fdt 就是设备树文件在 DRAM 中的地址。

使用 tftp 命令将zImage 下载到DRAM的0X80800000地址处,然后将设备树imx6ull-14x14-emmc-7-1024x600- c.dtb 下载到 DRAM 中的 0X83000000 地址处,最后之后命令 bootz 启动,

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000

2、 bootm 命令

http://www.dtcms.com/a/619071.html

相关文章:

  • 查网站域名备案查询系统一般做门户网站多少钱
  • 卯兔科技西安网站建设google官网入口手机版
  • docker 镜像失效问题
  • 办公室装修效果图片大全云南seo网站关键词优化软件
  • 张家港网站设计制作全民代理平台
  • TensorRT笔记(3):解析样例中BufferManager类的设计
  • 互联网营销具体做什么优化师是做什么的
  • 【C++】红黑树:使用及实现
  • 工业数据库选型指南:深度解析实时数据库力控 vs TDengine
  • 山西自助建站系统平台如何制作网页广告
  • 赣州 做网站中国万网注册网站
  • 变分自编码器(VAE)的原理方法(二)
  • 哈尔滨行业网站深圳建设网站top028
  • 哪个网站可以做结婚请柬免抵退税在哪个网站做
  • 网站开发组织架构图重庆做网站电话
  • 【三维重建1】模型与概念
  • HandyControl 色系管理工具
  • 做网站需要什么人员wordpress 前台 很慢
  • 什么是网站设计种类做ar的网站
  • 模型部署在docker中对外提供服务
  • 基于KALI_ARPspoof的ARP Poisoning攻击及其防护
  • 萧山网站建设xsszwl免费ppt模板下载app
  • 太原seo网站排名优化网站seo资讯
  • 使用 speechSynchesis.speak()为web程序添加语音
  • 平台网站模板素材图片下载建设网站编程语言
  • extern “C“ _declspec(dllexport)导出函数
  • 堡垒机的概念
  • 工信部网站信息查询做电影解析网站
  • 自贡市网站建设网站建设设计价格
  • 化学式字符串解析:一道考验递归功底的经典题