有一个实验叫做u-boot的使用
下面就是u-boot的使用终极必杀技
很多的人都实验进行失败了其实只有三句话输入就可以了
setenv bootargs "root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac=c2:01:0d:30:3a:88 ip=192.168.1.20 console=ttySAC0,115200 init=/sbin/init"
setenv bootcmd "usb start;tftp 0x40800000 zImage;mmc erase 0x1000 0x3000;mmc write 0x1000 0x3000"
setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"
具体的执行步奏可以下载并阅读我的笔记,里面有详细记录
setenv bootargs "root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac=c2:01:0d:30:3a:88 ip=192.168.1.20 console=ttySAC0,115200 init=/sbin/init"
setenv bootcmd "usb start;tftp 0x40800000 zImage;mmc erase 0x1000 0x3000;mmc write 0x1000 0x3000"
setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"
saveenv
run wrzImage
usb start
tftp 0x40800000 zImage 完成内核到内存的下载
mmc dev 4 :指定要操作的mmc设备
mmc erase 0x1000 0x3000 :擦除指定位置,准备写内存内容到emmc
mmc write 0x40800000 0x1000 0x3000 :写内存到emmc
setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"
saveenv 保存环境变量
run wrzImage 即可启动系统
ifconfig eth0 192.168.1.88
uboot 使用
下载与烧写相关:
1. 下载命令:串口下载、USB下载及网络下载
a. 串口下载:loadb:下载二进制文件
loads:下载.srec格式文件
loady:以ymodem方式下载文件
演示:
loady 地址:将串口传来的文件下载到内存指定的地址处
如:loady 0x40800000,即将串口发送的文件下载到0x40800000开始的地方,该命令后回车,即开始对串口进行监听
secureCRT -> 传输 -》发送y modem,传送文件
假定传送zImage,由于zImage在Ubuntu系统下,不在Windows中,首先利用共享,将其共享过来。
串口传输较慢,适合传一些小文件,大文件(如zImage不合适)
b. dnw下载
目标机执行:dnw 地址:进行监听状态
宿主机执行: dnw 文件名:发送文件
dnw:这里不做演示
c. 网络下载,
1. usb start: 由于开发板网络端口由usb转换,故首先开启usb
2. tftp 地址 文件:从tftp服务器目录当中下载文件到指定的地址中。
若下载不成功,检查网络配置。
演示:
内核下载后,可以利用go命令,起动内核
用法:go 0x40800000
内于并没有设置根文件系统相关的参数,因此,内核启动后,不能挂载根文件系统。
2. 烧写命令:
a. mmc list:列出mmc设备
SAMSUNG SDHCI: 2 (SD) :sd卡,2为SD卡的设备号
EXYNOS DWMMC: 4 :emmc,4为emmc的设备号
b. mmc erase:擦除mmc设备(flash设备需先擦除,然后才能进行相应的写操作)
用法: mmc erase 起始块地址 擦除的块数
注意:操作前,需指定操作的设备,因为这里有两个设备
c. mmc dev 设备号:指定设备号对应的设备,为当前设备,mmc dev 4:指定设备号为4的设备为当前设备,即指定 emmc为当前设备
d. mmc write 地址 起始块 总块数:把以“地址”开始的内存空间内容写到mmc设备中,烧写的设备起始位置为"起始块",烧写的总块数为“总块数”
例:mmc write 0x40800000 0x1000 0x30000,把0x40800000空间的内容,写到mmc以0x1000开始的地方,共烧写0x3000个块。
e. mmc read add start cnt:从mmc中,读数据到内存,mmc中起始位置为start,读取的总块数为cnt。
演示表明:之前存入flash中的内容,又被读回来了。
3. 内存相关操作
a. 查看内存:md 地址:查看以“地址”开始的空间的内容
md 0x40800000:以4字节查看0x40800000地址空间开始的内容
md.b 0x40800000:以字节查看0x40800000地址空间开始的内容
具体,请help md查看用法。
演示:将该地址空间的内容,烧到0x40800000中。
b. 修改内存:mm 地址
演示:mm 0x40800000,修改以0x40800000开始的地址空间内容,以4字节进行修改,修改后地址自增,用户可继续修改,当修改完毕时,输入空格,然后回车结束。
演示表明,内容确实被修改
环境变量设置、修改、删除:
1. printenv :可简写为pri,打印uboot中已有的环境变量
示例:
arch=arm
baudrate=115200
board=tiny4412
上面:等号(=)左边内容为变量,右边内容为变量的值
从输出窗口,可以看出它有很多变量
其中:
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.1.88:/opt/rootfs ethmac= ip=192.168.1.20:192.168.1.88:192.168.1.1:255.255.255.0:tiny4412:eth0:off console=ttySAC0,115200 init=/sbin/init
bootargs:为起动参数,起指定了根的挂载方式为nfs,
挂载的目录为:nfsroot=192.168.1.88:/opt/rootfs。
目标机的地址、网关、掩码:ip=192.168.1.20:192.168.1.88:192.168.1.1:255.255.255.0
指定的终端及通信波特率:console=ttySAC0,115200
inti进程:init=/sbin/init
下面将内核下载到内存中,并将内核写入到emmc,修改内核的下载方式为读取emmc
执行过程:
1. usb start
tftp 0x40800000 zImage
完成内核到内存的下载
2. mmc dev 4:指定要操作的mmc设备
mmc erase 0x1000 0x3000:擦除指定位置,准备写内存内容到emmc
mmc write 0x40800000 0x1000 0x3000 :写内存到emmc
演示操作:
1. 设置启动参数 bootargs(跳过,因为设置的和之前一样)
2. 从emmc中下载内核
3. 启动内核
注意:由于设备的bootargs和之前的一样,所以用户可以不设置,这里演示只是说明有这么一个操作,才能正确挂载根文件系统。
下面:重启开发板,再做演示,实际到这里系统就能正确启动,并挂载根文件系统了。
演示中,服务器地址丢失,导致进不了。可在服务器端:ifconfig eth0 192.168.1.88
下面设置自启动变量,赋值为自启动所需的命令序列,序列用双引号括起,各命令之间用分号分隔:
setenv wrzImage "mmc dev 4;mmc read 0x40800000 0x1000 0x3000;go 0x40800000"
然后:saveenv,保存环境变量
最后:run wrzImage,即可启动系统
演示:
系统已经启动成功了。
补充:setenv 、editenv 用法
1. setenv:创建变量、修改变量、删除变量
演示:
a. 创建变量:setenv 变量名 变量取值
例:setenv var hello :创建一个变量var,它的值为hello
b. 修改变量:setenv 已存在的变量名 新值
例:setenv var HELLO :将var的值修改为HELLO
c.删除变量:setenv 变量名 :变量后无需跟任何东西,直接回车即可
注意:创建的变量,或对变量进行的修改要想长久起作用,必须将其保存到flash,即执行saveenv
2. editenv:修改变量
演示:
editenv bootdelay :然后回车,可以把以前的值替换为新值,如:把6替换为10,然后保存变量并重启
发现起进等待时间确实变化了。这里也可以使用setenv bootdelay 10,来设置时间为10秒
over |