mkimage小工具代码分析(1)

本文讲述了作者在使用AM335x的SDK移植UBOOT过程中,遇到spiflash命令无法使用的困境,通过分析设备树和设备驱动,发现原因是设备树缺少对spiflash的支持,提出了修改官方设备树或更换支持设备的解决方案。
摘要由CSDN通过智能技术生成

mkimage小工具代码分析(1)

前言:

背景:最近在学习uboot,使用的平台是AM335x提供的sdk,打算移植到我的飞凌ok335xs开发板上,spl/uboot用串口下载到板子上,是可以正常启动的,uboot启动之后我就想把uboot下载flash中,那自然需要用到uboot中的spi flash命令

sf probe 0

输入这个命令一直报错提示找不到flash,经过种种排查发现是设备树没选对,由于我的uboot文件是通过串口下载的,下载镜像u-boot-dtb.img中的设备树是拼接在uboot的尾部,我的整个操作过程如下:

  • 既然是flash用不了,那大概率是驱动的问题,那么就应该首先想到是不是设备树没有对应的设备,因此先找到设备树的初始化函数,common/board_f.c文件的函数会调用到设备树的初始化函数fdtdec_setup

  • fdtdec_setup这个函数我这里就不分析了,总结就是找出设备树的基地址(判断是否使能了宏CONFIG_MULTI_DTB_FIT,从而确定想要的一个设备树地址),再检查设备树是不是有效的;

    image-20240101185151923

    由于我并没有使能宏CONFIG_MULTI_DTB_FIT,那么uboot加载设备树将会读取第一个设备树(为什么读取第一个设备树,可以从函数fdtdec_setup找到原因),第一个设备树地址是拼接在uboot的尾部;

  • 因此,可以从lds链接文件中找到uboot最尾部的标号是什么,从下图可以看到是_image_binary_end

image-20240101180405907
  • 再从u-boot.map文件中找到_image_binary_end标号的地址,下图中发现地址是0x80877c9c,由于这款芯片的DDR基地址是0x80800000,所以可以算出设备树在u-boot-dtb.img文件中的偏移0x80877c9c-0x80800000 = 0x77c9c(注意,这里找到的偏移只是一个大概的位置,因为u-boot-dtb.img是在uboot的基础上添加了头部,所以实际的偏移应该比0x77c9c大);
image-20240101180650364
  • 就可以在偏移附近找到对应的第一个设备树,可以看到第一个设备树是am335x-evm,那我们就可以去设备树文件夹中找到对应的设备树文件,设备树源码路径是在arch/arm/dts中;
image-20240101182050996
  • 由于我的uboot配置的是单设备树在dts文件夹中我们可以找到对应的dts,但是这个dts文件并没有spi flash,所以可以解释为什么我们一直挂载不上flash;
image-20240101182905955
  • 那到这里已经发现问题,解决办法可以是修改官方的设备树去支持spi flash,或者换一个官方支持spi flash的设备树;

硬件平台:ok335xs,基于am335x

软件平台:TI官方的sdk移植而来,ti-processor-sdk-linux-am335x-evm-06.00.00.07-Linux-x86-Install.bin

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值