e.g.
1、上电输入“zlg”进入uboot选项界面,输入“q”进入uboot命令行。设置本地ip和目标服务器ip为同
段网络下。
setenv ipaddr 192.168.1.136
setenv serverip 192.168.1.200
saveenv
pri ipaddr
pri serverip
2、电脑端打开tftpd32软件,设置当前服务器目录为uImage绝对路径。
3、在uboot命令行下,输入以下命令进行网络升级,升级前最好先使用ping命令查看板子与主机之
间的网络是否通顺。
ping 192.168.1.200 (此处ip为serverip)
正常通讯后会打印显示:x.x.x.x is alive。
再次输入:
mtdparts
mtdparts defaults
tftp 0x82000000 uImage
//bootm 0x82000000 (此处如果仅仅测试修改内核是否可用,可直接在下载内核后输入bootm启动内核,后面
的步骤是将此内核固化到nand的步骤,如不固化,重启板子后启动仍是原先内核固件)
nand erase.part kernel
nand erase.part kernel2
nand write.i 0x82000000 kernel ${filesize}
nand write.i 0x82000000 kernel2 ${filesize}
setenv kernelsize ${filesize}
saveenv
?:
查看所有支持命令
pri:
print查看uboot这个软件的环境变量 ,变量名=变量值
pri ipaddr
pri serverip
setenv:设置环境变量
setenv abc 100 200 // 设置 添加一个变量值 “100 200”是个字符串值
setenv bootdelay 10 // 修改变量
setenv abc // 删除abc变量
saveenv:把本次的设置的环境变量写回存储器
从RAM写到Flash(重启后不会被删除)
setenv、saveenv:设置网络
setenv ipaddr x.x.x.x
setenv serverip x.x.x.x
saveenv
ping x.x.x.x //PC的IP
nand:nand操作
nand [erase] [nandflash的内部地址] [搬移大小] 擦除nandflash上指定区域的内容(写0)
nand [write] [内存地址] [nandflash的内部地址] [搬移大小] 将内存中的指定地址写到nandflash的指定区域
nand [read] [内存地址] [nandflash的内部地址] [搬移大小] 将nandflash中的指定地址读到内存的指定区域
**注意:写之前,一定要先擦除**
读:FLASH到RAM。nand中第5M开始的地址空间读到内存地址21000000,1k大小
nand read 21000000 500000 1024
擦:擦除FLASH。 5M开始的1024Byte空间
nand erase 500000 1024
写:RAM到FLASH。内存地址21000000的地址空间写到nand中第5M的地方,1K大小
nand write 21000000 500000 1024:
md:查看地址内容
md+内存地址 : memmory display
tftp:
Client:开发板
./client server_ip port xxxx
server_ip 变成了通过环境变量serverip来取得
port : tftp这个命令写死了 改不了
xxxx : 干什么事情,由tftp 这个命令通过输入参数
tftp 20008000 abc
Sever:PC
windows
tftpd
linux
32bit sudo apt-get install tftpd-hpa
64bit sudo apt-get install tftpd openbsd-xinetd
/etc/inetd.conf
bootm:启动内核
内核启动命令,只使用于uImage(uBoot),uImage 包含uboot头文件
命令:
bootm [uImage内存地址]
go命令适用于其他的image,zImage Image bzImage 原始数据。但是需要进行一些操作。
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。
go:跳到内存地址空间
uboot
直接运行裸机程序
tftpd 20008000 uImage :传输内核文件
内核要有个偏移offset ,在内存管理中建立MMU表
在虚拟内存中会预留一个表,干脆在物理内存中也偏移
go 20008000
开头是uboot的数据信息
bootargs:
传递给内核的启动参数
root=/dev/nfs
nfsroot=ip:共享目录(ip:serverip)
ip=Linux的ip
init=linuxrc
console=ttySAC0,115200
setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/... ip=192.168.10.222 init=/linuxrc console=ttySAC0,115200
bootdelay:
倒计时,时间到后自运行
bootcmd:倒计时后执行的命令
nand read 20008000 100000 200000;
nand read 21000000 5600000 400000;
bootm 20008000
can0 启动:
/sbin/ip link set can0 type can bitrate 1000000 restart-ms 1
[root@335x-T ~]# ifconfig can0 up
[root@335x-T ~]# ifconfig can0
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:52