移植u-boot-2015.07-rc3之增加smdk2440开发板框架支持(一)
2015-08-02 21:22
477 查看
本系列博客将基于MINI2440开发板移植最新uboot、最新linux kernel、最新busybox、最新Qt。本系列文章记录的过程尽量按照修改->出错->修改->正确的方式记录,带有讲解性质,可能会有点啰嗦,如果您有移植基础建议直接下载我提供的源码参考。
看明白本文需要有一点移植基础,了解Linux简单命令和一些工具的使用。我的每一篇移植过程我都尽量做到实验两遍,确保不会出错。
进入u-boot官网下载最新的u-boot,我下载时最新的版本是u-boot-2015.07-rc3.tar.bz2。
配置交叉编译工具:
复制241行到243行并添加编译工具链前缀,添加后的效果如下:
root@ubuntu:/home/uboot/u-boot-2015.07-rc3#make
编译
编译成功。但是这并不是我需要的uboot,因为在编译的过程中看到:
明显在板级支持上使用的还是2410开发板的文件,所以在这里需要查看一下smdk2440_defconfig里面是什么:
所以在这里需要把SMDK2410修改为SMDK2440,修改结果如下:
保存退出,执行命令makedistclean清除工程
清除工程后重新配置uboot 命令:makesmdk2440_defconfig
make编译
编译出错,错误如下:
上述错误说include/config.h文件中找不到头文件configs/.h,打开include/config.h看一下:
vim include/config.h
提示说这个文件include/config.h是自动生成的。
遇到这种不明所以的情况,我们回到smdk2410的开发板查看使用2410是什么情况。
make distclean
make smdk2410_defconfig
make
vim include/config.h 可以看到:
很明显在配置smdk2440的时候出了问题,导致生成的include/config.h文件不正确。这个时候应该分析uboot的Makefile结构,但是我们这里使用比较粗暴的方法,直接检索uboot的配置中有smdk2410的地方都增加smdk2440的支持。
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# make distclean && clear
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# grep "smdk2410" * -nR
根据查找的结果标记出关于配置相关的文件位置(查找结果中红色标记的位置)。
vim打开arch/arm/Kconfig的85行看到:
增加对smdk2440的支持:
修改结果如下:
打开arch/arm/Kconfig的946行看到:
vim arch/arm/Kconfig +946
添加对smdk2440的配置,配置结果如下:
打开board/samsung/smdk2440/Kconfig是这样的:
vim board/samsung/smdk2440/Kconfig:
把上面board/samsung/smdk2440/Kconfig中所有的2410修改成2440,其他不变。
修改结果如下:
打开board/samsung/smdk2440/Makefile并修改其中的2410为2440,修改后的结果如下:
修改完上面的3个文件后感觉是修改完了,编译一下试试:
make distclean
make smdk2440_defconfig
make
编译成功,并且编译过程中有:
基本确定现在针对smdk2440的uboot框架已经修改成功。
接下来使用sourceInsight建立uboot工程,方便查看修改代码。
我的sourceInsight是安装在Ubuntu中的,这样直接在Ubuntu中修改以后就直接可以编译了。当然也可以在windows中修改相关文件后再传入虚拟机编译。在建立uboot的sourceInsight工程的时候建议针对性的添加smdk2440的板级文件(board目录下)、arm9内核(arch/arm目录下)文件,以及include/configs下的smdk2440.h文件。这样在使用sourceInsight的过程中会方便很多。
保存现有阶段成果,方便以后修改。
下一小节修改uboot支持SDRAM和SPL启动。
完全按本系列教程修改好的u-boot源码提供给大家下载,你在以后的移植过程中可以参考着移植。注意这个u-boot只能以nor启动(原因在后面的文章会讲到),功能已完善。
u-boot-2015.07-rc3 : http://download.csdn.net/detail/doccode/8954291
看明白本文需要有一点移植基础,了解Linux简单命令和一些工具的使用。我的每一篇移植过程我都尽量做到实验两遍,确保不会出错。
进入u-boot官网下载最新的u-boot,我下载时最新的版本是u-boot-2015.07-rc3.tar.bz2。
解压u-boot:tar jxvf u-boot-2015.07-rc3.tar.bz2 进入解压后的目录:cd u-boot-2015.07-rc3/ 配置处理器架构:make menuconfig Architecture select (Sandbox) ---> (X) ARM architecture 保存退出。 |
配置交叉编译工具:
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# vim Makefile 搜索 CROSS vim命令: /CROSS 可以看到如下内容: 239 # set default to nothing for native builds 240 ifeq ($(HOSTARCH),$(ARCH)) 241 CROSS_COMPILE ?= 242 endif 243 |
240 ifeq ($(HOSTARCH),$(ARCH)) 241 CROSS_COMPILE ?= 242 endif 243 244 CROSS_COMPILE ?=arm-linux- 245 246 KCONFIG_CONFIG ?= .config |
拷贝smdk2410开发板的默认配置文件: root@ubuntu:/home/uboot/u-boot-2015.07-rc3# cp configs/smdk2410_defconfig configs/smdk2440_defconfig 拷贝smdk2410开发板的配置头文件: root@ubuntu:/home/uboot/u-boot-2015.07-rc3# cp include/configs/smdk2410.h include/configs/smdk2440.h 建立smdk2440开发板的板级支持文件夹并拷贝相关内容: root@ubuntu:/home/uboot/u-boot-2015.07-rc3# mkdir ./board/samsung/smdk2440 root@ubuntu:/home/uboot/u-boot-2015.07-rc3# cp ./board/samsung/smdk2410/* ./board/samsung/smdk2440/ -rf 配置smdk2440开发板的默认配置: root@ubuntu:/home/uboot/u-boot-2015.07-rc3# make smdk2440_defconfig # # configuration written to .config # |
root@ubuntu:/home/uboot/u-boot-2015.07-rc3#make
编译
编译成功。但是这并不是我需要的uboot,因为在编译的过程中看到:
LD board/samsung/common/built-in.o CC board/samsung/smdk2410/smdk2410.o AS board/samsung/smdk2410/lowlevel_init.o LD board/samsung/smdk2410/built-in.o CC common/main.o |
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# vim configs/smdk2440_defconfig CONFIG_ARM=y CONFIG_TARGET_SMDK2410=y # CONFIG_CMD_SETEXPR is not set |
CONFIG_ARM=y CONFIG_TARGET_SMDK2440=y # CONFIG_CMD_SETEXPR is not set |
清除工程后重新配置uboot 命令:makesmdk2440_defconfig
make编译
编译出错,错误如下:
scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config.h UPD include/config.h GEN include/autoconf.mk In file included from ./include/common.h:18: include/config.h:5:22: error: configs/.h: No such file or directory make[1]: *** [include/autoconf.mk] Error 1 make: *** No rule to make target `include/config/auto.conf', needed by `include/config/uboot.release'. Stop. |
vim include/config.h
/* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/ #include <config_defaults.h> #include <config_uncmd_spl.h> #include <configs/.h> #include <asm/config.h> #include <config_fallbacks.h> |
遇到这种不明所以的情况,我们回到smdk2410的开发板查看使用2410是什么情况。
make distclean
make smdk2410_defconfig
make
vim include/config.h 可以看到:
/* Automatically generated - do not edit */ #define CONFIG_BOARDDIR board/samsung/smdk2410 #include <config_defaults.h> #include <config_uncmd_spl.h> #include <configs/smdk2410.h> #include <asm/config.h> #include <config_fallbacks.h> |
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# make distclean && clear
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# grep "smdk2410" * -nR
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# grep "smdk2440" * -nR root@ubuntu:/home/uboot/u-boot-2015.07-rc3# grep "smdk2410" * -nR arch/arm/Kconfig:85: bool "Support smdk2410" arch/arm/Kconfig:946:source "board/samsung/smdk2410/Kconfig" arch/arm/include/asm/mach-types.h:1648:# define machine_is_smdk2410() (machine_arch_type == MACH_TYPE_SMDK2410) arch/arm/include/asm/mach-types.h:1650:# define machine_is_smdk2410() (0) board/samsung/smdk2410/Kconfig:4: default "smdk2410" board/samsung/smdk2410/Kconfig:13: default "smdk2410" board/samsung/smdk2410/MAINTAINERS:4:F: board/samsung/smdk2410/ board/samsung/smdk2410/MAINTAINERS:5:F: include/configs/smdk2410.h board/samsung/smdk2410/MAINTAINERS:6:F: configs/smdk2410_defconfig board/samsung/smdk2410/Makefile:8:obj-y := smdk2410.o board/samsung/smdk2440/Kconfig:4: default "smdk2410" board/samsung/smdk2440/Kconfig:13: default "smdk2410" board/samsung/smdk2440/MAINTAINERS:4:F: board/samsung/smdk2410/ board/samsung/smdk2440/MAINTAINERS:5:F: include/configs/smdk2410.h board/samsung/smdk2440/MAINTAINERS:6:F: configs/smdk2410_defconfig board/samsung/smdk2440/Makefile:8:obj-y := smdk2410.o root@ubuntu:/home/uboot/u-boot-2015.07-rc3# |
vim打开arch/arm/Kconfig的85行看到:
84 config TARGET_SMDK2410 85 bool "Support smdk2410" 86 select CPU_ARM920T |
修改结果如下:
84 config TARGET_SMDK2410 85 bool "Support smdk2410" 86 select CPU_ARM920T 87 88 config TARGET_SMDK2440 89 bool "Support smdk2440" 90 select CPU_ARM920T |
打开arch/arm/Kconfig的946行看到:
vim arch/arm/Kconfig +946
949 source "board/pxa255_idp/Kconfig" 950 source "board/samsung/smdk2410/Kconfig" 951 source "board/sandisk/sansa_fuze_plus/Kconfig" |
添加对smdk2440的配置,配置结果如下:
949 source "board/pxa255_idp/Kconfig" 950 source "board/samsung/smdk2410/Kconfig" 951 source "board/samsung/smdk2440/Kconfig" 952 source "board/sandisk/sansa_fuze_plus/Kconfig" |
打开board/samsung/smdk2440/Kconfig是这样的:
vim board/samsung/smdk2440/Kconfig:
if TARGET_SMDK2410 config SYS_BOARD default "smdk2410" config SYS_VENDOR default "samsung" config SYS_SOC default "s3c24x0" config SYS_CONFIG_NAME default "smdk2410" endif |
修改结果如下:
if TARGET_SMDK2440 config SYS_BOARD default "smdk2440" config SYS_VENDOR default "samsung" config SYS_SOC default "s3c24x0" config SYS_CONFIG_NAME default "smdk2440" endif |
打开board/samsung/smdk2440/Makefile并修改其中的2410为2440,修改后的结果如下:
# # (C) Copyright 2000-2006 # Wolfgang Denk, DENX Software Engineering, wd@denx.de. # # SPDX-License-Identifier: GPL-2.0+ # obj-y := smdk2440.o obj-y += lowlevel_init.o |
修改board/samsung/smdk2440/Makefile后相应地需要把board/samsung/smdk2440/目录下的smdk2410.c改名为smdk2440.c,命令如下: mv board/samsung/smdk2440/smdk2410.c board/samsung/smdk2440/smdk2440.c |
修改完上面的3个文件后感觉是修改完了,编译一下试试:
make distclean
make smdk2440_defconfig
make
编译成功,并且编译过程中有:
LD board/samsung/common/built-in.o CC board/samsung/smdk2440/smdk2440.o AS board/samsung/smdk2440/lowlevel_init.o LD board/samsung/smdk2440/built-in.o CC common/main.o CC common/exports.o |
接下来使用sourceInsight建立uboot工程,方便查看修改代码。
我的sourceInsight是安装在Ubuntu中的,这样直接在Ubuntu中修改以后就直接可以编译了。当然也可以在windows中修改相关文件后再传入虚拟机编译。在建立uboot的sourceInsight工程的时候建议针对性的添加smdk2440的板级文件(board目录下)、arm9内核(arch/arm目录下)文件,以及include/configs下的smdk2440.h文件。这样在使用sourceInsight的过程中会方便很多。
保存现有阶段成果,方便以后修改。
root@ubuntu:/home/uboot/u-boot-2015.07-rc3# cd .. root@ubuntu:/home/uboot# tar zcvf u-boot-2015.07rc3-smdk2440.tar.gz u-boot-2015.07-rc3 |
下一小节修改uboot支持SDRAM和SPL启动。
完全按本系列教程修改好的u-boot源码提供给大家下载,你在以后的移植过程中可以参考着移植。注意这个u-boot只能以nor启动(原因在后面的文章会讲到),功能已完善。
u-boot-2015.07-rc3 : http://download.csdn.net/detail/doccode/8954291
相关文章推荐
- 移植u-boot-2015.07-rc3之uboot裁剪及启动参数修改(九)
- 移植u-boot-2015.07-rc3之修改代码支持mtdparts命令(八)
- 移植u-boot-2015.07-rc3之修改代码支持DM9000网卡(七)
- 移植u-boot-2015.07-rc3之修改代码支持NandFlash(六)
- 移植u-boot-2015.07-rc3之修改代码支持NorFlash启动并真正支持NorFlash读写(五)
- 移植u-boot-2015.07-rc3之修改代码支持NorFlash(四)
- 移植u-boot-2015.07-rc3之修改代码支持串口(三)
- 移植u-boot-2015.07-rc3之修改代码支持SDRAM和SPL启动(二)
- JAVA多线程实例详解
- 掌纹数据集
- Python IDE:PyCharm中的那些实用功能
- UnrealEngine3-渲染构架
- Java的8中封装类(未完待续)
- hdu5135 Little Zu Chongzhi's Triangles(DP)
- Android Funcitons Collection
- hive学习笔记——Hive表的创建
- 搭建iSCSI文件服务器故障转移群集
- Learn OpenGLES: 正交变换
- innobackupex备份恢复详解
- jQuery 的选择器