Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1743155
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-06-09 10:09:09

原文地址:Bootloader移植2 作者:海风之城

二、Bootloader分析与移植
1、U-boot源码结构
U-boot根目录下共有26个子目录,分为4类:
    ①平台相关的或开发板相关的;
    ②通用的函数;
    ③通用的设备驱动程序;
    ④U-boot工具、示例程序、文档。
2、U-boot体
    根据顶层Readme文件说明,若使用开发板board/,先执行make _config命令进行配置,然后执行make all生产如下3个文件:①U-boot.bin;②U-boot;③U-boot.srec。
3、U-boot的配置过程 
    以smdk_2410为例,分析Makefile大致流程及结构。
    一般地,编译U-boot通过以下两条命令实现:
    # make smdk2410_config
    # make all
    执行第一条命令后,在include目录下生产两个文件:config.mk和config.h。这两个文件是如何生产的?在顶层Makefile文件中有如下代码:
        SRCTREE := $(CURDIR)
        ..........
        MKCONFIG := $(SRCTREE)/mkconfig
        ..........
        smdk2410_config : unconfig
        @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
    若在U-boot根目录下编译,则以上的MKCONFIG就是根目录下的mkconfig。$(@_config=)的结果就是将_config去掉,结果为smdk2410,所以make smdk2410_config实际上就是执行如下命令:
        ./mkconfig  smdk2410 arm arm920t smdk2410 NULL s3c24x0
    红色的字都是作为参数传递给mkconfig这个shell脚本,下面分析mkconfig脚本的作用。
    ①确定开发板名称BOARD_NAME,相关代码如下:
    APPEND=no          # Default: Create new config file
    BOARD_NAME=""      # Name to print in make output
    while [ $# -gt 0 ] ; do
             case "$1" in
             --) shift ; break ;;
             -a) shift ; APPEND=yes ;;
             -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
              *) break ;;
              esac
    done
    [ "${BOARD_NAME}" ] || BOARD_NAME="$1"
    因命令./mkconfig  smdk2410 arm arm920t smdk2410 NULL s3c24x0中午--、-a、-n等符号,所以执行完以上代码后,APPEND维持原值,BOARD_NAME等于第一个参数,即“smdk2410”。
    ②创建平台/或开发板相关头文件的链接: 
    # ln  -s   asm-arm         asm
    # ln  -s   arch-s3c24x0    asm-arm/arch
    # ln  -s   proc-armv       asm-arm/proc
    ③创建顶层Makefile包含的文件include/config.mk,内容简单,定义了四个变量:
    ARCH   = arm
    CPU    = arm920t
    BOARD  = smdk2410
    SOC    = s3c24x0
    ④创建开发板相关的头文件include/config.h,内容如下:

   /* Automatically generated - do not edit */
   #include "config/smdk2410.h"

   

阅读(179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~