您的位置:首页 > 其它

移植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。

 

解压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

复制241行到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

明显在板级支持上使用的还是2410开发板的文件,所以在这里需要查看一下smdk2440_defconfig里面是什么:

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

         所以在这里需要把SMDK2410修改为SMDK2440,修改结果如下:

CONFIG_ARM=y

CONFIG_TARGET_SMDK2440=y

# CONFIG_CMD_SETEXPR is not set                                                                                                                                                                                                                        

 

保存退出,执行命令makedistclean清除工程

清除工程后重新配置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.                                                                                             

上述错误说include/config.h文件中找不到头文件configs/.h,打开include/config.h看一下:

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>

提示说这个文件include/config.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>

很明显在配置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

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

增加对smdk2440的支持:

修改结果如下:

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

把上面board/samsung/smdk2440/Kconfig中所有的2410修改成2440,其他不变。

修改结果如下:

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

基本确定现在针对smdk2440的uboot框架已经修改成功。

 

接下来使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息