站在芯片原厂角度移植最新u-boot 2020.07到jz2440开发板(3)(全部驱动使用设备树与dm设备模型)

本文详细介绍了U-Boot的编译流程及定制过程,包括配置编译器、设置CPU架构、解决编译错误、定义宏、实现未定义函数等关键步骤。通过具体实例,如jz2440_defconfig配置、CONFIG_SYS_TEXT_BASE设置、CONFIG_SYS_MALLOC_LEN定义,以及reset_cpu、lowlevel_init等函数的实现,展示了如何解决编译过程中遇到的各种问题。

6. 初步编译

终于可以尝试编译了,这里关于交叉编译器的设置就不做介绍了,相信大家应该都会的,只不过需要注意的是高版本的u-boot同样需要高版本的编译器。

好的,执行如下命令,指定编译器、cpu架构,开始进行编译,
在这里插入图片描述但是,又有问题了,根据上述信息,我们还需要配置CONFIG_SYS_TEXT_BASE,这是u-boot的链接地址,我们编译好u-boot后要把可执行文件复制到内存的这个地址上才行,好,我们在jz2440_defconfig中加上这个配置,

CONFIG_ARM=y
CONFIG_TARGET_JZ2440=y
CONFIG_SYS_TEXT_BASE=0x33f00000

然后重新配置编译,
在这里插入图片描述在这里插入图片描述嗯,已经可以进行正常编译了。

终于出现错误了,
在这里插入图片描述在这里插入图片描述上述编译信息表明,我们需要定义两个宏:

  1. CONFIG_SYS_MALLOC_LEN,表明u-boot使用malloc函数时的堆内存大小;
  2. CONFIG_SYS_LOAD_ADDR,表明u-boot的source命令运行脚本时脚本在sdram的位置,看来虽然我们没有选择这个命令,但是u-boot已经默认为我们加上了。

好的,我们在jz2440.h中加入以上两个宏定义,

/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2020 Asymptote
 *
 * Configuation settings for the SAMSUNG JZ2440 board.
 */

#ifndef __CONFIG_JZ2440_H
#define __CONFIG_JZ2440_H

#define CONFIG_SYS_LOAD_ADDR		0x30800000
#define CONFIG_SYS_MALLOC_LEN		(4 * 1024 * 1024)

#endif /* __CONFIG_JZ2440_H */

这里为了方便,我将清理,配置,编译三个命令写成了一个build.sh脚本放到u-boot工程的根目录,以后调试会方便些,

make distclean
make jz2440_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

然后,./build.sh,到最后链接的时候还是有错误,
在这里插入图片描述我们首先解决第一个CONFIG_SYS_INIT_SP_ADDR宏定义的问题,这个宏的功能是指定c函数使用的栈的地址,我们在jz2440.h中加入这个宏定义,

/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2020 Asymptote
 *
 * Configuation settings for the SAMSUNG JZ2440 board.
 */

#ifndef __CONFIG_JZ2440_H
#define __CONFIG_JZ2440_H

#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值