为android源码添加新设备支持概述
2015-11-14 10:51
513 查看
1目录结构概述
源码根目录下的device目录中保存的是各个厂商相应的代码,故我们可以在这里创建一个自己的目录,比如以公司名称命名,比如felix。公司目录下是自己的设备目录,可以有多个,比如weatherfish。这样,我们在device目录下就由了felix/weatherfish目录.
2 vendorsetup.sh
在上面创建的目录下,新建一个vendorsetup.sh文件,用于在lunch命令的时候调用,告知系统你的位置。内容如下:
add_lunch_combo aosp_weatherfish-userdebug
这个定义是在envsetup.sh中被调用的,循环遍历查找device目录和vendor目录下的vendorsetup.sh,找到后就include进去。其中vendor目录是4.3以前的版本。
# Execute the contents of any vendorsetup.sh files we can find. for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \ `test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` do echo "including $f" . $f done unset f
3 添加AndroidProducts.mk
通过PRODUCT_MAKEFILES 包含指定的makefile文件,用于指定编译完成后需要拷贝到设备文件系统中的各种文件;设置系统属性(/system/build.prop)等功能。# Get the long list of APNs PRODUCT_COPY_FILES := device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml # Inherit from the common Open Source product configuration $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) PRODUCT_NAME := aosp_weatherfish PRODUCT_DEVICE := weatherfish PRODUCT_BRAND := Android PRODUCT_MODEL := AOSP on Weatherfish PRODUCT_MANUFACTURER := felix PRODUCT_RESTRICT_VENDOR_FILES := true $(call inherit-product, device/felix/weatherfish/device.mk) $(call inherit-product-if-exists, vendor/felix/weatherfish/device-vendor.mk) PRODUCT_NAME := aosp_weatherfish PRODUCT_PACKAGES += \ Launcher3
系统变量说明:
PRODUCT_NAME 产品名称,最终会显示在 关于设备 选项卡中。 PRODUCT_DEVICE 设备名称 PRODUCT_BRAND 产品所属品牌 PRODUCT_MANUFACTURER 产品生产商 PRODUCT_MODEL 产品型号 PRODUCT_PACKAGES 系统需要预装的程序,如apks PRODUCT_LOCALES 所支持的国家语言 [两字节语言码]-[两字节国家码] PRODUCT_POLICY 策略 PRODUCT_TAGS 产品标签描述 PRODUCT_PROPERTY_OVERRIDES 用于重载系统属性
4 BoardConfig.mk
用于填写目标架构、硬件设备属性、编译器的条件标致、分区分布、boot地址、ramdisk大小等,这部分可以参考其他项目源码,内容太多,而且基本类似,完成可以参考其同意系统架构的,这里就不列出了。5 Android.mk
这部分是android系统下编译某个模块的标准的makefile。然后执行make命令就可以编译android源码了。
6生成文件分析
编译完成后回在out/target/product/[YOUR_PRODUCT]/目录下生产最终的镜像文件。包括以下:boot.img 包含内核启动参数,内核等多个元素 randisk.img 一个小型的文件系统,是android系统启动的关键 system.img android系统运行的程序包(frameworks),被挂载在/system userdata.img 各程序的数据存储,被挂载在/data recovery.img 设备进入 恢复模式 时所需要的镜像包 misc.img 即 miscellaneous 包含各种杂项资源 cache.img 缓存区,被挂载在/cache
6.1 boot.img
其由system/core/mkbooting中生成的mkbooting工具制作,有两个地方会调用它:droidcore依赖,和build/core/Makefile.参考system/core/mkbooting/Bootimg.h文件,其头部结构如下:
** +-----------------+ ** | boot header | 1 page ** +-----------------+ ** | kernel | n pages ** +-----------------+ ** | ramdisk | m pages ** +-----------------+ ** | second stage | o pages ** +-----------------+
其中1page是4K header中包含一个结构体
boot_img_hdr,该结构体定义也在Bootimg.h中;Kernel,其大小为(kernel_size+page_size-1)/page_size,也就是页对齐的;ramdisk同样是页对齐的;second stage是可选的,用于扩展。
6.2 ramdisk.img
可以通过file ramdisk.img命令查看其文件属性为gzip压缩文件,然后添加后缀.gz后,用
gzip -d ramdisk.img.gz解压缩得到一个cpio格式的ramdisk.img文件。最后用
cpio -i -F ramdisk.img,解压出具体内容。
6.3 System.img
可以使用simg2img方式解压缩system.img文件, 然后在用mount挂载simg2img system.img system.img.step1 sudo mount -o loop system.img.step1 system_extracted
7 OTA系统升级
首先是生成升级包,在执行完make命令,生成过system.img文件后,可以使用如下命令生产升级包make otapackage
这里生成的是完整的升级包,也可以使用`build/tools/releasetools/ota_from_target_files 生成差分包。
相关文章推荐
- android OTA更新
- Android添加新版本支持包V7后自定义ActionBar左侧有空白,不能玩全填充问题解决
- Android手机如何录制屏幕及转GIF
- Android日志工具类 + Activity传值规范 + Activity退出管理
- 编译Android源码过程中出现的错误
- Android 之内容提供者 内容解析者 内容观察者
- Android——布局layout中的一些属性
- android真机模拟程序 root权限下 查看项目数据库
- android:ToolBar详解
- Android最佳性能实践 ---- 读后总结
- android fragment切换,必须会的
- android 入门记录
- Android Handler 消息机制
- Android基础入门教程——8.3.16 Canvas API详解(Part 1)
- Android视频录制命令screenrecord
- android 2048
- Android Intent的两种用法
- Android SQLite创建数据库和两种增删改查
- Android studio好用插件
- Android-(广播接收器)BroadcastReceiver-2