6410uboot1.1.6配置、编译、链接分析Word下载.docx

上传人:b****9 文档编号:13073127 上传时间:2022-10-04 格式:DOCX 页数:18 大小:32.70KB
下载 相关 举报
6410uboot1.1.6配置、编译、链接分析Word下载.docx_第1页
第1页 / 共18页
6410uboot1.1.6配置、编译、链接分析Word下载.docx_第2页
第2页 / 共18页
6410uboot1.1.6配置、编译、链接分析Word下载.docx_第3页
第3页 / 共18页
6410uboot1.1.6配置、编译、链接分析Word下载.docx_第4页
第4页 / 共18页
6410uboot1.1.6配置、编译、链接分析Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

6410uboot1.1.6配置、编译、链接分析Word下载.docx

《6410uboot1.1.6配置、编译、链接分析Word下载.docx》由会员分享,可在线阅读,更多相关《6410uboot1.1.6配置、编译、链接分析Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

6410uboot1.1.6配置、编译、链接分析Word下载.docx

Fs:

支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。

Include:

头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。

Lib_arm:

存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,与ARM体系结构相关的代码。

Lib_*:

某一架构通用的文件。

Lib_generic:

通用的多功能函数实现。

Nand_spl:

Uboot一般从ROM、NORFlash等设备启动,现在开始执行NANDFlash启动,但是支持的CPU种类还不多。

Net:

与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。

Post:

上电自检程序。

Rtc:

实时时钟驱动。

Tools:

创建S-Record格式文件和U-BOOTimages的工具。

1.2编译程序

进入源码目录执行:

makedistclean--清除所有生成的文件

makeNAME_config--根据自己使用的开发板进行配置

makeall--编译源码

2、uboot的配置过程

从README文件中我们知道了makeNAME_config是用来对自己的开发板进行配置的,那就先来看下到底是怎么配置的。

这边假设我们的板子是smdk6410,那么应该在源码目录执行makesmdk6410_config

make调用的是顶层目录下的Makefile文件,我们传参数是smdk6410_config,

所以在Makefile中找到smdk6410_config的相应部分如下:

smdk6410_config:

unconfig

@$(MKCONFIG)$(@:

_config=)arms3c64xxsmdk6410samsungs3c6410 

先分析下这条规则:

smdk6410_config:

规则的目标名

unconfig:

规则的依赖,这个在Makefile文件的342行可以找到,如下:

unconfig:

@rm-f$(obj)include/config.h$(obj)include/config.mk\

$(obj)board/*/config.tmp$(obj)board/*/*/config.tmp

这个就不在分析,就是删除一些文件。

第二行开头的@:

表示该行命令的输出被抑制,即执行的时候不会在终端上打印出来。

$(MKCONFIG):

MKCONFIG这个变量在92行定义MKCONFIG:

=$(SRCTREE)/mkconfig,而变量SRCTREE在87行定义SRCTREE:

=$(CURDIR),而CURDIR是Makefile自带的变量表示当前目录,所以$(MKCONFIG)就是当前目录下的mkconfig文件,即顶层目录下的mkconfig文件。

$(@:

_config=):

$@是make的自动变量,标识规则的目标名,即smdk6410_config。

_config=)意思就是$@中的“_config”替换为空,也就是删掉目标中“_config”这个子串。

所以这边$(@:

_config=)为smdk6410。

这样看的话在配置时,执行makesmdk6410_config实际上执行的是:

./mkconfigsmdk6410arms3c64xxsmdk6410samsungs3c6410

到这才真正地开始配置开发板,接下来带着这条命令详细分析下mkconfig这个文件。

1#!

/bin/sh-e 

//选项-e表示一个命令在执行后返回一个非0状态值时,就退出

2

3#Scripttocreateheaderfilesandlinkstoconfigure

4#U-Bootforaspecificboard.

5#

6#Parameters:

TargetArchitectureCPUBoard[VENDOR][SOC]

7#

8#(C)2002-2006DENXSoftwareEngineering,WolfgangDenk<

wd@denx.de>

9#

10

11APPEND=no#Default:

Createnewconfigfile

//APPEND=no这边表示重新创建一个文件,APPEND=yes表示将内容追加到原来的文件中

12BOARD_NAME="

"

#Nametoprintinmakeoutput

//BOARD_NAME为开发板的名字

13

14while[$#-gt0];

do

15case"

$1"

in

16--)shift;

break;

;

17-a)shift;

APPEND=yes;

18-n)shift;

BOARD_NAME="

${1%%_config}"

;

shift;

19*)break;

20esac

21done

//"

$#"

将扩展成传递给脚本的参数的数目

$*"

将扩展成传递给脚本的所有参数

shift"

将$*中的剩余的参数向左移动一个位置并减少$#的值1

//14-21行判断“./mkconfigsmdk6410arms3c64xxsmdk6410samsungs3c6410”命令中是否有“--”,“-a”,“-n”等符号,

//这边没有,所以不做任何事情,11行和12行的变量仍然维持原来的值。

22

23["

${BOARD_NAME}"

]||BOARD_NAME="

//先判断BOARD_NAME是否为空,为空将命令中的第一个参数smdk6410赋值给BOARD_NAME,即这边BOARD_NAME为“smdk6410”

24 

25[$#-lt4]&

&

exit1

26[$#-gt6]&

表示参数的个数,如果参数个数小于4或者大于6就退出,这边$#=6,所以可以继续往下执行。

27

28echo"

Configuringfor${BOARD_NAME}board..."

//打印出开发板的名字

29

30#

31#Createlinktoarchitecturespecificheaders

//创建体系结构相关的头文件链接

32#

33if["

$SRCTREE"

!

="

$OBJTREE"

];

then

34mkdir-p${OBJTREE}/include

35mkdir-p${OBJTREE}/include2

36cd${OBJTREE}/include2

37rm-fasm

38ln-s${SRCTREE}/include/asm-$2asm

39LNPREFIX="

../../include2/asm/"

40cd../include

41rm-rfasm-$2

42rm-fasm

43mkdirasm-$2

44ln-sasm-$2asm

45else

46cd./include

47rm-fasm

48ln-sasm-$2asm

49fi

//33行判断源码目录SRCTREE和目标文件目录SRCTREE是否一样,SRCTREE和SRCTREE在顶层Makefile中定义,

//这边要判断,是因为可以选择在其他目录下编译u-boot的源码,这样可以令源代码目录保存干净,这时SRCTREE和SRCTREE的值就不一样了

//不过我们一般都习惯直接就在源码目录下编译的,所以SRCTREE和OBJTREE都为当前目录,

//那么33行条件不成立,将执行else分支的代码。

//46-48行进入include目录,删除asm文件(这是上一次配置时建立的链接文件),

//然后再次建立asm文件,并令它链接向asm-$2目录,即asm-arm($2表示第二个参数arm)

50

51rm-fasm-$2/arch

//删除asm-$2/arch目录,即删除asm-arm/arch

52

53if[-z"

$6"

-o"

="

NULL"

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

55else

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

57fi

//$6表示第6个参数s3c6410,不为空,也不为“NULL”,53行条件不满足,将执行else分支

//其中LNPREFIX为空,$6表示第6个参数s3c6410,$2表示第2个参数arm

//所以“ln-s${LNPREFIX}arch-$6asm-$2/arch”即ln-sarch-s3c6410asm-arm/arch

//前面有进入include目录,这时还在include目录下,

//所以意思是在asm-arm下创建符号链接arch指向arch-s3c6410

58

59#createlinkfors3c24xxSoC

60if["

$3"

s3c24xx"

61rm-fregs.h

62ln-s$6.hregs.h

63rm-fasm-$2/arch

64ln-sarch-$3asm-$2/arch

65fi

66

67#createlinkfors3c64xxSoC

68if["

s3c64xx"

69rm-fregs.h

70ln-s$6.hregs.h

71rm-fasm-$2/arch

72ln-sarch-$3asm-$2/arch

73fi

//$3表示第三个参数s3c64xx,所以满足68行的if语句,注意的是,这时还在include目录下操作

//删除regs.h文件,$6表示第6个参数s3c6410,所以“ln-s$6.hregs.h”表示“ln-ss3c6410.hregs.h”

//$2表示第2个参数arm,$3表示第三个参数s3c64xx,所以后面两句分别是

//rm

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1