6410uboot1.1.6配置、编译、链接分析.docx
- 文档编号:141566
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:18
- 大小:32.70KB
6410uboot1.1.6配置、编译、链接分析.docx
《6410uboot1.1.6配置、编译、链接分析.docx》由会员分享,可在线阅读,更多相关《6410uboot1.1.6配置、编译、链接分析.docx(18页珍藏版)》请在冰豆网上搜索。
iny6410上采用的处理器是S3C6410,我们首先要做的是从网上下载三星公司针对s3c6410修改过的s3c-u-boot-1.1.6的源码,然后对这个源码进行分析,最后再将源码移植到tiny6410上。
1、uboot初见
我从网上下载的源码是s3c-u-boot-1.1.6_rel-4-3-2_20080917.tar.bz2,解压后得到s3c-u-boot-1.1.6这个目录。
根据顶层的README文件我们可以获取到如下信息:
1.1顶层目录结构
Board:
和一些已有开发板相关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。
Common:
与体系结构无关的文件,实现各种命令的C文件。
CPU:
CPU相关文件,其中的子目录都是以u-boot所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等。
Disk:
硬盘接口程序
Doc:
开发、试用文档。
Drivers:
通用设备驱动程序,比如各种网卡、支持CFI的flash、串口和USB总线等。
Dtt:
数字温度测量器或者传感器的驱动
Examples:
一些独立运行的应用程序的例子。
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
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="$1"
//先判断BOARD_NAME是否为空,为空将命令中的第一个参数smdk6410赋值给BOARD_NAME,即这边BOARD_NAME为“smdk6410”
24
25[$#-lt4]&&exit1
26[$#-gt6]&&exit1
//"$#"表示参数的个数,如果参数个数小于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"$6"="NULL"];then
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"];then
61rm-fregs.h
62ln-s$6.hregs.h
63rm-fasm-$2/arch
64ln-sarch-$3asm-$2/arch
65fi
66
67#createlinkfors3c64xxSoC
68if["$3"="s3c64xx"];then
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 6410 uboot1 1.6 配置 编译 链接 分析