天天看点

基于SMDK6410的BSP包结构分析

一 首先,大体介绍下sources文件的格式与含义:

1  TARGETNAME=XX

使用TARGETNAME来指示生成目标的文件名(不包含扩展名,扩展名PB会自动

2  RELEASETYPE=PLATFORM

RELEASETYPE指示该文件将要生成的类型,一共有五个取值:

Ø SDK:使用该类型将使得生成的目标文件被存储到%_PUBLICROOT%/Oak目录,而lib文件被放置到%_PUBLICROOT%/Sdk目录

Ø DDK:使用该类型将使得生成的目标文件被存储到%_PUBLICROOT%/Oak目录,而lib文件被放置到%_PUBLICROOT%/Ddk

Ø PLATFORM:使用该类型将使得生成的文件受平台控制

Ø LOCAL:该类型使得生成的文件全部放置到当前路径

Ø CUSTOM:该类型使得生成的文件放置到TARGETPATH制定的位置(也就是说必须要有TARGETPATH参数设置)

3 TARGETTYPE=DYNLINK

生成的目标类型,LIBRARY表示是一个lib库,DYNLINK则表示是dll,而PROGRAM则是一个exe文件

4 TARGETLIBS=

$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/xxx.lib

TARGETLIBS指示连接需要的库的名字,如果一个库以DLL的形式提供给调用者,就需要用TARGETLIBS,它只链接一个函数地址,系统执行时会将被链接的库加载。比如coredll.lib就是这样的库文件。即动态链接。

5 SOURCELIBS=XX.lib

SOURCELIBS指示将于某一个lib一起连接。上面一个lib是需要什么就取什么,而这个lib则是连接所有的。将库中的函数实体链接进来。即静态链接,用到的函数会在我们的文件中形成一份拷贝。

6 DEFFILE=led.def

DLL文件的def文件名

7 INCLUDES=../../inc

指定include的路径

8 SOURCES=

XX.c

指定参与该规则的所有的源文件.

9 xxxENTRY定义入口函数

   如果TARGETTYPE是DLL,则可以定义DLLENTRY,将Dll入口定义成别的不是DLLMain的函数,如果DLL的入口是DllMain,则不需要别的定义。

如果TARGETTYPE是EXE,则可以定义EXEENTRY,用于指定EXE的入口函数。

二 6.0下BSP文件架构与sources文件分析

1 CATALOG文件夹

文件夹下有一个smdk6410.pbcxml文件,作用相当于5.0版本中的CEC文件,将BSP包添加到Platform中,6.0可以通过此文件识别BSP,自动添加。

2 Files文件夹

与5.0作用相同,是有平台特定的配置文件组成,这些文件帮助创建操作系统镜像,主要完成包含驱动程序、写注册表设置和内存信息等任务。

3 Src

Ø Src/Apps存放与测试有关的文件

Ÿ Src/Apps/TKTEST中的sources文件分析:

调用文件test_tk.c,连接coredll.lib库,生成名为test_tk.exe的可执行文件。生成的文件在调用函数mainWCRTStartup运行(test_tk.exe的入口点为mainWCRTStartu)。

Ø Src/Common存放特定的硬件平台Bootloader程序与OAL层程序共用的源文件。

Ÿ Src/Common/Args中的sources文件分析:

调用args.c,生成文件名为:s3c6410_args,文件类型为LIB的库文件:s3c6410_args.lib

Ÿ Src/Common/Cache中的sources文件分析:

     调用源文件:flush.c,cachemode.s,flushdc.s,cleandc.s,cleardtlbentry.s,clearitlbentry.s,clearutlbentry.s,连接oal_cache_arm920t.lib库,生成目标文件:oal_cache_s3c6410.lib。

Ÿ Src/Common/Intr

调用源文件:intr.c,fiq.c,map.c,动态连接oal_intr.lib库,生成目标文件:oal_intr_s3c6410.lib。

Ÿ Src/Common/Ioctl

动态连接oal_ioctl.lib,oal_getcpuid_s3c6410.lib,生成目标文件:oal_ioctl_s3c6410.lib。

Ÿ Src/Common/Power

调用源文件off.c,静态链接oal_power.lib,生成目标文件:oal_power_s3c6410.lib。

Ÿ Src/Common/Rtc

调用源文件:rtc.c,生成目标文件:oal_rtc_s3c6410.lib。

Ÿ Src/Common/System

调用源文件:s3c6410_system.s,s3c6410_stall.s,生成目标文件:s3c6410_system_lib.lib。

Ÿ Src/Common/Timer

调用原文件timer.c,dvs.c,生成目标文件:oal_timer_s3c6410.lib。

Ø Src/Inc是有平台相关的头文件组成的,如CPU、寄存器地址和所有平台设备的地址等。

Ø Src/OAL是由实现OEM自适应层(OAL)功能的所有文件组成

Ÿ Src/OAL/OALLIB中的sources文件分析

调用源文件debug.c,init.c,intr.c,ioctl.c,power.c,startup.s,生成目标文件:oal.lib。

Ÿ Src/OAL/OALEXE中的sources文件分析

动态链接

oemmain.lib,

nkstub.lib,

nkldr.lib,

oal.lib,

s3c6410_system_lib.lib,

oal_intr_s3c6410.lib,

oal_ioctl_s3c6410.lib,

oal_power_s3c6410.lib,

oal_profiler_s3c6410.lib,

oal_rtc_s3c6410.lib,

oal_timer_s3c6410.lib,

oal_misc_s3c6410.lib,

s3c6410_args.lib,

abort_arm920t.lib,

al_cache_s3c6410.lib,

oal_memory_arm.lib,

oal_io.lib,

oal_log.lib,

oal_other.lib,

fulllibc.lib,

rne_mdd.lib,生成目标文件:oal.exe,定义入口函数为StartUp。

继续阅读