前言

  • 【AT91SAM9261EK】开发板,有网络接口,u-boot 支持通过网络来烧写,这里来烧写根文件系统rootfs
  • 烧写Linux的根文件系统,可以使用J-Link,也可以使用【tftp】,u-boot 2022 里面,tftp命令改为了:【tftpboot】,今天验证了一下,发现可以正常的下载 文件到SDRAM中,并可以使用nand write 命令,烧写到NandFlash中

配置方法

【AT91SAM9261EK】u-boot 2022 tftpboot 烧写根文件系统_tftpboot

  • 开发板进入u-boot 命令行模式
  • ​printenv​​​ 可以查看网络的配置,如果没有,可以使用 ​​setenv​​ 配置上
U-Boot> printenv 
baudrate=115200
bootargs=console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro,-(rootfs) root=/dev/mtdblock7 rw rootfstype=cramfs init=/linuxrc
bootcmd=nand read 0x22000000 0x200000 0x300000; bootm
bootdelay=3
ethact=dm9000
ethaddr=a8:53:3e:26:6a:5b
fdtcontroladdr=23f01c20
gatewayip=192.168.1.1
ipaddr=192.168.1.200
netmask=255.255.255.0
serverip=192.168.1.100
  • 如电脑的IP 为: ​​192.168.1.100​​​ ,这里为:​​serverip​
  • 开发板的IP 为:​​192.168.1.200​​​,这里为:​​ipaddr​

tftpboot

  • 其实就是tftp 命令,用于从TFTP服务器拉文件到内存(SDRAM)中
  • 从PC端拉一个 ​​rootfs_02.bin​​ 的文件到 开发板的方法:
U-Boot> tftpboot 0x22000000 rootfs_02.bin
dm9000 i/o: 0x30000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: a8:53:3e:26:6a:5b
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 192.168.1.100; our IP address is 192.168.1.200
Filename 'rootfs_02.bin'.
Load address: 0x22000000
Loading: #################################################################
############################
2.1 MiB/s
done
Bytes transferred = 1363968 (14d000 hex)
  • 如果无法传输,需要确认网络的IP地址的配置是否正确
  • 这里的​​tftpboot 0x22000000 rootfs_02.bin​​​ 中的: ​​0x2200 0000 ​​​ 是 SDRAM的地址, ​​rootfs_02.bin​​ 是电脑端TFTP服务器共享的文件名

nand write 烧写

  • u-boot 命令使用 nand write命令烧写从TFTP服务器拉取到内存的rootfs_02.bin,这里需要指定【内存的起始地址】与【文件的大小】,文件的大小在文件传输完,会显示
  • ​Bytes transferred = 1363968 (14d000 hex)​​​ 这是 文件传输的大小, ​​0x14d000​
  • ​0x22000000​​ 是文件存放的起始地址
  • ​0x800000​​ 是根文件系统烧写到nandflash中的位置,这个是确定好的位置
  • 可以在烧写前擦除文件系统分区,使用:​​nand erase​​ 命令
U-Boot> nand erase 0x800000 0x800000

NAND erase: device 0 offset 0x800000, size 0x800000
Erasing at 0xfe0000 -- 100% complete.
OK
Load address: 0x22000000
Loading: #################################################################
############################
2.1 MiB/s
done
Bytes transferred = 1363968 (14d000 hex)
U-Boot> nand write 0x22000000 0x800000 0x14d000

NAND write: device 0 offset 0x800000, size 0x14d000
1363968 bytes written: OK
U-Boot> reset
resetting ...
RomBOOT

验证效果

  • 烧写完,可以 ​​reset​​ 重启开发板,看看Linux 文件系统是否正常,shell终端是否正常进入
  • 实际验证正常

小结

  • 熟悉u-boot TFTP 的操作,拉取文件用于烧写
  • 使用网络来传输文件,速度很快,如果文件很大,可以使用u-boot 的 TFTP来烧写
  • ​u-boot 2022​​​的​​tftp​​​命令,使用:​​tftpboot​