[V3s]lc-v3s-sdk从spinand启动切换到TF卡启动
-
背景
某宝买的一块V3s板子
默认spinand启动, 想切换到从TF卡启动.探索过程
于是把spinand flash先清空一下以排除干扰项, 参考《使用 PhoenixSuit 清空NAND,eMMC,Flash存储器》
尝试I
将原来通过PhoenixSuit烧录的镜像(lc-v3s-sdk/tools/pack/cherrypi-v3s-linux.img), 直接用PhoenixCard4.2.7烧录到TF卡, 启动报: 无法启动输出.log
- 结合日志分析当前遇到什么问题?
uboot应该应该正常启动; 应该是卡在uboot启动kernel的环节. uboot已经能发现5个mbr分区;
sunxi flash read: start 18432, sector 128 <=> mmcboot read: start 0x4800, sector 0x80
并且创建hash表, 一切正常;
注意到, uboot上对fat文件系统操作还算正常; 以下指令均正常
fatdown - download data to a dos filesystem fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /)
- 定位错误代码段
u-boot-2011.09\fs\fat\fat_write.c file_fat_read (const char *filename, void *buffer, unsigned long maxsize){ do_fat_read (const char *filename, void *buffer, unsigned long maxsize, int dols){ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster,dir_entry **retdent, char *l_name) { debug("Error: VFAT name is too long\n");
分析错误, 有可能指向无法访问一些东西. 这需要我们进一步反推高层调用fat操作的意图, uboot并不太复杂, 所以把关注点放在bootcmd相关的指令上;
解决方案
结合打包脚本的意图:
分析build_uboot()里的make参数sun8iw8p1_spinand_emmc
再结合分析uboot启动脚本并捣腾uboot里fat相关的工具, 发现其0:1分区是FAT格式.
uboot里emmc启动脚本是企图读取0:1分区里的uImage文件; 下图为uboot-env:
遂通过TF读卡器接入电脑, 将编译好的uImage复制到该FAT分区---正常启动;
rootfs也顺利地从/dev/mmcblk0p7读出并加载; - 结合日志分析当前遇到什么问题?
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号