Uboot系列文章目录
第一章 Uboot编译
第二章 Uboot命令
第三章 Uboot源码和Makefile分析
文章目录
前言
以后调试时就烧录到SD卡,因为命令行烧录要烧写整个系统【耗时、浪费产品开发周期】
一、Uboot环境LOG信息
版本:U-Boot 2016.03
CPU:飞思卡尔 396MHZ
板级:自己命名【正点叫alientek】
I2C:准备好
DRAM:512M
MMC:EMMC、SD
显示:LCD 1024*600
视频:1024*600*24
启动准备图片:xxx.bmp
mmc0:当前设备【SD】 // 使用mmc list查看
网络:FEC1
二、命令
1.help
终端直接输入 help和?效果一样;查看某一个就是 ? mmc
=> help
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
... ...
=> ? mmc
mmc - MMC sub system
Usage:
mmc info - display info of the current MMC device
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
... ...
2.信息查询
2.1 bdinfo
=> ? bdinfo
bdinfo - print Board Info structure
... ...
=> bdinfo
arch_number = 0x00000000
boot_params = 0x80001000
DRAM bank = 0x00000000
-> start = 0x80000000
-> size = 0x20000000
eth0name = FEC1
ethaddr = (not set)
current eth = FEC1
ip_addr = <NULL>
baudrate = 115200 bps
TLB addr = 0x9FFF0000
relocaddr = 0x9FF47000
reloc off = 0x18747000
irq_sp = 0x9EF44EA0
sp start = 0x9EF44E90
FB base = 0x00000000
架构编号 --- arch_number
boot参数----偏移起始地址100,用于存放boot参数
DRAM块----有的是2/4块DDR,最后也是组成一个区
起始地址
大小
网络名字【网络1--eth0;网络2--eth1】
波特率
TLB
重定位
重定位偏移
IRQ
SP
FB地址
2.2 printenv
=> ? printenv
printenv - print environment variables
... ...
=> print
baudrate=115200
...
bootcmd=run findfdt;mmc dev${mmcdev};mmc dev${mmcdev};...
...
特别注意bootcmd和bootargs
2.3 setenv
修改uboot启动延时时间、修改emmc的第二个分区、修改|删除名字
=> setenv bootdelay 5
=> saveenv
Saving Environment to MMC...
=> setenv bootcmd 'console=ttymxc0,115200 root=/dev/mmcblklp2 rootwait rw'
=> saveenv
Saving Environment to MMC...
=> setenv author 'gtk'
=> saveenv
Saving Environment to MMC...
=> print
author=gtk
... ...
=> setenv author //删除
=> saveenv
Saving Environment to MMC...
3. 内存操作
3.1 md命令
=> md.b 80000000 14 //16进制,10进制是20,b表示8位--一个字节
80000000: 7b df 2e ff ...
80000010: b7 dd ff ff
=> md.w 80000000 10 //16进制,10进制是16,w表示16位--两个字节,一共32位
80000000: df7b ff2e ...
80000010: ddb7 ffff ... abba efee
=> md.l 80000000 10 //16进制,10进制是16,l表示32位--四个字节,一共64位
80000000: ff2edf7b ... fffe6beb
80000010: ffffddb7 ... fbeaaeeb
3.2 nm命令【修改一个内存】
=> ? nm
nm - memory modify
...
=> nm.l 80000000
80000000: ff2edf7b ? 12345678
80000000: 12345678 ? q
=> md.l 80000000 1
80000000: 12345678 //修改成功
3.3 mm命令【连续修改一段内存,地址自动自增】
=> ? mm
mm - memory modify
...
=> mm.l 80000000
80000000: ff2edf7b ? 22222222
80000004: fef3ebaf ? 33333333
80000004: f2deef8f ? 44444444
80000004: fffe6beb ? q
=> md.l 80000000 1
80000000: 22222222 33333333 44444444 //修改成功
3.4 mw命令【指定数据填充一段内存】
=> mw.l 80000000 0A0A0A0A 10 //填充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
3.5 cp命令【将DRAM数据从一段内存拷贝到另一段内存里】
=> cp.l 80000000 80000100 10
80000100: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000110: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000120: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
80000130: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a
3.6 cmp命令【比较两段内存数据是否相等】
=> cmp.l 80002000 80003000 10
word at 0x80002000 (0xffff7ff7) !=word at 0x80003000 (0xfffff7ff)
Total of 0 word(s) were the same
4. 网络操作
4.1 ping
ipaddr:开发板地址【报错就需要手动设置】
通过setenv设置saveenv保存生效
ethaddr:MAC地址【MAC是物理机地址要唯一】
通过setenv设置saveenv保存生效
##可以写死UbuntuIP地址,IP地址一般是动态分配【不稳定】
固定IP设置:Ubuntu下网络/IPV4
4.2 dhcp
dhcp获取的IP仅仅本次有效
4.3 nfs
用于计算机之间的分享数据
比如将Ubuntu里的镜像和设备树通过uboot使用nfs下载到开发板
nfs主要用于调试程序
启动前下载和配置步骤:
1. 开启nfs:sudo apt-get install nfs-kernel-server portmap
2. 配置nfs:sudo vim /etc/exports
添加 /home/hyg/linux/nfs *(rw,sync,no_root_squash)
开始nfs烧写
- 准备好之前工程生成好的zImage【我使用的是正点的】放到Ubuntu下的nfs目录下
- 终端uboot启动nfs指令,nfs 80800000 192.168.1.66:/home/hyg/linux/nfs/zImag
- 使用md.b 80800000 100查看结果
4.4 tftp
hyg@hyg-virtual-machine:/linux$ sudo apt-get install tftp-hpa tftpd-hpa
hyg@hyg-virtual-machine:/linux$ mkdir tftpboot
hyg@hyg-virtual-machine:/linux$ chmod 777 tftpboot
hyg@hyg-virtual-machine:/linux$ cd /etc
hyg@hyg-virtual-machine:/etc$ mkdir xinetd.d
hyg@hyg-virtual-machine:/etc$ sudo vim tftp
server tftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-s /home/hyg/linux/tftpboot
disable=no
per_source=11
cps=100 2
flags=IPv4
}
hyg@hyg-virtual-machine:/etc$ sudo service tftp-hpa start
hyg@hyg-virtual-machine:/etc$ sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECORY="/home/hyg/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS "-l -c -s"
hyg@hyg-virtual-machine:/etc$ cd ~/linux/tftpboot/
hyg@hyg-virtual-machine:/linux/tftpboot$ cp ../nfs/zImage ./
hyg@hyg-virtual-machine:/linux/tftpboot$ sudo chmod 777 zImage
hyg@hyg-virtual-machine:/linux/tftpboot$ sudo service tftpd-hpa restart
进入终端uboot环境【注意给文件权限】
5. EMMC和SD卡命令
5.1 mmc
1. mmc info --- 查看信息
2. mmc list --- 设备数
3. mmc part --- 列出扇区
4. mmc dev 1 0 --- 切换到MMC分区0
5. mmc read 80800000 600 10 --- 从EMMC第1536个块【0x6000】开始,读取0x10【16】个块数据到DRAM的0x80800000地址
md.b 80800000 2000 查看结果
烧写uboot
1. 拷贝uboot.imx到自己的tftpboot目录里
2. 进入终端uboot使用tftp下载uboot.imx到8080 0000
3. 使用mmc向80800000写入数据
4. 重启生效 reset
hyg@hyg-virtual-machine:~$ cd /linux/uboot/gtk_uboot/
hyg@hyg-virtual-machine:~/linux/uboot/gtk_uboot/$ cp u-boot.imx /home/hyg/linux/tftpboot/ -f
hyg@hyg-virtual-machine:~$ cd /linux/tftpboot/
hyg@hyg-virtual-machine:~/linux/tftpboot$ ls
zImage u-boot.imx xxxx_emmc_xxx.dtb
这样就能通过网络下载而不是用OTG
5.2 fat
SD/MMC分成三个区
uboot | zImage 【.dtb】| rootfs【ext4】
1. fatinfo mmc 0:1 //查看SD卡第二个分区【也可以说1分区】
2. fatls mmc 1:1 //查看EMMC的第2分区【1分区】
3. fatload mmc 1:1 80800000 zImage //将EMMC分区1中zImage文件读到DRAM中的0x80800000地址处
6. NAND和Boot命令
6.1 nand
1. 更改gtk_uboot下的imx6_gtk_emmc.sh改成imx6_gtk_nand.sh
2. 将xxx_ddr512_emmc_deconfig改成xxx_ddr256_nand_deconfig
3. 进入Ubuntu终端烧写./imxdownload u-boot.bin /dev/sdf到SD卡
1. nand info --- nand信息
2. nand device --- 切换
3. nand earse.part[]partition/chip --- 擦除和写入一起eg: nand erase 0x0 0x100000
4. nand write addr off size --- 将数据首地址addr处开始size大小写入NAND目标地址off里
上诉设备树读到DRAM里后,就能使用fdt操作了【xxx_nand_xxx.dtb要烧进去】
1. fdt addr 83000000 --- 就是DRAM设备树首地址
2. fdt header --- 查看设备树头信息
6.2 bootz
要启动linux就要将zImage和dtb放到DRAM里通过bootz启动
网络下载启动
1. 拷贝zImage 、 imx6_gtk_emmc_xx.dtb到Ubuntu的tftpboot里
2. 进入终端uboot
3. tftp 80800000 zImage
4. tftp 83000000 imx6_gtk_emmc_xx.dtb
5. bootz 80800000 - 83000000
从EMMC启动
1. fatls mmc 1:1 //查看EMMC分区1文件,是否有要加载的文件
2. fatload mmc 1:1 80800000 zImage //读emmc分区1zImage到DRAM 80800000
3. fatload mmc 1:1 83000000 imx6_gtk_emmc_xx.dtb //读emmc分区1 dtb到DRAM 83000000
4. booz 80800000 - 83000000
NAND启动一样
省略
6.3 bootm
用于uImage
6.4 boot命令
通过修改bootcmd网络启动Linux系统
6.5 go命令
用于终端调试【在线检测开发板是否正常】
6.6 run
6.7 mtest
内存测试命令