本次主要参考:
https://community.milkv.io/t/sd-milk-v-duo-u-boot-tftp-kernel/1323
https://community.milkv.io/t/freertos/1378
特别注意:以下所有操作必须再同一个终端命令行下进行,milk-v duo需要外接网以太网,PC与milk-v duo最好通过路由器连接。
在milk-v duo的SDK的目录下,预准备开发环境,参考1、milk-v duo(CV1800B,C906内核)搭建开发环境中的单步编译。
环境搭建说明(根据需求搭建服务器):
搭建NFS服务器,参考8、LCPI(F1C200S)挂载windows上的NFS服务器(LctechPi,CherryPi,Mangopi,F1C100S)。
搭建TFTP服务器(自行搜索),内核无需修改(推荐使用tftpd64,不要忘记指定网卡)。
将需要更新的文件放到搭建服务器目录下,其中kernel与设备树文件,SDK已经打包在一起名为boot.sd文件,在SDK的install/soc_cv1800b_milkv_duo_sd/rawimages文件夹中;uboot文件名为fip.bin,在SDK的install/soc_cv1800b_milkv_duo_sd文件夹中。
如果需要uboot从SD卡上加载kernel并启动,热更新方法如下:
此方法每次更新文件时,需写SD卡。
开发板root目录下依次执行:
mkdir rom (如果已有无需创建)
mount /dev/mmcblk0p1 /root/rom
此时进入rom目录,会看到SD卡上相关的文件,然后将搭建服务器下的,要更新的文件依次替换,执行reboot命令重启即可。
如果需要uboot从tftp服务器上下载kernel并启动,热更新方法如下:
此方法每次更新kernel文件时无需写SD卡,但是如果需要热更新uboot,需参考上一种方法。
uboot从tftp服务器上下载kernel并启动,修改代码如下:
在SDK目录下,将u-boot-2021.10/include/configs/cv180x-asic.h打开,设置如下:
修改CONFIG_IPADDR变量,使之与TFTP服务器处于同一网段,并且没有冲突;
修改CONFIG_NETMASK、CONFIG_GATEWAYIP与PC相同;
修改CONFIG_SERVERIP为TFTP服务器的IP地址
修改SD_BOOTM_COMMAND变量中的“mmc dev 0 && fatload mmc 0 ${uImage_addr} boot.sd; ”命令,修改为“tftpboot ${uImage_addr} boot.sd; ”。
再配置uboot,执行:menuconfig_uboot,
进入Command line interface,选中 Network command并进入,选中tftpboot,nfs,ping选项(其他默认不要动),然后保存退出。
最后执行build_fsbl,编译完成之后,将新生成的fip.bin文件替换SD卡中的fip.bin文件,上电启动。以后每次重启就会从tftp服务器获取kernel文件并启动,kernel文件更新后放到tftp服务器目录,执行reboot命令重启即可。
QQ:763314235,会在第一时间处理。