Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

来源:互联网 发布:微电影拍摄技巧知乎 编辑:程序博客网 时间:2024/06/04 19:01

Exynos4412 Uboot 移植(一)—— Uboot 编译流程分析

标签: Exynos4412u-boot移植配置
1971人阅读 评论(1)收藏举报
本文章已收录于:
分类:
作者同类文章X
    作者同类文章X
      作者同类文章X

              Uboot 所用版本 u-boot-2013.01

              u-boot-2013.01 中有上千文件,要想了解对于某款开发板,使用哪些文件、哪些文件首先执行、可执行文件占用内存的情况,最好的方法就是阅读它的Makefile。


        根据顶层Readme文件的说明:


        可以知道如果使用开发板board/<board_name>,就先执行“make <board_name>_config”命令进行配置,然后执行“make all”, 就可以生成如下3个文件:

        U-Boot.bin:二进制可执行文件,它就是可以直接烧入eMMC中的文件。

        U-Boot : ELF格式的可执行文件。

        U-Boot.srec : 摩托罗拉格式的可执行文件。

                对于Exynos4412开发板,这里用的其实是Fs4412,执行“make fs4412_config"、“make all"后生成的u-boot-fs4412.bin可以烧入eMMC中执行。


        一、U-Boot 配置过程

        1、在顶层Makefile中可以看到如下代码:


        假定在u-boot-2013.01的根目录下编译,则其中的MKCONFIG 就是根目录下的mkconfig文件(mkconfig是shell脚本文件)

        %_config是GUNmake语法层,表示的是所有以".config"结尾的文件。$(@:_config=)的结果就是将“fs4412"中的“——config”去掉,结果为fs4412。


        MKCONFIG 就是执行mkconfig。

        所以 “make fs4412_config"实际上就是执行如下命令:

        ./mkconfig fs4412 arm armv7 fs4412 samsung exynos


        2、mkconfig 的作用

        前面已经提到,mkconfig就是一shell脚本, 具体作用如下:

        a -- 解析boards.cfg fs4412相关数据


        这是我们自行添加的.确定开发板名称BOARD_NAME。


        b -- 针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。



        c --创建顶层Makefile包含的文件 include/ config.mk


        inlucde / config.mk 内容如下:



        d -- 创建开发板相关的头文件inlucde/config.h


        Include/config.h导出结果如下:



              U-Boot 还没有类似Linux一样的可视化配置界面(比如使用 make menuconfig 来配置),要手动修改配置文件 inlucde/config/<board_name>.h 来裁剪、设置U-Boot.

        配置文件中有以下两类宏。

        1) 一类是选项(Options),前缀为“CONFIG”它们用于选择CPU、SOC、开发板类型,设置系统时钟、选择设备驱动等。



        2)另一类是参数(Setting),前缀为“CFG_”,它们用于设置malloc缓冲池的大小、U-Boot 下载文件时的默认加载地址、Flash的起始地址等。


        uboot 执行通过宏来判断:宏在头文件中定义。

        #ifdef CONFIG_TEST
        run_test();
        #endif

        某头文件

        #define CONFIG_TEST

        可以这样认为,“CONFIG_”除了设置一些参数外,主要用来设置U-Boot的功能、选择使用文件中的哪一部分;而“CFG_”用来 设置更细节的参数。


        二、U-Boot 的编译、链接过程

         配uboot 编译通过Makefile来判断:

        obj-y += xx.o xx.o  在编译时,只编译obj-y

                obj-$(CONFIG_XX) = xx.o xx.o 如果CONFIG_XX为y,则此文件会被编译进u-boot.bin置完后,执行“make all” 即可编译:

        找第一个目标all:




        上面代码是对u-boot进行格式转换,变成二进制bin格式之后,再加一些校验与4412开如平台加密信息。

        依赖u-boot:



        先总结一下U-Boot 的编译流程:

        a -- 首先编译 cpu /$(CPU)/start.S,对于不同的CPU,还可能编译 cpu/$(CPU)下的其他文件;

        b -- 然后,对于平台/开发板相关的每个目录、每个通用目录都使用它们个字的Makefile生成相应的库;

        c -- 将a、b 步骤生成的.o .a文件按照 board / $(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/U-Boot.lds链接脚本进行链接。

        d -- 第c步得到的是ELF格式的U-Boot,后面的Makefile还会将它转换成二进制格式、S-Record格式。




        3
        0
         
         

        我的同类文章

        http://blog.csdn.net
        • Exynos4412 文件系统制作(三)—— 文件系统移植2016-03-08
        • Exynos4412 内核移植(七)—— 内核相关知识补充2016-03-07
        • Exynos4412 内核移植(五)—— 驱动的移植2016-03-07
        • Exynos4412 内核移植(三)—— 内核启动过程分析2016-03-07
        • Exynos4412 Uboot 移植(六)—— 相关知识补充2016-03-07
        • Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析2016-03-07
        • Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析2016-03-07
        • Exynos4412 内核移植(六)—— 设备树解析2016-03-07
        • Exynos4412 内核移植(四)—— MMU 相关知识解析2016-03-07
        • Exynos4412 内核移植(二)—— 内核编译过程分析2016-03-07
        • Exynos4412 Uboot 移植(五)—— Uboot 移植过程2016-03-07
        更多文章
        0 0
        原创粉丝点击