tftp方式下载烧录镜像到目标机

本文介绍了通过TFTP方式烧录Linux系统到目标机的不同存储介质,包括mmc、spi flash和nandflash。详细步骤涉及kernel、rootfs的下载与写入,以及在U-Boot模式下通过串口烧写SPI Flash。还提到了解决根文件系统烧录问题的方法。

1.通过tftp功能 烧写 存储介质是 mmc
1M(boot),16M(kernel),512M(rootfs),28G(data)
//kernel
tftp 0x44000000 uImage_hi3559av100_multi-core
mmc write 0x0 0x44000000 0x800 0x8000 //length 0x8000 * 512bytes

//rootfs
tftp 0x44000000 rootfs_multi-core_512M.ext4
mmc write.ext4sp 0x0 0x44000000 0x8800 0x100000 //length 0x100000 * 512bytes

2. Uboot模式下通过串口烧写镜像到spi flash

  1. 安装并打开tftp工具,如tftp32
  2. 将需要烧录的文件放在tftp目录;
  3. 重启设备,进入u-boot模式
  4. 设置tftp服务器IP
    setenv serverip 192.168.x.xxx
  5. 设置主板ip
    setenv ipaddr 192.168.x.xxx
  6. 检测网络是否可用,打印host 192.168.x.xxx is alive表示网络可用
    ping 192.168.x.xxx
  7. 选择spi flash:
    sf probe 0
  8. 擦除spi flash空间
    sf erase spi_addr size (sf erase 0x0 0x1000000)
  9. 格式化内存区间
    mw.b ddr_addr 0xff size;(mw.b:二进制写内存; 0x82000000: 内存首地址; 0xff:值; 0x1000000:size)
    10.下载文件到内存
    tftp 82000000 filename
    11.将内存内容写入spi flash
    sf write ddr_addr spi_flash_addr file_size (sf write 0x82000000 0x0 0x1000000)
    12.重启
    reset

2.1. 怎么将SPI FLASH上的二进制内容拷贝出来?

  1. 设置tftp服务器ip
    setenv serverip 192.168.x.xxx
  2. 设置本机ip
    setenv ipaddr 192.168.x.xxx
  3. 测试网络是否畅通
    ping 192.168.x.xxx
  4. 选择spi flash
    sf probe 0
  5. 读取spi flash内容到内存
    sf read 0x82000000 0x0 0x1000000
  6. 将内存中的内容上传到tftp服务器
    tftp 0x82000000(addr) filename 0x1000000(size:16M)
    ————————————————
    版权声明:本文为CSDN博主「satan_ruler」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u014780165/article/details/43192489

3、通过tftp功能,烧录整个系统 存储介质是 nandflash

a、u-boot烧录u-boot

如果开发板nor flash里面已经烧录有u-boot,可以通过nor flash里面u-boot的tftp功能烧录bootloader到nandflash

1、下载bootloader到ram

tftp 30000000 u-boot.bin

2、擦除bootloader分区

nand erase bootloader

3、烧录u-boot到nandflash

nand write 30000000 bootloader

b、u-boot烧录kernel

1、下载kernel到ram

tftp 30000000 uImage

2、擦除kernel分区

nand erase kernel

3、烧录kernel到nandflash

nand write.jffs2 30000000 kernel

c、u-boot烧录rootfs

1、下载rootfs到ram

tftp 30000000 first_fs.yaffs2

2、擦除root分区

nand erase root

3、烧录root到nandflash

nand write.yaffs2 30000000 root

烧录完成之后,文件系统还是跑不起来,卡在下面这地方:

Warning: unable to open an initial console.
Failed to execute /linuxrc. Attempting defaults…
Kernel panic - not syncing: No init found. Try passing init= option to kernel.

解决方法:

在烧录文件系统时,不能把根文件系统烧录到整个root分区,这样会破坏根文件系统。

要按照文件系统本身的大小进行烧录,命令如下:

nand write.yaffs 30000000 0x00260000 $(filesize)

烧录完成之,整个系统一切正常
————————————————
版权声明:本文为CSDN博主「CHANGE-MYSELF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jd404647184/article/details/39990059

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值