Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    [V3s]lc-v3s-sdk从spinand启动切换到TF卡启动

    其它全志芯片讨论区
    1
    1
    1027
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • aldfaaa
      whycan矿工-小叶 LV 7 last edited by

      背景

      某宝买的一块V3s板子
      9e2f6d1b-b3d2-4b4d-a1f0-965f25c2d5f1-58e33c7d3b9c63a8f13e934ad1b0caa.jpg
      默认spinand启动, 想切换到从TF卡启动.

      探索过程

      于是把spinand flash先清空一下以排除干扰项, 参考《使用 PhoenixSuit 清空NAND,eMMC,Flash存储器》

      尝试I

      将原来通过PhoenixSuit烧录的镜像(lc-v3s-sdk/tools/pack/cherrypi-v3s-linux.img), 直接用PhoenixCard4.2.7烧录到TF卡, 启动报: 无法启动输出.log
      bc347fd9-2f17-471d-8fe5-25d5c3574c60-image.png

      • 结合日志分析当前遇到什么问题?
        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相关的指令上;

      解决方案

      结合打包脚本的意图:
      1b6b0b6d-62ed-453b-a72f-1dca1b8ed3ca-image.png

      分析build_uboot()里的make参数sun8iw8p1_spinand_emmc
      843e45d9-5087-4ac9-bb9d-0f1de6dd7cb4-微信图片_20230516095443.png

      再结合分析uboot启动脚本并捣腾uboot里fat相关的工具, 发现其0:1分区是FAT格式.
      uboot里emmc启动脚本是企图读取0:1分区里的uImage文件; 下图为uboot-env:
      6771a5bb-f555-4c06-8ef0-9214bfe923b0-a8787b0f32d936af65db0c514ef4a73.png

      遂通过TF读卡器接入电脑, 将编译好的uImage复制到该FAT分区---正常启动;
      rootfs也顺利地从/dev/mmcblk0p7读出并加载;

      1 Reply Last reply Reply Quote Share 0
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策