海思3516dv300如何使用tftp烧录uboot、内核、文件系统
准备工作
- 1、win10电脑、开发板、网线、串口
- 2、secureCRT(连接串口)、tftpd32.exe软件。
以 128M SPI NAND Flash 为例
1. 地址空间说明
1M | 4M | 123M |
---|---|---|
boot | kernel | rootfs |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2、配置tftp服务器
tftp服务器的作用就是将烧录用到的uboot等相关文件拷贝到从tftp服务器目录下下载到板子上。
打开tftpd32.exe软件,如下图所示,tftfp32既然是个ftfp服务器,那么首先就要选择文件的路径,点击Browse,选择要传输文件的路径:
接下来选择你要给某个设备传输文件的IP(比如开发板,路由器等),这个ip一定不能选错哦。同时还要保证这个IP和windows下的IP在同一个网段下。注意,如果没有目标ip可以选择,通常是因为目标没有上电。
选择好路径和IP后,可以用目标机ping windows的IP,能ping通就表示可用。
3、 修改bootargs、bootcmd和serverip参数
进入uboot命令行后,你可以输入“print”命令,打印查看现在的环境变量,接下来就是修改几个重要的环境变量:bootargs、bootcmd和serverip。输入如下命令做修改
setenv bootargs ''
setenv bootcmd ''
setenv serverip 'your computer IP'
saveenv
注意: ip那里得修改成你电脑的ip。
将这两个信息做屏蔽,这样系统上电后只会停留在uboot模式,方便调试uboot(这里其实就可以用HiTool.exe软件进行uboot、kernel和rootfs等进行烧写了)。
参数解释
bootargs:用于配置启动内核参数、系统分区等;
bootcmd:用于启动uboot后,内核自启动相关的参数。
serverip:确保开发板与电脑同一个网段,该参数是电脑的IP
如果出现 *** ERROR: `ipaddr’ not set
则再输入如下命令:
setenv ipaddr 192.168.1.102
4. 烧写 u-boot
在secureCRT软件hisi3516dv300板子的串口终端依次输入如下命令:
mw.b 0x82000000 0xff 0x100000
tftp 0x82000000 u-boot-hi3516dv300.bin
nand probe 0;nand erase 0x0 0x100000;nand write 0x82000000 0x0 0x100000
含义说明:
- mw.b 0x82000000 0xff 0x100000 :对内存进行初始化,其中0x82000000为flash内存地址
- **tftp 0x82000000 u-boot-hi3516dv300.bin ** :U-boot下载到内存
- nand probe 0:探测并初始化nand flash
- nand erase 0x0 0x100000:擦除1M大小
- nand write 0x82000000 0x0 0x100000 :从内存写入nand flash
5. 烧写内核
mw.b 0x82000000 0xff 0x400000
tftp 0x82000000 uImage_hi3516dv300
nand erase 0x100000 0x400000;nand write 0x82000000 0x100000 0x400000
6.烧写文件系统
yaffs2文件系统的选型要根据自己板子的flash来,我的flash是nand 128KB\128M的,选择的是2k_24bit。
mw.b 0x82000000 0xff 0x7b00000;
tftp 0x82000000 rootfs_hi3516dv300_2k_24bit.yaffs2;
nand erase 0x500000 0x7b00000;
nand write.yaffs 0x82000000 0x500000 9C1F00
还要注意下面的写到内存的大小,需要计算yaffs2文件系统的大小,是文件系统镜像的十进制转换成的十六进制大小。
7. 设置启动参数
(注意 linux-4.9.y kernel 默认文件系统只读,需要在 bootargs 中加入rw 选项,文件系统才可读写)
setenv bootargs 'mem=128M console=ttyAMA0,115200 coherent_pool=2M root=/dev/mtdblock2 rootfstype=jffs2 rw mtdparts=hinand:1M(boot),4M(kernel),123M(rootfs)'
setenv bootcmd 'nand read 0x82000000 0x100000 0x400000;bootm 0x82000000'
saveenv
8. 重启系统
reset
烧写成功,如下图
注意:当有uboot时,可以不用重新烧写uboot,只需要重新烧写内核和文件系统即可。