首页资源分类嵌入式系统 > Mocor Smart 编译指导

Mocor Smart 编译指导

已有 445110个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:展讯MocorSmart

    分    享:

    文档简介

    你在从事着展讯的MOCOR平台的MMI开发吗?你想了解MMI的的非WINDOWS开发吗?这套文档一定能满足你的欲望!

    文档预览

    M ocor Smart 编译指导 Mocor Smart 编译指导 Version: 1.0.0 DocCode:SW-SMARTPHONE-BUILD-SYS-UG-2011-0007 Date: 2012-02-22 www.spread trum.com 版本号 日期 修订记录 作者 描述 M ocor Smart 编译指导 -i- M ocor Smart 编译指导 目录 1. 简介 .........................................................................................................................................3 1.1 简介...................................................................................................................................3 1.2 基本内容............................................................................................................................3 2. 环境需求 ..................................................................................................................................4 2.1 推荐配置............................................................................................................................4 2.2 软件安装............................................................................................................................4 3. 目录结构 ..................................................................................................................................5 3.1 架构...................................................................................................................................5 3.1.1 代码架构 ...................................................................................................................5 3.1.2 Customize 目录结构....................................................................................................5 3.1.3 3rdparty 目录结构.......................................................................................................6 4. 编译命令 ..................................................................................................................................8 4.1 编译命令用法.....................................................................................................................8 4.1.1 编译入口 ...................................................................................................................8 4.1.2 命令概要 ...................................................................................................................8 4.1.3 命令详解 ...................................................................................................................8 4.1.4 举例说明 ...................................................................................................................9 4.2 编译注意事项................................................................................................................... 10 5. 功能定义规则 ......................................................................................................................... 12 5.1 如何定义项目功能............................................................................................................ 12 5.2 如何为已有模块增加新器件.............................................................................................. 14 5.3 如何新加一个模块............................................................................................................ 15 5.4 route.mk 使用说明 ............................................................................................................. 15 ii- M ocor Smart 编译指导 1. 简介 1.1 简介 展讯安卓平台提供了简单且强大的编译系统,用户可以简单地创建新的工程,且根据当前项目 进行配置。用户可以在代码的顶层目录使用mk命令进行编译,编译命令包括new,update,clean等。 1.2 基本内容 ⑴ 推荐的编译环境 ⑵ 目录结构介绍 ⑶ 编译命令介绍及举例说明 ⑷ 如何创建新的工程 3 2. 环境需求 2.1 推荐配置 名称 OS Gcc JDK Perl Python M ake M ocor Smart 编译指导 推荐配置 Ubuntu 11.04 (natty) 4.5.2 1.6.0 5.10.0 2.7.1 3.81 2.2 软件安装 请使用以下命令安装必须的软件 $ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev valgrind zlib1g-dev 注 2.1:可以使用命名: $ ./mk –ck 来检查环境设置是否满足要求,详细信息请参考第 4 章。 4 M ocor Smart 编译指导 3. 目录结构 3.1 架构 3.1.1 代码架构 └── AndroidTop ├── 3rdparty ├── bionic ├── bootable ├── build ├── cts ├── customize ├── dalvik ├── development ├── device ├── external ├── frameworks ├── hardware ├── kernel ├── Makefile ├── mk ├── ndk ├── out ├── packages ├── prebuilt ├── sdk ├── system ├── u-boot ├── vendor └── .Androidbk : 设备驱动 : C 库,比如 libc, libm, libdl, dynamic linker 等等 : 基础库的源代码 : 编译和配置所需要的脚本和工具 : 兼容性测试用例 : 客户化的代码,包括驱动代码,配置,编译脚本 : Java 虚拟机 : 开发应用程序所需的模板和工具 : : 目标机器使用的库 : 应用程序框架层,包含库和配置机制 : 与硬件相关的库 : Linux 内核 : 编译入口脚本 : 编译后生成的目录,包含构建文件系统所需要的文件 : 安卓应用程序 : 安卓在各种平台下编译的预置脚本 : Android SDK tools : 安卓底层库 :系统启动 U-boot 代码 : 供应商的一些应用程序 : 生成客户化配置代码时备份的安卓原生态代码 3.1.2 Customize 目录结构 customize ├── customer_cfg: 存放客户化配置代码 │ ├── openphone-sp6810a:客户化工程 openphone-sp6810a │ ├── readme: 说明文档 │ ├── sp6810a: 客户化工程 sp6810a │ ├── sp6810a-f2r1: 客户化工程 sp6810a-f2r1 │ ├── sp6820a: 客户化工程 sp6820a 5 M ocor Smart 编译指导 │ └── sp8805ga: 客户化工程 sp8805ga ├── docs: 客户化配置相关文档 │ └── readme: 说明文档 ├── make: 客户项目功能配置 │ ├── emulator.mak: 模拟器功能配置 │ ├── makefile.sprd: 编译脚本 shell 入口 │ ├── readme: 说明文档 │ ├── rules.cfg: 定制客户化配置时规则 │ ├── sp6810a-f2r1.mak: 客户项目 sp6810a-f2r1 功能配置 │ ├── sp6810a.mak: 客户项目 sp6810a 功能配置 │ └── sp6820a.mak: 客户项目 sp6820a 功能配置 ├── perl: perl 脚本 │ ├── appcfg.pl: 应用程序部分功能控制规则脚本 │ ├── ckenv.pl: 检查环境设置脚本 │ ├── cleanall.pl: 删除所有编译生成文件,恢复编译前环境配置的脚本 │ ├── filebk.pl: 备份在生成客户化配置代码时有冲突的安卓原生态代码 │ ├── fileR.pl: 恢复客户化配置代码至安卓原生态代码 │ ├── kcfg.pl: 内核功能配置脚本 │ ├── linksp.pl: 同步 3rdparty 与 customize 目录中的驱动代码 │ ├── listP.pl: 列举目录 customize/make folder 下所有工程名称 │ ├── main.pl: 解析客户输入命令并执行 │ ├── mk: 编译入口,接受客户输入并传递给 main.pl │ ├── prebuild.pl:编译前进行的准备工作,生成客户化配置相关代码 │ ├── readme: perl 说明文档 │ ├── record.pl: 记录 prebuild 时修改的代码与文件夹,便于后续 clean 时恢复 │ ├── route.pl: 解析 route.mk 的脚本 │ └── sprd.pm: perl 脚本公共子函数 ├── shell: shell 脚本 │ ├── build.3rdparty.common.sh: 编译流程控制文件 │ ├── build.products.sh: shell 入口,解析用户输入并执行 │ ├── dynamic.construct.ro.property.sh: 生成硬件配置脚本 │ ├── hook-prebuild.sh: 钩子脚本,用于在编译之前进行一些特殊配置 │ ├── idhb_release.sh: 生成用于发布的二进制文件,以便替代源代码 │ ├── idh_release.sh: 生成发布给客户(设计公司)的代码包 │ ├── kernel.mk: 内核编译时配置文件 │ ├── lgit_diff2repo:生成 idh 包时 git 相关操作脚本 │ ├── make_android.sh: 安卓模块编译脚本 │ ├── make_kernel.sh: 内核编译脚本 │ └── readme: 说明文档 └── tools: 客户开发相关工具 └── readme: 说明文档 3.1.3 3rdparty 目录结构 3rdparty ├── app: 模块名称 app 6 │ ├── app6810: 模块 app6810 相关的配置文件存放目录 │ │ └── special: 模块 app6810 相关的配置文件 │ ├── app6820: 模块 app6810 相关的配置文件存放目录 │ └── special: 模块 app6810 相关的配置文件 ├── atv: 模块 atv 相关的驱动文件目录 │ └── nmi601: atv 芯片 nmi601 相关的驱动文件目录 │ └── special: 驱动文件 ├── Bluetooth: 模块 bluetooth 相关的驱动文件目录 │ ├── AR3002:蓝牙模块 AR3002 驱动文件目录 │ │ ├── framework: 应用程序代码 │ │ ├── hal: 硬件抽象层代码 │ │ └── special: 驱动代码 │ └── BC6888: 蓝牙模块 BC6888 驱动文件目录 │ ├── framework │ ├── hal │ └── special ├── camera:模块 camera 相关驱动文件目录 │ ├── gc0309:camera 模块 gc0309 驱动文件目录 │ │ ├── framework │ │ ├── hal │ │ └── kernel: 内核层代码 │ ├── gt2005: camera 模块 gt2005 驱动文件目录 │ │ ├── framework │ │ ├── hal │ │ └── kernel │ ├── ov2655: camera 模块 ov2655 驱动文件目录 │ │ ├── framework │ │ ├── hal │ │ └── kernel │ └── ov7675: camera 模块 ov7675 驱动文件目录 │ ├── framework │ ├── hal │ └── kernel M ocor Smart 编译指导 7 M ocor Smart 编译指导 4. 编译命令 4.1 编译命令用法 4.1.1 编译入口 mk:Android 代码编译入口。 4.1.2 命令概要 $ ./mk [Options] [Projectname] [Actions] [Modules] 4.1.3 命令详解 Options: -o, -opt=pass_argument_to_make : 可选命令,传递参数给 shell 脚本 -h, -help : 打印帮助信息 -lp, -listp : 列出所有可选的工程 -ck, -chk-env : 检查编译环境 Projectname: 待编译的项目名称 Actions: n, new c, clean u, update pac, pack pb, prebuild ig, idhgen ua, update-api : 清除之前的编译结果并重新编译所有模块 : 清楚所有编译结果 : 重新进行增量编译 : 打包 : 编译之前进行,生成客户化代码 : 生成 idh 包以便发给客户进行开发 : 编译某个特定应用 8 mc, menuconfig Modules: userdata ramdisk recovery system ub, uboot k, kernel, bootimage adr, android adr : 运行 menu-config 进行功能设定 : 编译 userdata.img. : 编译 ramdisk.img : 编译 recovery.img : 编译并打包 system.img : 编译 uboot. : 编译 kernel. : 编译 android : 编译特定 android 模块 M ocor Smart 编译指导 4.1.4 举例说明 ⑴ 检查编译环境: $ ./mk -ck ⑵ 列出在目录../customize/make 下所有工程: $ ./mk -listp ⑶ 生成客户化配置相关代码与脚本: $ ./mk projectname pb ⑷ 清除之前编译结果并编译所有模块: $ ./mk projectname n 注 4.1: new 操作依赖于 clean 操作。因此, new 操作会清除所有生成的脚本,链接,编译产生的 log 文件,模块的库文件和可执行文件。 ⑸ 编译双卡项目所有模块 $ ./mk –o=2sim projectname n ⑹ 编译 usr-mode 所有模块: 9 M ocor Smart 编译指导 $ ./mk –o=usr projectname n 注 4.2: 可以使用如下命令同时编译双卡项目与 usr-mode: $ ./mk –o=usr:2sim projectname n, 不同的选项比如 usr 和 1sim 必须以":"分隔。 ⑹ 编译 framework: $ ./mk projectname ua ⑺ 编译 framework 特定模块: $ ./mk projectname u adr framework/xxx/xxx 4.2 编译注意事项 注 4.3: 目前在默认情况下在编译完成后(new/update/update-api 操作)不会在 kernel/framework 等目录 下看见链接痕迹,这样做的目的是便于后续 GIT 提交及 REPO SYNC 或是 GIT FETCH KORG 后不 会出现问题,如果想看代码链接情况有以下两种情况: a) 加入编译选项-o=nsc 例:./mk -o=nsc sp6820a n,在编译完成后会保留链接痕迹 b) 输入./mk sp6820a pb 命令,此命令会把 customize 目录和 3rdparty 目录下文件链接至相关路 径。 注 4.4: 目前在 customize 和 3rdparty 下的文件是源,如果在非以上文件夹下有相同文件,例如, customize(源文件)和 kernel(目标文件)都有配置文件 board_cfg.c,第一次编译时目标文件会被源文 件的链接覆盖;如果建立了链接,在源和目的目录下修改是一致的,即建立链接后修改在 kernel 和 customize 下修改 board_cfg.c 文件其实是修改的同一个文件。提交时需要注意必须确保源目录下 (customize 或是 3rdparty)文件被提交。其它非 customize 和 3rdparty 文件下的文件如果其源不在 customize 和 3rdparty 这两个文件夹下,按照正常方式进行提交。 注 4.5: 编译产生的 log 存放在以下路径:out/target/product/xxx/log(xxx is customer project name)。 比如 当执行$ ./mk sp6820a n,sp6820a_new.log 将会在 out/target/product/sp6820a/log/sp6820a_new.log 中产生。 10 M ocor Smart 编译指导 当执行 $ ./mk sp6820a u,sp6820a_update.log 将会被产生。每个操作将会产生一个对应的 log,命名方式为 project_$action.log。 注 4.6: prebuild 动作的功能是把 3rdparty 目录和 customize 目录下文件按照设定的规则链接到对应目录 及一些编译必须的变量,文件的准备。 在进行模块编译前,需确保之前进行了一次 new 或是一次 pre-build,如果编译的模块又需要引用 到其它模块的编译成果,则必须做 new,才能保证编译此模块环境被准备好。一旦进行了以上动作, 后续模块编译或是 update 过程就没有必要做 pre-build 动作;一旦做了 clean 操作,后续编译模块必 须重新做 new 或是 prebuild 动作。 注 4.7: 目前有三种方式用来对 3rdparty/customize 目录下文件在编译时链接到其它目录,一是使用 route.mk,二是使用 special目录下 android 目录,三是在 PERL 脚本中定死链接路径。如果使用 route.mk 需要注意其只能存在于 hal/framework/kernel 这三个文件夹下(具体 route.mk 使用方法请参见: 3rdparty/readme),在其它目录下 route.mk 不起作用。如果使用 special 目录下 android 目录,则无需 route.mk。android 目录下文件路径与此文件应该链接到的路径是一一对应的。 使用 route.mk 进行链接例子参见:3rdparty/lcd/hx8357/kernel 使用 special 目录下 android 目录进行链接例子:3rdparty/wifi/UNIFI6030/special/android 使用在 PERL 脚本中定死链接路径进行链接例子:customize/customer_cfg/sp6820a/kernel 注 4.8: 在编译阶段如果有同一文件存在于 3rdparty,customize 各目录下在编译阶段需要链接到同一目 录,则在此种情况下会产生冲突,需要手动解决 冲突。为了便于排查这种冲突,加入了冲突检测机 制,会把有冲突的文件存入冲突文件列表 customize/collis ion.lst。 例如:multi_touch.c 文件同时存在与 3rdparty/wifi 目录与 3rdparty/app 目录下则会在 collision. lst 产生下述信息: link dest file: external/sprd/engineeringmodel/engtest/sp6820a/multi_touch.c link source file1: 3rdpart y/wif i/UNIFI6030/special/android/external/sp rd/engine eringmodel/engte st/sp6820a/multi_touc h.c link source file2 : 3rdpart y/app/app6820/special/and roid/exte rnal/sp rd/enginee ringmodel/engtest/ sp6820a/multi_touch.c 11 M ocor Smart 编译指导 5. 功能定义规则 5.1 如何定义项目功能 客户可以在../customize/make/${project}.mak 定义项目相关的功能,此文件的内容如 下: # Copyright (C) 2010 Spreadtrum. All Rights Reserved. # # SPRD Build System # BUILD_SPRD_PLATFORM = sc8810 BUILD_KERNEL_VERSION = kernel_2.3.5 BUILD_UBOOT_VERSION = u-boot_2.3.5 # # Customize for customer driver(configured according to your need) # 3RDPARTY_BLUETOOTH = BC6888 3RDPARTY_CAMERA2.3.5 = ov5640:ov2655:ov7675:ov2640:gc0309:nmi601 3RDPARTY_LCD = hx8369 3RDPARTY_GSENSOR = lis3dh 3RDPARTY_MSENSOR = akm8975 3RDPARTY_LSENSOR = AL3006 3RDPARTY_GPS = gsd4t 3RDPARTY_TP = PIXCIR 3RDPARTY_WIFI = UNIFI6030 3RDPARTY_FM = kt0812G 3RDPARTY_ATV = nmi601 12 M ocor Smart 编译指导 3RDPARTY_APP = app6820 # # SPRD COMMON MODULE(dedicated!!!.should not change) # 3RDPARTY_TOOLS = iperf-2.0.4:wireless_tools.29:tools-binary:testjar 3RDPARTY_HEADSET = headset-soc 3RDPARTY_AUDIO = snd_dummy_alsa_audio 3RDPARTY_MEDIASERVER = mediaserver_listener 3RDPARTY_FIREWALL= yeezone 3RDPARTY_UBOOT = uboot 3RDPARTY_GPU = mali # # SPRD KERNEL FEATUR CONTROL(configured according to your need) # #CONFIG_INPUT_TOUCHSCREEN = yes # # SPRD APP FEATUR CONTROL(configured according to your need) # 注 5.1: 目前我们支持的平台有 sc8800g 和 sc8810,内核版本有 kernel_2.3.5 和 kernel,U-boot 版本有 u-boot_2.3.5 和 u-boot。其中内核版本和 U-boot 版本与工程目录下具体使用的 kernel 和 uboot 目录名 称一致,具体使用那个目录由此配置项选择。 注 5.2: 3RDPARTY_CAMERA 代 表 此 选 项 控 制 的 是 3rdparty/camera 文 件 夹 。 等 号 后 的 ov5640:ov2655:ov7675:ov2640:gc0309:nmi601 代表 camera 模块的配置。多个配置之间以":"号隔开。 注 5.3: 在 SPRD COMMON MODULE 区域的宏不可以被修改。 13 M ocor Smart 编译指导 注 5.4: SPRD KERNEL FEAT UR CONTROL 下的配置项必须以 CONFIG_开头。SPRD APP FEAT UR CONTROL 下的配置必须由 SPRD_APP_开头。 注 5.5: 是否启动 SPRD APP FEATUR CONTROL 由 3RDPART Y_APP = app6820 决定,如果屏蔽掉 3RDPARTY_APP = app6820,则 SPRD APP FEAT UR CONTROL 下的配置都不 起作用,即以 SPRD_APP_ 开 头 的 配 置 项 都 不 起 作 用 。 打 开 APP 参 数 配 置 情 况 下 , 会 在 3rdparty/app/app6820/s pec ial/ android/framew orks/base/c ore/java/android/util 下 产 生 SprdFeatureUtils.java 文件和在 3rdparty/app/app6820/special/android/frameworks/base/include/utils 下产 生 SprdFeatureUtils.h。 此两个文件在上述 APP 配置下的内容分别为: A. SprdFeatureUtils.java: package android.util; public class SprdFeatureUtils { public static final boolean SPRD_APP_USE_TASKMANAGER = false; } B. SprdFeatureUtils.h: #undef SPRD_APP_USE_TASKMANAGER 注 5.6: 在模块配置目录下目前脚本可以控制 4 个目录,分别为 hal,framework,kernel,special。其中 special 目录主要是为了与之前已经调试好的模块兼容,如果需要把基于之前版本开发的模块代码移 植到客户化配置版本,可以把相关模块代码拷入此文件夹。Hal,framework,kernel 文件夹主要是存 放此模块 hal 层,framework 层,kernel 层代码。模块配置目录可以有以上一个或多个目录,如果非 以上四个文件夹则会忽略而不处理。 5.2 如何为已有模块增加新器件 以为 lcd 模块新加 r61581 器件配置为例: 步骤 1: 在 customize/make/cust_prj.mak 中添加 3RDPARTY_LCD = hx8357:r61581 14 M ocor Smart 编译指导 步骤 2: 在 3rdparty/lcd 目 录 下 新 建 r61581, 在 r61581 文 件 夹 下 根 据 需 要 建 立 相 关 文 件 夹 (hal/framework/kernel/special 中的一个或多个),在建立的文件夹中加入相关文件即可。 5.3 如何新加一个模块 以新加模块 A(模块名)(包含两模块配置:B 和 C)为例: 步骤 1: 在 customize/make/cust_prj.mak 中添加 3RDPARTY_A = B:C 步骤 2:在 3rdparty 目录下新建目录 a(模块名,小写),在 a 目录下新建目录 B 和 C(模块配置, 大小写与步骤 1 中配置项一致) 步骤 3:在 B 和 C 下根据需要加入相关文件夹(hal/framework/kernel/special 中的一个或多个)。 目前假设:A 模块 的 B 模块配置有 1. java 和 2.java 需要链接至同一路径 path1,并且此两文件 属于同一 Android.mk,另外有 3.java 需要链接至不同路径 path2。在 kernel 目录下有 4.c 文件,以上 链接路径都由 route.mk 管理。C 模块配置下有 hal 文件夹,其下只有 Android.mk.3rdparty 需要链接 至相应目录(目标目录下会去除.3rdparty 后缀)和 special 文件夹。以上情形下模块目录结构如下: A ├── B │ ├── framework │ │ ├── path1 │ │ │ ├── 1.java │ │ │ ├── 2.java │ │ │ └── route.mk │ │ └── path2 ││ ├── 3.java ││ └── route.mk │ ├── kernel │ │ ├── 4.c │ │ └── route.mk │ └── special └── C ├── hal │ ├── Android.mk.3rdparty-->目标文件名 Android.mk │ └── route.mk └── special 5.4 route.mk 使用说明 本节主要通过举例说明 route.mk 的使用方法。 例如: 15 M ocor Smart 编译指导 DST_SRC_FOLDER = frameworks/base/libs/audioflinger DST_MK_FOLDER = frameworks/base/libs/audioflinger DST_SRC_FOLDER 代 表 与 route.mk 同 目 录 下 的 文 件 将 会 被 链 接 到 frameworks/base/libs/audioflinger 目 录 , 如 果 是 .c/.java/.cpp/.h 格 式 新 文 件 则 最 后 进 入 out/target/product/xxxx(cust_prj)/frameworks/base/libs/audioflinger/new ;如果是目标文件夹下有此文 件,会首先备份该文件至.Android 文件夹,再直接链接至目标文件夹;如果是非.c/.java/.cpp/.h 类型 文件,总是直接链接至目标文件夹;如果在目标文件在展讯 RELEASE 包中有此文件,则在链接之 前还需做备份,最终被包含进 DST_MK_FOLDER 指向的 Android.mk。且 Android.mk 会自动被改写。 注 5.7: 注 意 客 户 有 全 新 的 Android.mk 需 要 生 成 , 请 直 接 在 Android.mk 相 对 应 目 录 DST_MK_FOLDER = frameworks/base/libs/audioflinger 文件夹下生成。 注 5.8:注意在此目录下非.c .cpp .java .h 以外格式的文件,链接时会直接进入 DST_SRC_FOLDER 指向的目录。 注 5.9:每个文件夹下的文件都需要在目标目录下处于同一目录层次,在目标文件夹下不同层次 的文件请放置与不同文件夹。 注 5.10:可以在 framework 文件夹下放任意多层文件夹,但是每个文件夹下都必须有一个 route.mk。 注 5.11:如果文件夹下文件无需加入 makefile,可以不写 DST_MK_FOLDER 路径。 16

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。