18.Uboot命令使用

一、uboot启动

1.烧写

​ 为了便于u-boot的调试,使用SD卡烧写u-boot程序。使用裸机程序的方法。

将SD卡插入虚拟机读到SD卡后,对SD卡进行分区。

sudo fdisk /dev/sdb #进入了分区模式
p #查看分区
d #删除分区
n #进行分区

建立两个分区 
默认,主分区,1分区,default
默认,主分区,2分区,default

​ 分区好以后,烧录u-boot.imx

sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2 conv=fsync
694+0 records in
694+0 records out
355328 bytes (355 kB, 347 KiB) copied, 0.542137 s, 655 kB/s

​ 启动开发版以后,就可以启动uboot。如果版本不对,也是没有任何打印信息的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRTZJgEk-1591541304033)(C:\Users\Administrator\Desktop\LinuxIMX开6ULL发\L27Uboot分析与根文件系统构建\图片\1_uboot启动.png)]

二、UBoot常用命令

板子信息

​ bdinfo :查看板子信息

​ printenv:打印环境变量

​ setsenv:修改环境变量 , 修改字符串要 ‘ ’ ,设置控制为删除环境变量

​ saveenv:保存修改环境变量

内存

​ md:md [.b, .w, .l] address [# of objects] 其中显示0x20

=> md.b 80000000 14
80000000: ff cb 78 8e ff fb fe ff 77 b5 d4 5f fd ff 7f f7    ..x.....w.._....
80000010: af f3 6f df                                        ..o.
=> md.w 80000000 20
80000000: cbff 8e78 fbff fffe b577 5fd4 fffd f77f    ..x.....w.._....
80000010: f3af df6f ef3f ff6a ef5b bffb bf9f fdff    ..o.?.j.[.......
80000020: d5d3 fffe fdff e8fb dff7 2f7e febe aa7f    ..........~/....
80000030: fcfb 9ff3 fb6f 2eb7 7fbf 7fed afff e8ff    ....o...........
=> md.l 80000000 20
80000000: 8e78cbff fffefbff 5fd4b577 f77ffffd    ..x.....w.._....
80000010: df6ff3af ff6aef3f bffbef5b fdffbf9f    ..o.?.j.[.......
80000020: fffed5d3 e8fbfdff 2f7edff7 aa7ffebe    ..........~/....
80000030: 9ff3fcfb 2eb7fb6f 7fed7fbf e8ffafff    ....o...........
80000040: f5f3ffff fa7bbafc d5fa5ff6 fb7efa5d    ......{.._..].~.
80000050: fdfb6de3 fffdbfbc 5ffbf3ef ffffaffd    .m........._....
80000060: 7fc357ff af5ffcfe 75ff3fe3 befbaeaf    .W...._..?.u....
80000070: f7bbddf7 a6feef9d f7dbf58f abb7ebbe    ................

​ nm:修改1个内存值 nm [.b, .w, .l] address , q是退出

=> nm.l 80000000
80000000: 8e78cbff ? 12345678
80000000: 12345678 ? q

=> md.l 80000000 1
80000000: 12345678      

​ mm:修改一串内存

​ mw:修改制定内存快数mw [.b, .w, .l] address value [count]

​ cp:将dram中的数据从一段内存拷贝到另一端内存。cp [.b, .w, .l] source target count

​ cmp:比较指定数目内存块的c值 ,会告诉你从哪里地址不相等 。mp [.b, .w, .l] addr1 addr2 count

网络

​ 与主机ping通,要设置环境变量,这样网卡才能使用

setenv ipaddr 192.168.1.100  #开发版的地址
setenv ethaddr 00:04:9f:04:d2:88  #MAC地址
setenv serverip 192.168.1.200
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
saveenv

​ ping通虚拟机的

=> ping 192.168.1.200
Using FEC1 device
host 192.168.1.200 is alive

​ Note:开发版可以ping通虚拟机,现在有一个问题是虚拟机ping不同开发版,需要开发版ping虚拟机,虚拟机才能ping通开发版。

​ 现在就可以挂载tftp,nfs服务了。

1.nfs(下载内核zImage)

​ nfs是网络文件系统,使得开发版与虚拟机之间可以类似于共享文件夹的效果。下载到开发版的DRAM中。

​ 虚拟机安装nfs环境

sudo apt-get install nfs-kernel-server
sudo vi /etc/exports
#在末尾追加
#       /nfs/rootfs *(rw,sync,no_root_squash)     
#		或 /source/  *(rw,sync,no_subtree_check)   
sudo mkdir -p /nfs/rootfs
sudo chmod 777 /nfs
sudo chmod 777 /nfs/rootfs
sudo /etc/init.d/nfs-kernel-server restart#启动nfs服务

​ 开发版上电以后输入命令,连接nfs服务,烧入准备好的内核

nfs 80800000 192.168.1.200:/nfs/rootfs/zImage

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-whEJ9COH-1591541304038)(C:\Users\Administrator\Desktop\LinuxIMX开6ULL发\L27Uboot分析与根文件系统构建\图片\2_nfsload.png)]

现在我们可以通过内存读取数据,与zImage用Winhex软件查看,发现内容一样,就代表下载成功了。

2.tftp

虚拟机安装tftp服务,并且开启tftp服务

$ sudo apt-get  install  tftpd-hpa  //如果未安装,安装 tftp-server
$ sudo vi  /etc/default/tftpd-hpa  //修改tftp服务器配置文件为
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-c  -s  -l"
$ mkdir  /tftpboot   //创建tftpboot目录,
$ sudo chmod  a+w  /tftpboot
$ sudo service   tftpd-hpa   restart	  //启动 tftp-server	

在开发版中使用命令进行下载

tftp 80800000 zImage

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-crXeXAih-1591541304041)(C:\Users\Administrator\Desktop\LinuxIMX开6ULL发\L27Uboot分析与根文件系统构建\图片\3_tftp.png)]

MMC

​ mmc info:显示当前选中的内存设备

​ mmc rescan:扫描mmc设备

​ mmc list:打印出mmc设备的列表

​ mmc dev number

=> mmc dev 1		#切换mmc1设备作为当前设备
=> mmc info
Device: FSL_SDHC
Manufacturer ID: 15
OEM: 100
Name: 8GTF4
Tran Speed: 52000000
Rd Block Len: 512
MMC version 4.0
High Capacity: Yes
Capacity: 7.3 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB

​ mmc part:查看当前设备的扇区

​ mmc read

​ mmc write

Fat文件系统命令

​ SD/EMMC分为三个分区:1.存放uboot , 2.存放zImage ,dtb,fat ,3.rootfs

​ fatinfo:

​ fatls mmc 1:1 :查看mmc设备1的1分区的文件

​ fattype mmc 1:1 :查看mmc涉笔1的1分区的文件系统类型

​ fatload mmc 1:1 80800000 zImage

BOOT

​ bootz:用来自动启动镜像文件 , 我们将kernel的镜像与dtb文件使用tftp下载在内存中 , 然后使用bootz来启动。其中zImage放到80800000的地址中,dtb放到83000000的地址中。

tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk-emmc.dtb
bootz 80800000 - 83000000

启动完以后,开发版的LED灯亮了,就启动内核结束了

​ bootm:同bootz , 用于启动uImage

​ bootcmd:

setenv bootcmd 'tftp 80800000 zImage;tftp 83000000 imx6ull-14x14-evk-emmc.dtb;bootz 80800000 - 83000000'
saveenv

三、uboot下载裸机程序

​ 现在我们已经搭建好了tftp网络 , 只需要将Ubuntu下的bin文件放到tftpboot目录下,就可以通过tftp服务下载到开发版中。通过go命令跳转到裸机程序的地址当中开始执行裸机程序,这样调试程序就很方便。

tftpboot keyfilter.bin 87800000

=> tftp 87800000 keyfilter.bin
Using FEC1 device
TFTP from server 192.168.1.200; our IP address is 192.168.1.101
Filename 'keyfilter.bin'.
Load address: 0x87800000
Loading: #
         222.7 KiB/s
done
Bytes transferred = 2512 (9d0 hex)

=> go 87800000
## Starting application at 0x87800000 ...

你可能感兴趣的:(IMX6ULL学习手册,uboot)