微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uboot移植详解

uboot移植详解

时间:11-13 来源:互联网 点击:

46~48行进入include目录,删除asm文件(上一次配置时建立的链接文件),然后再次建立asm文件,并令它链向 asm-$2目录,即asm-arm.

51 rm-fasm-$2/arch

52

53 if[-z"$6"-o"$6"="NULL"];then

54 ln-s${LNPREFIX}arch-$3asm-$2/arch

55 else

56 ln-s${LNPREFIX}arch-$6asm-$2/arch

57 fi

建立符号链接include/asm-arm/arch,若$6(SOC)为空,则使其链接到include/asm-arm/arch-arm920t目录,否则就使其链接到include/asm-arm/arch-s3c24x0目录。(事实上include/asm-arm/arch-arm920t并不存在,因此$6是不能为空的,否则会编译失败)

59 if["$2"="arm"];then

60 rm-fasm-$2/proc

61 ln-s${LNPREFIX}proc-armvasm-$2/proc

62 fi

若目标板是arm架构,则上面的代码将建立符号连接include/asm-arm/proc,使其链接到目录proc-armv目录。

建立以上的链接的好处:编译U-Boot时直接进入链接文件指向的目录进行编译,而不必根据不同开发板来选择不同目录。

(3)创建顶层Makefile包含的文件include/config.mk

64 #

65 #CreateincludefileforMake

66 #

67 echo"ARCH=$2">config.mk

68 echo"CPU=$3">>config.mk

69 echo"BOARD=$4">>config.mk

70

71 ["$5"]&&["$5"!="NULL"]&&echo"VENDOR=$5">>config.mk

72

73 ["$6"]&&["$6"!="NULL"]&&echo"SOC=$6">>config.mk

上面代码将会把如下内容写入文件inlcude/config.mk文件:

ARCH=arm

CPU=arm920t

BOARD=TX2440

SOC=s3c24x0

(4)创建开发板相关的头文件include/config.h

75 #

76 #Createboardspecificheaderfile

77 #

78 if["$APPEND"="yes"] #Appendtoexistingconfigfile

79 then

80 echo>>config.h

81 else

82 >config.h #Createnewconfigfile

83 fi

84 echo"/*Automaticallygenerated-donotedit*/">>config.h

85 echo "#include ">>config.h

创建新的include/config.h文件。若APPEND为yes,则将新的配置内容追加到include/config.h文件后面。由于APPEND的值保持“no”,因此config.h被创建了,内容如下:

/*Automaticallygenerated-donotedit*/

#include

下面总结命令makeTX2440_config执行的结果(仅针对编译目标输出到源代码目录的情况):

(1) 创建开发板名称BOARD_NAME等于$1

(2)创建到目标板相关的文件的链接

ln-sasm-armasm

ln-sarch-$6asm-$2/arch

ln-sproc-armvasm-arm/proc //如果$2不是arm,此行没有

(3)创建i顶层Makefile包含的文件 include/config.mk文件,内容如下所示:

ARCH=$2

CPU=$3

BOARD=$4

VENDOR=$5

SOC=$6

(4)创建与目标板相关的文件include/config.h,如下所示:

/*Automaticallygenerated-donotedit*/

#include

从这四个结果可以知道,如果要在board目录下新建一个开发板的目录,则在include/configs目录下也要建立一个文件,里面存放的就是开发板的配置信息。

配置文件中有两类宏:一类是选项(option)前缀为“CONFIG_”它们用于选择CPU、SOC、开发板类型、设置系统时钟、选择设备驱动。

如:#define CONFIG_ARM920T1/* This is an ARM920T Core*/
#defineCONFIG_S3C24101/* in a SAMSUNG S3C2410 SoC */
#define CONFIG_SMDK24101/* on a SAMSUNG SMDK2410 Board */

另一类是参数(setting),前缀为“CFG_”,它们用于设置malloc缓冲池的大小、U-BOOT提示符、U-boot下载文件时的默认加载地址、FLASH的起始地址等

如:#defineCFG_LONGHELP/* undef to save memory*/
#defineCFG_PROMPT"SMDK2410 # "/* Monitor Command Prompt*/
#defineCFG_CBSIZE256/* Console I/O Buffer Size*/
#defineCFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
#defineCFG_MAXARGS16/* max number of command args*/
#define CFG_BARGSIZECFG_CBSIZE/* Boot Argument Buffer Size*/

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

U-Boot的编译、链接过程

配置完后,执行“make all”既可编译,从Makefile中可以了解U-Boot使用了哪些文件、哪个文件首先执行、可执行文件占用内存情况。

若没有执行过“make_config”命令就直接执行“makeall”命令则会出现如下的才错误信息,然后停止编译:

Systemnotconfigured-seeREADME

U-Boot是如何知道用户没有执行过“make_config”命令的呢?阅读U-Boot源代码就可以发现了,Makefile中有如下代码:

ifeq($(obj)include/config.mk,$(wildcard$(obj)include/confi

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top