赞
踩
时间过的真快呀,一眨眼已经十年过去了。记得首次学习uboot的时候是十年前,通过看readme来学习的,然后学习了汇编和makefile及uboot流程及kernel的传参等。至少花费了2个多月业余时间。
本轮重新学习也是有必要性的,技术及框架都在不断的更新,之前是没有SPL及设备树的。之前是初学了解,本次学习的目的则是进一步了解,并且查漏补缺。侧重memory这块,因为它是很重要的一块内容,而我以前缺我重视,然后对应图形图像也和memory有关。所以作为我本轮学习的重点内容。
目标:
1.下载了最新版本uboot 2020_10_r4进行编译后,期望能正常引导。--ok
2.定制化,删除无用功能,保留必要功能。(不用修改代码及makefile进行深度定制,只要能随心所欲的进行Kconfig配置修改即可)--ok
3.了解启动后函数调用关系。--ok
4.了解文件夹含义及框架。--ok
5.结合芯片手册,看懂连接脚本中的分区。启动位置等。--ok
6.SPL及uboot时候的堆栈布局。--ok
问题1:无法识别uboot.img
U-Boot SPL 2020.10-rc4 (Sep 14 2020 - 20:30:39 +0800)
WDT: Not found!
Trying to boot from MMC1
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
spl_load_image_fat: error reading image u-boot.img, err - -2
Loading Environment from FAT... *** Warning - bad CRC, using default environment
Loading Environment from MMC... *** Warning - bad CRC, using default environment
spl_load_image_ext: ext4fs mount err - 0
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###
根本原因,我没有copy u-boot.img到fat32的boot文件夹。
问题2:在include/log.h中添加#define DEBUG后,编译出错,说超过了sram定义的空间大小
image.png
想要快速看懂linux框架代码,不方便像单片机这样单步走或者打断点看callstack,当然linux可以通过gdb,但是最常用的方法还是通过打印信息。并且debug函数早已经添加入了,为什么不用呢!通过debug进入后,发现需要开启DEBUG宏。修改代码后报错。正好需要分析下lds链接文件。
uboot中用的lds文件路径在哪里?
1. u-boot.lds路径
找编译使用的文件,那么必须靠Makefile这张地图呢~通过搜索lds关键字,进行反向关联搜索,找到如下信息后,确认board\ti\am335x\u-boot.lds是bb-black的路径。我对比了下arch/arm/cpu下的u-boot.lds后发现ti文件夹中少了security相关位置的布局,所以我将ti路径下的u-boot.lds修改为u-boot_bak.lds等于makfile搜索的时候为空则去arch/arm/cpu下找。结果也能正常启动。
.config文件
CONFIG_SYS_ARCH="arm"
CONFIG_SYS_CPU="armv7"
CONFIG_SYS_SOC="am33xx"
CONFIG_SYS_VENDOR=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。