4.uboot的常用命令2

来源:互联网 发布:量子纠缠知乎 编辑:程序博客网 时间:2024/06/05 23:54

4.1.网络测试指令:ping
(1)用法:ping ipaddress。作用是测试开发板与主机直接的网络连接。
(2)注意需要开发板需要插上网线,如果是测试ping通主机windows,则需设置主机windows电脑本地连接的IP地址和子网掩码。
(3)确认uboot中的与网络相关的环境变量是否正确,即ethaddr(网卡地址)、netmask(子网掩码)、ipaddr(ip地址)等,最重要的是ipaddr地址,该ipaddr必须与主机windows的IP地址处于同一网段。
(4)网段的概念:一个IP地址分为2部分,一部分是网段地址,另一部分是网段内的主机地址(由子网掩码来区分哪一部分是网段地址,哪一部分是主机地址)。在子网掩码是255.255.255.0的情况下,192.168.1.10这个IP地址的前三部分(192.168.1.)属于网段地址,第4部分(10)属于主机地址。


4.2.开发板linux下ping主机windows
(1)进入开发板linux命令行终端下,使用ifconfig eth0 192.169.1.20命令设置linux系统的IP地址(后续固定各系统IP地址如下:主机windows地址192.168.1.10;开发板uboot或linux地址192.168.1.20;虚拟机ubuntu地址192.168.1.30)。
(2)固定设置主机windows电脑本地连接的IP地址为192.168.1.10和子网掩码为192.168.1.1。
(3)从开发板linux下ping通windos主机成功;从windos命令行(cmd)下ping开发板linux成功。
(4)测试成功表明开发板和主机的网络部分硬件都是好的;两者中间网络连接即网线也是好的;主机windows中的网络软件设置是好的。


4.3.开发板linux下ping虚拟机ubuntu
(1)虚拟机ubuntu下网卡设置有几种方式,常用为NAT(外网只可见widows,ubuntu不可见,即只有1台电脑)和Bridge(外网可见windows和ubuntu,即有两台电脑)。
(2)虚拟机ubuntu要与开发板通信,必须通过桥接方式,并且必须桥接到有线本地网卡,因为开发板是通过有线本地网卡连接电脑的。
(3)设置虚拟机ubuntu中网络连接方式为桥接到有线本地网卡,设置虚拟机ubuntu的IP地址为192.168.1.30即可(可通过/etc/network/interfaces文件来设置静态IP然后重启;也可以直接命令行ifconfig去设置)。
(4)从开发板linux下ping通虚拟机ubuntu成功;从虚拟机ubuntu下ping开发板linux成功。
(5)测试成功表明开发板和主机的网络部分硬件都是好的;两者中间网络连接即网线也是好的;虚拟机ubuntu中的网络软件设置是好的。


4.4.开发板uboot下ping主机windows和虚拟机ubuntu
(1)在开发板uboot下设置IP地址为192.168.1.20,设置网关为192.168.1.1。
(2)经过实测大部分时候开发板uboot可ping通wondows和虚拟机ubuntu,但有少数时候无法ping通,并且windos与虚拟机ubuntu不能相互ping通。
(3)注意从windos下或虚拟机ubuntu下是无法ping通开发板uboot的,因为uboot为裸机程序,是不会时刻监视网卡的。
(4)假如开发板运行linux,则其与windows、虚拟机ubuntu三者均可相互ping通,非常畅通。


4.5.tftp下载指令:tftp
(1)uboot的主要目标是启动内核,为了完成启动内核必须要能够部署内核,部署内核即将内核镜像从主机(windows或ubuntu)中下载过来然后烧录到本地Flash中。目前uboot中主流的下载方式为tftp和fastboot两种。tftp是通过有线网络传输数据,比较典型;fastboot是通过usb线传输数据,是近些年发展起来的。
(2)tftp方式下载时uboot实际是tftp客户端,主机实际是tftp服务器。我们需在主机下搭建tftp服务器,然后将镜像文件放置于tftp的下载目录中,在开发板下的uboot中通过tftp命令即可下载镜像文件。
(3)可在windows或linux搭建tftp服务器,在windows下搭建一般使用一些软件如tftpd32(见图1),在linux下搭建可参考《嵌入式开发环境搭建-基于14.04》教程或上网搜索。我的虚拟机搭建tftp服务器设置的下载目录是/home/gec/tftpboot,即可将需要下载的文件放置该目录下。
(4)在开发板上运行uboot,检查uboot中的serverip(即tftp服务器IP地址,serverip=192.168.1.10)必须与虚拟机中的IP地址一致;从开发板uboot上ping虚拟机主机确保网络畅通(host 192.168.1.30 is alive);将待下载的文件放置下载目录/home/gec/tftpboot
下;在开发板uboot下运行tftp 0x300000000 xxx即可(将xxx文件下载到开发板内存上的0x30000000处);检查下载好的文件大小(Bytes transferred = 9 (0x9)即9个字节)与虚拟机下的文件大小是否相同判断是否有下载错误(-rw-rw-r– 1 gec gec 9 Dec 29 05:15 hello即9个字节)。


4.6.nfs启动内核命令:nfs
(1)uboot中也支持nfs命令,但是基本没用过,如果需要使用则可参考《嵌入式开发环境搭建-基于14.04》教程或上网搜索。


4.7.SD卡/iNand操作指令movi
(1)若开发板使用SD卡/EMMC/iNand等作为Flash外存设备,则在uboot中操作Flash的指令为movi(或mmc);movi指令是一个命令集,有很多子命令,具体用法可使用help movi查看。
(2)movi命令集都是以movi read(读取iNand的内容到DDR上)和movi write(将DDR中的内容写入iNand中)为一组的,注意涉及到DDR内存和iNand两个硬件。
(3)movi read {u-boot | kernel} {addr};该命令使用了通用描述手法来描述:movi和read没有任何标记表明每次使用该指令是必选的;大括号{}表明括起来的部分必选一个;竖线|表明多选一;中括号[]表明是可选参数,可以有也可以没有。
(4)指令有很多种用法,譬如movi read u-boot 0x30000000;即将iNand中的u-boot分区读出到DDR中的0x30000000起始位置处;uboot代码中将iNand分成了多个分区,每个分区都有地址范围和分区名,uboot程序操作中可通过分区名或直接地址来操作iNand分区;在uboot命令行中所有的数字都被默认当做16进制处理,所以这里的0x30000000也可以直接写作30000000。


4.8.NandFlash操作指令nand
(1)理解方法和操作方法完全类似于movi指令,当无法理解命令的具体意思时,可直接查看具体的uboot源码进行分析。
(2)如何更新uboot:tftp 0x400000000 u-boot.bin;nand erase 0x0 0x100000(1MB);nand write 0x40000000 0x0 0x100000。
(3)使用uboot更新zImage:tftp 0x40000000 zImage;nand erase 0x600000 0x500000(5MB);nand write 0x40000000 0x600000 0x500000。
(4)使用uboot更新rootfs:tftp 0x40000000 rootfs.img;nand erase 0xe00000 0xf200000(242MB);nand write.yaffs 0x40000000 0xe00000 0xxxxx(0xxxx—>实际的下载大小,tftp的传输后的报告)。


4.9.内存操作指令:mm、mw、md
(1)DDR内存是没有分区的,在使用内存时需要注意不能越界使用内存;uboot是裸机程序,其内存是分散可以随便使用的,所以uboot的使用者必须自己注意不要自己把自己的数据给覆盖掉了;在操作系统下系统会整体管理所有内存,系统会保证内存不会随便越界。
(2)mm即memory display;显示内存中的内容;md [.b, .w, .l] address [# of objects](譬如:md.b 30000000 10;即显示10个字节的内容)。
(3)mw即memory write;将内容写到内存中;mw [.b, .w, .l] address value [count](譬如:mw.b 30000000 88;即将0x88写入到0x30000000地址中)。
(4)mm即memory modify;批量的逐个单元修改内存中的某一块;mm [.b, .w, .l] address(譬如:mm.b 30000000,回车->输数->输入y结束;逐个更改内存中的内容)。


4.10.启动内核指令:bootm、go
(1)uboot的终极目标就是启动内核,启动内核在uboot中表现为一个指令,uboot命令行中调用这个指令就会启动内核,uboot一旦调用这个指令不管内核启动成功与否都回不来了。
(2)bootm启动内核同时给内核传参,bootm是正宗的启动内核的命令,一般情况下我们都使用bootm。
(3)go启动内核不传参,go本来不是为了启动内核设计的,go的内部就是一个函数指针指向某个内存地址然后调用那个函数,go的实质是PC跳转到某个内存地址去运行而已。go命令可以用来在uboot中执行任何的裸机程序,我们可以在uboot使用go命令调试裸机程序。


这里写图片描述


0 0
原创粉丝点击