重工电子论坛

标题: uboot移植 [打印本页]

作者: 顾福源    时间: 2017-8-5 23:17
标题: uboot移植
        最近这两周的空余时间一直在研究uboot,移植过程中也遇到了很多问题,开贴说一下自己的理解。
        uboot代码我是下载的206年7月分的版本(u-boot-2016.07.tar.bz2),下载地址:ftp://ftp.denx.de/pub/u-boot/
        目标开发板:AQ2440,CPU为三星s3c2440。

第一步:在uboot代码中添加对开发板的支持
        uboot虽然已经支持了很多处理器平台,但是也没有做到将市面上的所有CPU都进行适配。所以我们在移植时可以选择一个已经适配了的CPU型号进行移植。uboot已经对s3c2410这一款CPU进行了适配,而s3c2440与s3c2410相近,所以我选择了在s3c2410的代码上进行修改,所以我直接将S3C2410的单板相关文件都复制为S3C2440的。
        假设我们已经到了源码的根目录,执行以下操作:
a.在board中创建单板目录
       
[Bash shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
cd board/samsung/
cp smdk2410 -r smdk2440

        然后修改Kconfig文件内容,将所有的”2410“替换为”2440“,替换后文件如下:
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
if TARGET_SMDK2440
       

修改MAINTAINERS文件,修改后如下
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
SMDK2440 BOARD
        M:        David Müller <d.mueller@elsoft.ch>
        S:        Maintained
        F:        board/samsung/smdk2440/
        F:        include/configs/smdk2440.h
        F:        configs/smdk2440_defconfig

修改Makefile,
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
obj-y   := smdk2440.o
        obj-y   += lowlevel_init.o

最后将smdk2410.c改名为smdk2440.c
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
mv smdk2410.c smdk2440.c


创建单板相关头文件
        同样,我们将include/configs/目录下的smdk2410.h文件复制为smdk2440.h
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
cd include/config
cp smdk2410.h smdk2440.h

        然后修改两个宏定义,
        修改前:#define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */
                    #define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */
        修改后:
                  #define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2440 SoC */
                  #define CONFIG_SMDK2440 /* on a SAMSUNG SMDK2440 Board */
c.创建defconfig文件
        同样直接拷贝:
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
cd configs/
cp smdk2410_defconfig smdk2440_defconfig

        拷贝过来以后,修改smdk2440_defconfig文件:
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
CONFIG_ARM=y
        CONFIG_TARGET_SMDK2440=y
        CONFIG_BOOTDELAY=5
        CONFIG_HUSH_PARSER=y
        CONFIG_SYS_PROMPT="SMDK2440 # "
        CONFIG_CMD_USB=y
        # CONFIG_CMD_SETEXPR is not set
        CONFIG_CMD_DHCP=y
        CONFIG_CMD_PING=y
        CONFIG_CMD_CACHE=y
        CONFIG_CMD_EXT2=y
        CONFIG_CMD_FAT=y

d.修改arch/arm/Kconfig文件
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
vi arch/arm/Kconfig

        添加如下内容:
       
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
config TARGET_SMDK2440
    bool "Support smdk2440"
    select CPU_ARM920T

source "board/samsung/smdk2440/Kconfig"


        在上述操作完成后,尝试编译:
       
[Shell] syntaxhighlighter_viewsource syntaxhighlighter_copycode
make smdk2440_config

make

作者: 顾福源    时间: 2017-8-5 23:29
单板添加完成后就是代码的修修改改了,先放两张图,如何让uboot顺利的跑起来,理解这两张图是关键

20160909010209706.jpg (37.53 KB, 下载次数: 954)

20160909010209706.jpg

作者: 顾福源    时间: 2017-8-5 23:33
关于uboot的启动过程可以先参考这篇博客http://blog.csdn.net/hare_lee/article/details/6916325
作者: 顾福源    时间: 2017-8-5 23:36
概括来说uboot的启动分为两个阶段,
(1)第一阶段的功能

a.硬件设备初始化
b.加载U-Boot第二阶段代码到RAM空间
c.设置好栈
d.跳转到第二阶段代码入口

       (2)第二阶段的功能
a. 初始化本阶段使用的硬件设备
b.检测系统内存映射
c.将内核从Flash读取到RAM中
d.为内核设置启动参数
e.调用内核




欢迎光临 重工电子论坛 (http://www.cqutlab.cn/) Powered by Discuz! X3.1