顾福源 发表于 2017-8-5 23:17:23

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中创建单板目录
        cd board/samsung/
cp smdk2410 -r smdk2440
        然后修改Kconfig文件内容,将所有的”2410“替换为”2440“,替换后文件如下:
        if TARGET_SMDK2440
       
修改MAINTAINERS文件,修改后如下:
        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,
        obj-y   := smdk2440.o
        obj-y   += lowlevel_init.o
最后将smdk2410.c改名为smdk2440.c
        mv smdk2410.c smdk2440.c

创建单板相关头文件
        同样,我们将include/configs/目录下的smdk2410.h文件复制为smdk2440.h
        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文件
        同样直接拷贝:
        cd configs/
cp smdk2410_defconfig smdk2440_defconfig
        拷贝过来以后,修改smdk2440_defconfig文件:
        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文件
        vi arch/arm/Kconfig
        添加如下内容:
        config TARGET_SMDK2440
    bool "Support smdk2440"
    select CPU_ARM920T

source "board/samsung/smdk2440/Kconfig"

        在上述操作完成后,尝试编译:
        make smdk2440_config

make

顾福源 发表于 2017-8-5 23:29:39

单板添加完成后就是代码的修修改改了,先放两张图,如何让uboot顺利的跑起来,理解这两张图是关键

顾福源 发表于 2017-8-5 23:33:55

关于uboot的启动过程可以先参考这篇博客http://blog.csdn.net/hare_lee/article/details/6916325

顾福源 发表于 2017-8-5 23:36:42

概括来说uboot的启动分为两个阶段,
(1)第一阶段的功能

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

       (2)第二阶段的功能
a. 初始化本阶段使用的硬件设备
b.检测系统内存映射
c.将内核从Flash读取到RAM中
d.为内核设置启动参数
e.调用内核
页: [1]
查看完整版本: uboot移植