首页 > 其他分享 >uboot定制自己的板子--Apple的学习笔记

uboot定制自己的板子--Apple的学习笔记

时间:2023-10-20 20:32:02浏览次数:41  
标签:uboot Apple -- Boot ap imply SPL board am335

一,前言

既然下载了最新的uboot版本,那么就玩玩吧,先要定制自己的板子。

二,问题分析及解决

1,出错信息

U-Boot SPL 2023.10 (Oct 19 2023 - 19:58:50 +0800)
Trying to boot from MMC1


U-Boot 2023.10 (Oct 19 2023 - 19:58:50 +0800)Apple Cai's am335 Board

CPU  : AM335X-GP rev 2.1
Model: TI AM335x EVM
DRAM:  512 MiB
Core:  150 devices, 13 uclasses, devicetree: separate
NAND:  0 MiB
MMC:   OMAP SD/MMC: 0
Loading Environment from FAT... OK
initcall sequence 9ffdbcdc failed at call 8080253d (err=-19)
### ERROR ### Please RESET the board ###

2,分析搜索出错关键字后,在doc帮助中提示at call是一个uboot.map中的地址,可以通过它来找initcall sequence中的函数名称。搜索8080253d找不到,然后找到了类似,看起来都有字节填充。

.text.arch_misc_init
                0x000000008080253c       0x16 arch/arm/mach-omap2/am33xx/board.o
                0x000000008080253c                arch_misc_init
 *fill*         0x0000000080802552        0x2

arch_misc_init是usb用的,我记得usb的device我都没有配置

ret = uclass_first_device_err(UCLASS_MISC, &dev);
    if (ret) {
        return ret;
    }

继续看ret值-19是什么错误

int uclass_first_device_err(enum uclass_id id, struct udevice **devp)

{
    int ret;
    ret = uclass_first_device_check(id, devp);
    if (ret)
        return ret;
    else if (!*devp)
        return -ENODEV;
    return 0;
}

果然-ENODEV就是-19,也就是说明在uclass中没有找到device。那么设备树没有设置misc,那么我就不应该配置驱动了。

#ifdef CONFIG_ARCH_MISC_INIT
    arch_misc_init,     /* miscellaneous arch-dependent init */
#endif

在common/Kconfig中可以找到

config ARCH_MISC_INIT
	bool "Call arch-specific init after relocation, when console is ready"

3,那么我自己的am335_ap_defconfig中CONFIG_ARCH_MISC_INIT注释掉,重新编译,上电成功。可以ping通,但是发现板子名称不对,说明我新加的board文件夹中的文件都没有被编译。

U-Boot SPL 2023.10 (Oct 19 2023 - 21:04:31 +0800)
Trying to boot from MMC1

U-Boot 2023.10 (Oct 19 2023 - 21:04:31 +0800)Apple Cai's am335 Board

CPU  : AM335X-GP rev 2.1
Model: TI AM335x EVM
DRAM:  512 MiB
Core:  150 devices, 13 uclasses, devicetree: separate
NAND:  0 MiB
MMC:   OMAP SD/MMC: 0
Loading Environment from FAT... OK
Net:   eth2: ethernet@4a100000
Hit any key to stop autoboot:  0
AP-Boot=> ping 192.168.0.110
link up on port 0, speed 100, full duplex
Using ethernet@4a100000 device
host 192.168.0.110 is alive
AP-Boot=> printenv board_name
board_name=A335BNLT

4, 发现board_name不对。board_name来自自定义的Kconfig中的SYS_BOARD,然后条件是TARGET_AM335_AP而不是TARGET_AM335X_EVM,所以在arch/arm/mach-omap2/am33xx/Kconfig中注释掉原来的,改成新的。

5,编译出现问题

arm-linux-gnueabihf-ld.bfd: cannot find board/ti/am335x/built-in.o

搜索build-in.o,然后思考ld链接的时候出错,不是编译o的时刻出错,那么想到了应该是链接文件有问题,找到位置board/ti/am335_ap/u-boot.lds,果然错误了,am335x需要修改为am335_ap

.text :
	{
		*(.__image_copy_start)
		*(.vectors)
		CPUDIR/start.o (.text*)
		board/ti/am335x/built-in.o (.text*)
	}

6,又报错了

board/ti/am335_ap/board.o: In function `board_late_init':
/work/giteecode/uboot/u-boot-2023.10/am335x_evm/../board/ti/am335_ap/board.c:841: undefined reference to `set_board_info_env'

于是把CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG先设置为n

7,又出问题了

drivers/power/pmic/pmic_tps65910.o: In function `power_tps65910_init':
/work/giteecode/uboot/u-boot-2023.10/am335x_evm/../drivers/power/pmic/pmic_tps65910.c:43: undefined reference to `i2c_get_chip_for_busnum'
drivers/power/pmic/pmic_tps65910.o: In function `tps65910_read_reg':
/work/giteecode/uboot/u-boot-2023.10/am335x_evm/../drivers/power/pmic/pmic_tps65910.c:20: undefined reference to `dm_i2c_reg_read'

通过信息看出tps设备是power设备,而且用到了i2c,于是把这2块的设备树内容添加上即可解决。 i2c我用了0,是之前看dm信息看到的。

i2c           0  [   ]   i2c_omap              |   |-- i2c@44e0b000
 pmic          0  [   ]   tps65217 pmic         |   |   `-- tps@24

三,主要修改

1,先copy一份board文件夹,头文件及defconfig,和自己的dts文件。

2,加Kconfig内容,在arch/arm/mach-omap2/Kconfig下添加

source "board/ti/am335_ap/Kconfig"

在arch/arm/mach-omap2/am33xx/Kconfig路径下找到TARGET_AM335X_EVM然后下方添加

config TARGET_AM335_AP
	bool "Support am335_ap"
	select BOARD_LATE_INIT
	select DM
	select DM_GPIO
	select DM_SERIAL
	select TI_I2C_BOARD_DETECT
	imply CMD_DM
	imply SPL_DM
	imply SPL_DM_SEQ_ALIAS
	imply SPL_ENV_SUPPORT
	imply SPL_FS_EXT4
	imply SPL_FS_FAT
	imply SPL_GPIO
	imply SPL_I2C
	imply SPL_LIBCOMMON_SUPPORT
	imply SPL_LIBDISK_SUPPORT
	imply SPL_LIBGENERIC_SUPPORT
	imply SPL_MMC
	imply SPL_NAND_SUPPORT
	imply SPL_OF_LIBFDT
	imply SPL_POWER
	imply SPL_SERIAL
	help
	  This option specifies support for the AM335 apple
	  board.

3,自己目录的kconfig内容为

if TARGET_AM335_AP

config SYS_BOARD
	default "am335_ap"

config SYS_VENDOR
	default "ti"

config SYS_SOC
	default "am33xx"

config SYS_CONFIG_NAME
	default "am335_ap"

config NOR
	bool "Support for NOR flash"
	help
	  The AM335x SoC supports having a NOR flash connected to the GPMC.
	  In practice this is seen as a NOR flash module connected to the
	  "memory cape" for the BeagleBone family.

source "board/ti/common/Kconfig"

endif

4,自定义的defconfig中CONFIG_OF_LIST修改为"am335_ap",这一个即可 由于这是搜索list,需要在arch/arm/dts/Makefile文件中的dtb-$(CONFIG_AM33XX) +=下面的列表中进行添加am335_ap.dts。

5,修改控制命令符号 在ap355_ap_defconfig设置CONFIG_SYS_PROMPT="AP-Boot=> "

6,设备特别的板子名称 在ap355_ap_defconfig设置CONFIG_IDENT_STRING="Apple Cai's am335 Board"

7,添加自定义cmd命令apled 只要自己新建一个c文件,然后参考其它cmd文件夹下的模板,添加Kconfig和Makefile中的配置项即可。内容仅仅是printf,没有进行调用api直接控制led。

四,成功的输出效果

board_name是新加的自定义板子ap335_ap,apled的新加命令及参数也可以正常运行。 自定义的板子信息"Apple Cai's am335 Board"及自定义的命令符"AP-Boot=>"显示正常。

U-Boot SPL 2023.10 (Oct 20 2023 - 19:37:40 +0800)
Trying to boot from MMC1

U-Boot 2023.10 (Oct 20 2023 - 19:37:40 +0800)Apple Cai's am335 Board

CPU  : AM335X-GP rev 2.1
Model: TI AM335x EVM
DRAM:  512 MiB
Core:  154 devices, 16 uclasses, devicetree: separate
NAND:  0 MiB
MMC:   OMAP SD/MMC: 0
Loading Environment from FAT... 
Unable to read "uboot.env" from mmc0:1...
<ethaddr> not set. Validating first E-fuse MAC
Net:  eth2: ethernet@4a100000
Hit any key to stop autoboot:  0
AP-Boot=> printenv board_name
board_name=am335_ap
AP-Boot=> apled led on
led name = led,set to on

五,小结

关于驱动开发就是要多动动手,有时候看起来很容易,感觉半小时就完成了,但是没想到过程中还有那么多小坑。

然后我还有一个小问题没有解决,关于arch_misc_init,device没有设置而driver配置了居然会报错,感觉设计的没有解耦,我记得应该设备和驱动分离的,然后再进行绑定,不应该会报错的。明天把uboot的dm驱动的绑定再深入看看代码流。


标签:uboot,Apple,--,Boot,ap,imply,SPL,board,am335
From: https://blog.51cto.com/AppleCai/7959181

相关文章

  • 无涯教程-Arduino - for语句函数
    for循环执行语句预定次数。forloop-语法for(initialize;control;incrementordecrement){//语句块}forloop-示例for(counter=2;counter<=9;counter++){//statements块将执行10次}forloop-执行序列参考链接https://www.learnfk.com/arduin......
  • doxygen使用说明
    前言最近在工作的时候经常需要打包库,提供给到客户使用,在打包的过程中需要编写接口使用文档,之前都是自己一个接口一个接口重新编写的使用说明,感觉十分麻烦。在一次开会交流的时候,一个大佬推荐了我使用doxygen这个软件,仔细研究了一下发现,需要芯片厂,例如TI、ST等他们的使用文档都是......
  • Python 条件和 if 语句
    Python支持来自数学的通常逻辑条件:等于:a==b不等于:a!=b小于:a<b小于或等于:a<=b大于:a>b大于或等于:a>=b这些条件可以以多种方式使用,最常见的是在"if语句"和循环中使用。if语句是使用if关键字编写的。示例,if语句:a=33b=200ifb>a:print("bisgreate......
  • 今日总结
    今天学习了C#编程,以及 WinForm入门课程以及图形界面GUI编程;开始接触这门语言,虽然其与JAVA和CC++有许多不同之处,但通过之前的学习,还是很容易掌握基本的特性的;我计划做一个c/s界面的与数据库交互的信息管理系统,其与以往的b/s方式有着很多不同,但又有着许多共通之处。......
  • Diagnostic Port on Electronic Engine and Transmission
    DiagnosticConnectorTesttheConnectiontotheECMusingcatetdiagnostickitToolkitDeutschConnectors(6/9-Pin)NOTE:OntheDeutsch9-pinSAEStandardHeavy-DutyTruckConnector,pinsHandJarelabeled"OEMSpecific".SometruckOEMshaveu......
  • 作物杂交(2020蓝桥杯省赛)
    题目作物杂交是作物栽培中重要的一步。已知有 N种作物(编号 1 至 N ),第 i 种作物从播种到成熟的时间为 Ti​。作物之间两两可以进行杂交,杂交时间取两种中时间较长的一方。如作物A种植时间为5天,作物B种植时间为7天,则AB杂交花费的时间为7天。作物杂交会产生固......
  • 力扣每日一题+python知识点回顾(三)
    力扣题目:根据规则将箱子分类(题号:2525)给你四个整数length,width,height和mass,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子类别的字符串。如果满足以下条件,那么箱子是"Bulky"的:箱子至少有一个维度大于等于10^4。或者箱子的体积大于等于10^9。如果箱子的......
  • DataWhale DAY4 变量和函数
    DataWhaleDAY4变量和函数语法部分:https://www.cnblogs.com/hewo/p/17635277.html上文提到过的一点,python是动态数据类型,它没有传统的定义,自然就可以在赋值的时候,新值不一定要和旧值相同类型。老生常谈的问题:别乱用关键词,其实python的关键词啊什么的还好,基本上要先加上库,不......
  • C#输出文字对齐,空格位数对齐
    [C#]Console.WriteLine("-------------------------------");Console.WriteLine("FirstName|LastName|Age");Console.WriteLine("-------------------------------");Console.WriteLine($"{"Bill",-10}|{"G......
  • STATA 正则表达式应用
    ​​1、匹配函数:regexm()和ustrregexm()(1)regexm(s,re)函数第一个参数s表示字符串,第二个参数re代表正则表达式,如果正则表达式匹配到字符串s中的某个子字符串,则函数regexm(s,re)的返回值为1,否则为0。但是值得注意的是,由于regexm()是早期版本的正则表达式函数,所以不能识别元字符......