【网学网提醒】:网学会员编辑为广大网友搜集整理了:buildingAndroid_notes绩等信息,祝愿广大网友取得需要的信息,参考学习。
Android使用的build系统与普通Linux软件的build工具有很大不同。
普通的软件项目一般使用autotools工具,包括autoconf,automake,libtool等,利用这些工具来自动生成Makefile。
而Android创建了一套自己的系统来生成Makefile。
Android源码中的build/core/build-system.html
Androidbuild系统定义了一套自己的变量,宏等,如LOCAL_MODULE_TAGS,LOCAL_PACKAGE_NAME等,如何代入这些变量,如何展开这些宏,都在build/core目录下的文件中定义。
开发人员可以使用这些变量编写Androidbuild系统的Makefile--Android.mk;每个模块,如一个应用,一个共享库等,都有一个自己的Android.mk。
在编译的时候,Android.mk中的宏就会被展开成相应的Make规则,变量也会代入相关的规则。
下面以packages/apps/AlarmClock/Android.mk举例介绍:
-------------------------------------------------------
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE_TAGS:=engdevelopment
LOCAL_SRC_FILES:=$(callall-subdir-java-files)
LOCAL_PACKAGE_NAME:=AlarmClock
include$(BUILD_PACKAGE)
-------------------------------------------------------
关于这些变量的含义,在build/core/build-system.html中都有具体介绍。
值得注意的是,
如果是生成一个可执行
程序,则引用BUILD_PACKAGE,
如果生成一个library,则引用BUILD_SHARED_LIBRARY。
我们可以模仿现有的Android.mk去创建自己的Android.mk。
build/envsetup.sh中引入了几个方便的命令可用来帮助执行build命令。
m:执行对整个Android源码的build
mm:执行对当前目录下模块的build.
printconfig:当前build的配置情况。
在整个Android源码编译完成后,生成的二进制文件以及image等都安装在out/目录下。
通过如下命令序列可以启动emulator(假设Android源码安装在~/mydroid目录下):
exportANDROID_PRODUCT_OUT=~/mydroid/out/target/product/generic/
cd~/mydroid/out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates
./emulator
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先按照source.android/download配置系统
然后
下载android平台文件
repoinit-ugit://android.git.kernel.org/platform/manifest.git
reposync
在平台所在文件夹下运行
.build/envsetup.sh
在build/core/main.mk文件中的
ifeq($SDK_ONLY),true)行前面
添加SDK_ONLY:=false
BUILD_TINY_ANDROID:=true
保存。
在平台所在文件夹下,运行mm,系统将自动编译整个平台。
所生成的文件的存放路径也会提示出来。
如果提示和libpixelflinger与hardware_legacy依赖相关的错误,
则修改
Android.mk中的LOCAL_SHARED_LIBRARIES
将hardware_legacy行去掉。
Tag标签:android,android
buildsystem,androidplatform
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在kernel子目录下存放的就是Android的LinuxKernel了,通过和标准的Linux2.6.25Kernel的对比,我们可以发现,其主要增加了以下的内容:
1.基于ARM架构增加Gold-Fish平台,相应增加的目录如下:
kernel/arch/arm/mach-goldfish
kernel/include/asm-arm/arch-goldfish
Gold-Fish平台采用的是ARM926TCPU作为BaseBand处理器,该CPU主频至少为200MHZ.采用MSM7201ACPU(ARM11)作为主CPU,其主频为528MHZ.
2.增加了yaffs2FLASH文件系统,相应增加的目录为:kernel/fs/yaffs2
实际上,Android包经过编译后生成的system.img和ramdisk.img文件就是yaffs2格式的包.
3.增加了Android的相关Driver,相应目录为:kernel/drivers/android
主要分为:
AndroidIPC系统:Binder
Android日志系统:Logger
Android电源管理:Power
Android闹钟管理:Alarm
Android内存控制台:Ram_console
Android时钟控制的gpio:Timed_gpio
4.增加了switch处理,相应的目录为:kernel/drivers/switch/
5.增加了一种新的共享内存处理方式,相应增加的文件为:kernel/mm/ashmem.c
6.其他为Linux-2.6.25内核所做的补丁等等,例如BlueTooth,在此不做详细分析
另外GoldFish平台相关的驱动文件如下:
1.字符输出设备:kernel/drivers/char/goldfish_tty.c
2.图象显示设备:(FrameBuffer)kernel/drivers/video/goldfishfb.c
3.键盘输入设备:kernel/drivers/input/keyboard/goldfish_events.c
4.RTC设备:(RealTimeClock)kernel/drivers/rtc/rtc-goldfish.c
5.USBDevice设备:kernel/drivers/usb/gadget/android_adb.c
6.SD卡设备:kernel/drivers/mmc/host/goldfish.c
7.FLASH设备:
kernel/drivers/mtd/devices/goldfish_nand.c
kernel/drivers/mtd/devices/goldfish_nand_reg.h
8.LED设备:kernel/drivers/leds/ledtrig-sleep.c
9.电源设备:kernel/drivers/power/goldfish_battery.c
10.音频设备:kernel/arch/arm/mach-goldfish/audio.c
11.电源管理:kernel/arch/arm/mach-goldfish/pm.c
12.时钟管理:kernel/arch/arm/mach-goldfish/timer.c
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------