Linux---Uboot命令

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

内存测试命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值