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
??查看所有支持命令
??print查看uboot这个软件的环境变量 ,变量名=变量值
pri ipaddr
pri serverip
??setenv abc 100 200? ? // 设置 添加一个变量值 “100 200”是个字符串值
??setenv bootdelay 10? ? // 修改变量
??setenv abc? ? ? ? ? ? ? ? ? ?// 删除abc变量
??从RAM写到Flash(重启后不会被删除)
??setenv ipaddr x.x.x.x
??setenv serverip? x.x.x.x
??saveenv
??ping x.x.x.x? ? ? //PC的IP
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+内存地址 : memmory display
??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
内核启动命令,只使用于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没有任何区别。
??uboot
? ? ?直接运行裸机程序
?
??tftpd 20008000 uImage ?:传输内核文件
????内核要有个偏移offset ,在内存管理中建立MMU表
????在虚拟内存中会预留一个表,干脆在物理内存中也偏移
?
??go 20008000
????开头是uboot的数据信息
??传递给内核的启动参数
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
?
??倒计时,时间到后自运行
? ? nand read 20008000 100000 200000;
? ? nand read 21000000 5600000 400000;
? ? bootm 20008000
/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