历史上的今天
今天是:2025年01月04日(星期六)
2021年01月04日 | 移植u-boot-2016.11到TQ2440开发板全过程记录
2021-01-04 来源:eefocus
移植前的准备
获取并解压源码
SAMSUNG公司于2017年初停止了对S3C2410系列CPU的官方u-boot支持(可在最新版u-boot源码中打开doc/README.scrapyard,搜索关键字S3C2440查看相关说明)。从http://ftp.denx.de/pub/u-boot/下载支持S3C2410处理器的最后一版官方u-boot源码u-boot-2016.11.tar.bz2,放到宿主机的/opt/u-boot/下。
解压源代码并进入根目录:
tar jxvf u-boot-2016.11.tar.bz2
cd u-boot-2016.11/
指定交叉编译器
gedit Makefile
找到:
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
在下方新插入一行:
CROSS_COMPILE ?=arm-linux-
创建板卡支持文件
(1)创建板卡支持文件夹
拷贝官方smdk2410文件夹进行修改:
cp -rf board/samsung/smdk2410/ board/samsung/tq2440
(2)修改板卡硬件初始化文件
gedit board/samsung/tq2440/lowlevel_init.S
修改s3c2410.S为tq2440.S,修改SMDK2410为TQ2440。
(3)修改板卡高级初始化文件
重命名该文件夹下的smdk2410.c为tq2440.c:
mv board/samsung/tq2440/smdk2410.c board/samsung/tq2440/tq2440.c
编辑该文件:
gedit board/samsung/tq2440/tq2440.c
替换所有SMDK2410为TQ2440,并添加编译选项。
gedit board/samsung/tq2440/Makefile
修改smdk2410.o为tq2440.o
(4)修改板卡配置文件
编辑该文件:
gedit board/samsung/tq2440/Kconfig
内容为:
if TARGET_TQ2440
config SYS_BOARD
default "tq2440"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s3c24x0"
config SYS_CONFIG_NAME
default "tq2440"
endif
(5)添加板卡支持文件信息
gedit arch/arm/Kconfig
找到
config TARGET_SMDK2410
bool "Support smdk2410"
select CPU_ARM920T
在下方插入:
config TARGET_TQ2440
bool "Support tq2440"
select CPU_ARM920T
找到:
source "board/samsung/smdk2410/Kconfig"
在下方插入:
source "board/samsung/tq2440/Kconfig"
(6)修改板卡支持维护信息
gedit board/samsung/tq2440/MAINTAINERS
修改内容为:
TQ2440 BOARD
M: Lion <41979748@qq.com>
S: Maintained
F: board/samsung/tq2440/
F: include/configs/tq2440.h
F: configs/tq2440_defconfig
(7)添加板卡识别信息
gedit arch/arm/include/asm/mach-types.h
找到:
#define MACH_TYPE_SMDK2410 193
在下方插入:
#define MACH_TYPE_TQ2440 168
找到:
#ifdef CONFIG_ARCH_SMDK2410
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_SMDK2410
# endif
# define machine_is_smdk2410() (machine_arch_type == MACH_TYPE_SMDK2410)
#else
# define machine_is_smdk2410() (0)
#endif
在下面插入一段:
#ifdef CONFIG_ARCH_TQ2440
# ifdef machine_arch_type
# undef machine_arch_type
# define machine_arch_type __machine_arch_type
# else
# define machine_arch_type MACH_TYPE_TQ2440
# endif
# define machine_is_tq2440() (machine_arch_type == MACH_TYPE_TQ2440)
#else
# define machine_is_tq2440() (0)
#endif
创建板卡配置头文件
cp include/configs/smdk2410.h include/configs/tq2440.h
编辑该文件:
gedit include/configs/tq2440.h
替换S3C2410为S3C2440,替换SMDK2410为TQ2440
创建NAND Flash驱动文件
cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
编辑该文件:
gedit drivers/mtd/nand/s3c2440_nand.c
添加编译选项:
gedit drivers/mtd/nand/Makefile
找到:
obj-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
在下方插入一行:
obj-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
创建默认编译配置文件
创建tq2440开发板默认配置文件:
cp configs/smdk2410_defconfig configs/tq2440_defconfig
编辑该文件:
gedit configs/tq2440_defconfig
修改开发板目标:
替换CONFIG_TARGET_SMDK2410=y为CONFIG_TARGET_TQ2440=y;
修改命令行前缀:
替换CONFIG_SYS_PROMPT="SMDK2410 # "为CONFIG_SYS_PROMPT="TQ2440 # ";
测试编译环境
(1)清理环境并重新编译
make distclean
make tq2440_defconfig
make
编译失败,并提示” Not enough room for program headers, try linking with -N”错误:

错误信息:
arm-linux-ld.bfd: u-boot: Not enough room for program headers, try linking with -N
arm-linux-ld.bfd: final link failed: Bad value
Makefile:1209: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1
(2)根据网上资料,修改顶层配置文件:
gedit Makefile
找到:
LDFLAGS_u-boot += $(LDFLAGS_FINAL)
在下面插入:
# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards
LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
(3)重新编译
make
在根目录下生成了u-boot.bin文件,但提示“Error: You must add new CONFIG options using Kconfig”错误

错误信息:
Error: You must add new CONFIG options using Kconfig
The following new ad-hoc CONFIG options were detected:
CONFIG_NAND_S3C2440
CONFIG_SYS_S3C2440_NAND_HWECC
CONFIG_TQ2440
Please add these via Kconfig instead. Find a suitable Kconfig
file and add a 'config' or 'menuconfig' option.
Makefile:827: recipe for target 'all' failed
make: *** [all] Error 1
这一个错误产生的原因是修改了配置头文件中的默认宏定义而导致配置检查无法通过,如果根据消息提示手工在whitelist.txt文件中添加相应宏,由于不知道whitelist.txt文件中的排序规则,仍旧可能报错。
(4)解决白名单校验不通过问题
根据网上资料来看,目前切实有效的解决办法是关闭该校验功能。
gedit Makefile
找到:
$(srctree)/scripts/check-config.sh u-boot.cfg
$(srctree)/scripts/config_whitelist.txt ${srctree} 1>&2
在开头位置使用#屏蔽这两行:
# $(srctree)/scripts/check-config.sh u-boot.cfg
# $(srctree)/scripts/config_whitelist.txt ${srctree} 1>&2
创建自动编译批处理脚本
(1)编写自动编译脚本
gedit auto_build.sh
添加如下内容:
#!/bin/bash
echo "Clean Configuration File..."
make distclean
echo "Clean Obj..."
make clean
echo "Load Configuration File..."
make tq2440_defconfig
echo "make..."
make CROSS_COMPILE=arm-linux-
echo "Copy bins to TFTP Folder...."
cp /opt/u-boot/u-boot-2016.11/u-boot.bin /opt/TFTP/u-boot.bin
cp /opt/u-boot/u-boot-2016.11/spl/u-boot-spl.bin /opt/TFTP/u-boot-spl.bin
(2)为自动编译脚本文件添加执行权限
sudo chmod +X auto_build.sh
(3)修改自动编译脚本文件所有者
sudo chown -R tq2440:root /opt/u-boot/u-boot-2016.11/auto_build.sh
(4)执行自动编译脚本
bash ./auto_build.sh
编译成功:

小结
至此,我们完成了u-boot-2016.11移植到TQ2440开发板的前期准备工作。
修改芯片初始化代码
修改屏蔽中断代码
gedit arch/arm/cpu/arm920t/start.S
找到:
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
在下面为S3C2440芯片添加:
# if defined(CONFIG_S3C2440)
ldr r1, =0x7ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
修改时钟初始化代码
(1)修改芯片时钟初始化代码
gedit arch/arm/cpu/arm920t/start.S
找到:
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
替换为:
#if defined(CONFIG_S3C2440)
#define CLK_CTL_BASE 0x4C000000
#define MDIV_405 0x7f<<12
#define PSDIV_405 0x21
/* FCLK:HCLK:PCLK = 1:4:8 */
/* default FCLK is 405 MHz ! */
ldr r0, =CLKDIVN
mov r1, #5
str r1, [r0]
/* set asynchronous bus mod */
mrc p15, 0, r1, c1, c0, 0
orr r1, r1, #0xc0000000
mcr p15, 0, r1, c1, c0, 0
/* MPLL is 405 MHz ! */
mov r1, #CLK_CTL_BASE
mov r2, #MDIV_405
add r2, r2, #PSDIV_405
str r2, [r1, #0x04]
#else
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 120 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]
#endif /* CONFIG_S3C2440 */
(2)修改板卡时钟初始化代码
gedit board/samsung/tq2440/tq2440.c
添加一个新的FCLK配置模式,找到:
#define FCLK_SPEED 1
修改为:
#if !defined(CONFIG_S3C2440)
#define FCLK_SPEED 1
#else
#define FCLK_SPEED 2
#endif /* CONFIG_S3C2440 */
找到对应的配置项:
#if (FCLK_SPEED == 0) /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif (FCLK_SPEED == 1) /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
添加配置模式为2的分支选项:
#if (FCLK_SPEED == 0) /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif (FCLK_SPEED == 1) /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#elif (FCLK_SPEED == 2) /* Fout = 405Hz */
#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif
添加一个新的UCLK配置模式,找到:
#define USB_CLOCK 1
替换为:
#if !defined(CONFIG_S3C2440)
#define USB_CLOCK 1
#else
#define USB_CLOCK 2
#endif /* CONFIG_S3C2440 */
找到对应的配置项:
#if (USB_CLOCK == 0)
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif (USB_CLOCK == 1)
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif
添加配置模式为2的分支选项:
#if (USB_CLOCK == 0)
#define U_M_MDIV 0xA1
史海拾趣
|
全球汽车半导体面临极大的市场机会,但设计工程师同样面临在成本、功耗、安全性等多方面的技术挑战。本文以可接收和发送数据的最新智能应答器为例,向中国汽车设计工程师介绍了在汽车无线接入系统设计中解决这些挑战的技术方法。 … 查看全部问答> |
|
用“复杂”来形容当今的汽车是再恰当不过的一个词。安全、操控、驱动和娱乐仅仅是依赖电子/电气架构的部分子系统。如今的驾驶者都希望他们的座驾能够无限精准且不间歇地运转。但是控制整个汽车的电子神经系统的内部却是如此的复杂。如今,大部分汽 ...… 查看全部问答> |
|
单片机音乐播放中歌曲的代码怎样弄出来的? 我看了网上的一些教程。。一个个的算很麻烦。。而且我对音乐不熟悉。 这样效率很低。。有没有一些快点的方法? 先在这里谢了~… 查看全部问答> |
|
编程环境:evc 程序的功能:点击按钮弹出对话框 情况说明: 在evc下采用MFC编写应用程序,实现点击按钮button1,弹出对话框,用鼠标点击,没有问题,可以正常运行,点击键盘上的ENTER键(确定),也可以弹出对话框。 由于需要进行按钮美化,将b ...… 查看全部问答> |
|
现在开发一个基于嵌入式的边缘检测系统,大概实现工业领域对产品零件的检测。该系统通过微型工业相机拍摄零件图片。然后对图片中零件进行边缘检测,来标定零件是否合格。 问题: 1.这种方案有无可行性? 2.硬件用ARM还是DSP? 3.有没有相关领域 ...… 查看全部问答> |
|
前面的是个阻容衰减电路,在衰减100倍时,跟随输出时正常的,但衰减10倍的时候跟随输出被放大了,要求10M带宽,实际仿真的时候都正常,但我搭出电路却不是那么回事了,似乎是跟随前的输入阻抗引起的,但跟随的输入阻抗很高,困惑中··· [ 本帖最 ...… 查看全部问答> |
|
最近想DIY一个遥控电源插座,希望大家给个建议:收集了一些资料,但感觉不太满意,如下:PH303A×2红外脉冲发射电路如下图所示,调节RP1,使其振荡频率为12kHz.红外遥控接收电路:… 查看全部问答> |
|
中文名:51单片机应用开发范例大全 作者:宋戈 图书分类:硬件 资源格式:PDF 版本:扫描版 出版社:人民邮电出版社 书号:9787115218322 发行时间:2010年2月 地区:大陆 语言:简体中文简介: 内容简介: 当前,单片机在各个领域的应用十分广 ...… 查看全部问答> |




