在u-boot中更新镜像程序


前提是板子上已经有u-boot程序在运行。如果没有,先使用codewarrior烧录一个u–boot。


串口烧写

=>help
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)

我们可以用kermit/xmodem/ymodem协议来进行串口下载

例:更新u-boot程序

  1. 先解除写保护,u-boot是系统默认写保护的

    protect off 0xEFF40000 0xEFFFFFFF

  2. 擦除,nor写入前必须先擦除

    era 0xEFF40000 0xEFFFFFFF

  3. 串口烧写,使用ymodem协议烧写

    输入loady 0xEF520000,boot进入一个等待状态,然后点击文件-》传输-》YMODEM(Y)-》用YMODEM发送,弹出文件选择对话框,选择u-boot.bin镜像。

  4. 等待进度条读完,直到出现done,即烧写成功。

网络tftp烧写

注意:由于tftp下载不能直接下载至flash中(测试烧录时发现的),需要先烧写到ddr中,然后复制到flash中。

以下以烧写u-boot为例

  1. 先设置好u-boot环境变量参数,主要是网络参数。

    > setenv ipaddr 192.168.1.200		//本地ip
    > setenv gatewayip 192.168.1.1		//网关,不设置也可以,根据实际的网络状况来定
    > setenv netmask 255.255.225.0		//子网掩码
    > setenv serverip 192.168.1.223		//tftp服务器ip
    
  2. nor必须先擦除才能写入,所以先擦除

    > protect off 0xEFF40000 0xEFFFFFFF		//解除写保护
    > era  0xEFF40000 0xEFFFFFFF			//擦除
    
  3. 下载只ddr中

    > tftp 0x30000000 u-boot.bin		//下载完成会显示文件的字节数,下一步会用到
    
  4. 写入nor中

    > cp.b 0x30000000 0xEFF40000 0xc0000	//最后一个参数是tftp下载的字节数,将ddr的镜像文件拷贝至nor中
    > cmp.b 0x30000000 0xEFF40000 0xc0000	//检查拷贝是否正确,非必要项
    
  5. 完毕

p1020ndae的镜像烧写

nor flash(128MB)分区划分

修改u-boot的tlb之后,nor支持我们的128M nor,我们需要对128M的nor进行分区

根据RM手册可知,cpu启动会从读取nor最后4byte,所以u-boot要烧录到nor最后,以下是我的分区划分。

address = baseaddr + offset;

baseaddr = 0xe8000000;

Start Physical offsetEnd Physical offsetDefinitionSizeSize(B)hex
00000000 >> E800 0000054FFFFF >> Ed4FFFFFrootfs85M‭891289605500000
05500000 >> Ed500000074FFFFF >> EF4FFFFFfpga.bin32M335544322000000
07500000 >> EF5000000751FFFF >> EF51FFFFdtb128K13107220000
07520000 >> EF52000007F1 FFFF >> EFF1FFFFuImage10M‭10485760‬A00000
07F2 0000 >> EFF2000007F3 FFFF >> EFF3 FFFFu-boot env128K13107220000
07F4 0000 >> EFF4000007FFFFFF >> EFFF FFFFu-boot768K786431C0000
对应的boot参数
  • RAM boot参数:
setenv ramargs 'setenv bootargs root=/dev/ram rw console=ttyS0,115200'
setenv bootcmd 'run ramargs; bootm EF520000 E8000000 EF500000'
  • jffs2 boot参数:
setenv bootcmd 'setenv bootargs root=/dev/$jffs2nor rw console=$consoledev,$baudrate rootfstype=jffs2 $othbootargs;bootm EF520000 - EF500000;'

镜像烧写

设置环境变量
> setenv ipaddr 192.168.1.200
> setenv gatewayip 192.168.1.1
> setenv netmask 255.255.225.0
> setenv serverip 192.168.1.223
烧写u-boot
> protect off 0xEFF40000 0xEFFFFFFF
> era  0xEFF40000 0xEFFFFFFF
> tftp 0x30000000 u-boot.bin
> cp.b 0x30000000 0xEFF40000 0xc0000
> cmp.b 0x30000000 0xEFF40000 0xc0000
ALL> protect off 0xEFF40000 0xEFFFFFFF;era  0xEFF40000 0xEFFFFFFF;tftp 0x30000000 u-boot.bin;cp.b 0x30000000 0xEFF40000 0xc0000;cmp.b 0x30000000 0xEFF40000 0xc0000
烧写rootfs
> protect off 0xE8000000  0xEd4FFFFF
> era 0xE8000000  0xEd4FFFFF
> tftp 0x30000000 fsl.rootfs.ext2.gz.u-boot
> cp.b 0x30000000 0xe8000000 0x18f45d2				//最后的cp大小,以tftp下载字节数为准
> cmp.b 0x30000000 0xe8000000 0x18f45d2
ALL> protect off 0xE8000000  0xEd4FFFFF;era 0xE8000000  0xEd4FFFFF;tftp 0x30000000 pjffs2;cp.b 0x30000000 0xe8000000 0x20e0000;cmp.b 0x30000000 0xe8000000 0x20e0000
烧写fpga.bin
> protect off 0xEd500000 0xEF4FFFFF
> era 0xEd500000 0xEF4FFFFF
> tftp 0x30000000 vc707.bin
> cp.b 0x30000000 0xEd500000 0x135591c
> fpga load 0 0xEd500000 0x135591c
ALL> protect off 0xEd500000 0xEF4FFFFF;era 0xEd500000 0xEF4FFFFF;tftp 0x30000000 vc0612.bin;cp.b 0x30000000 0xEd500000 0x135591c;cmp.b 0x30000000 0xEd500000 0x135591c;
> tftp 0x30000000 vc707.bin;fpga load 0 0x30000000 0x135591c
烧写dtb
> protect off 0xEF500000 0xEF51FFFF
> era 0xEF500000 0xEF51FFFF
> tftp 0x30000000 p1020.dtb
> cp.b 0x30000000 0xef500000 0x3326
> cmp.b 0x30000000 0xef500000 0x3326
ALL>protect off 0xEF500000 0xEF51FFFF;era 0xEF500000 0xEF51FFFF;tftp 0x30000000 p1020rdb-pd_32b.dtb;cp.b 0x30000000 0xef500000 0x33b2;cmp.b 0x30000000 0xef500000 0x33b2
烧写uImage
> protect off 0xEF520000 0xEFF1FFFF
> era 0xEF520000 0xEFF1FFFF
> tftp 0x30000000 uImage
> cp.b 0x30000000 0xef520000 0x3e8dff
> cmp.b 0x30000000 0xef520000 0x3e8dff
ALL>protect off 0xEF520000 0xEFF1FFFF;era 0xEF520000 0xEFF1FFFF;tftp 0x30000000 uImage;cp.b 0x30000000 0xef520000 0x3b6843;cmp.b 0x30000000 0xef520000 0x3b6843
烧写u-boot env
> protect off 0xEFF20000 0xEFF3FFFF
> era 0xEFF20000 0xEFF3FFFF
> tftp 0x30000000 u-boot.env
> cp.b 0x30000000 0xEFF20000 0x3e8dff
> cmp.b 0x30000000 0xEFF20000 0x3e8dff
ALL>protect off 0xEFF20000 0xEFF3FFFF;era 0xEFF20000 0xEFF3FFFF;tftp 0x30000000 u-boot.env;cp.b 0x30000000 0xEFF20000 0x3b6843;cmp.b 0x30000000 0xEFF20000 0x3b6843
擦除命令

擦除u-boot:era 0xEFF40000 0xEFFFFFFF

擦除dtb: era 0xEF500000 0xEF51FFFF

擦除uImage:era 0xEF520000 0xEFF1FFFF

擦除env:era 0xEFF20000 0xEFF3FFFF

擦除fs:era 0xE8000000 0xEd4FFFFF

擦除整个nor: era all

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值