| 
 
| 有一个实验叫做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
 | 
 |