(一):写在前面html
在上面一个小节当中,咱们学习了将CM移植到咱们本身的设备的上半部分,这里,咱们将下半部分学习一下,并尝试讲CM移植到一个平板上去。linux
(二):承接上文android
device_[codename].mk
git
文件device_[codename].mk
包含关于构建哪个Android包,去哪里复制指定文件和包或者是在整个编译阶段要设置的指定属性等的指令。web
该文件能够在编译阶段被用来说重要文件复制到ramdisk中。ruby
$OUT/recovery/root
中。举个列子:markdown
$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \
这会将文件offmode_charging二进制复制到位于ramdisk中的sbin
文件夹中。架构
kernel
app
这个就是一个简单的预编译的内核镜像或者是一个你将要编译的内核,用于启动设备。内核的格式多是zImage或者是uImage,这个依赖于你的设备架构的要求。框架
cm.mk
在这个文件中你须要去作一些改动来集成lunch
,brunch
,breakfast
命令,以便你的设备可以在列表中展示出来,而且可以正确编译。
你也须要去设置一些变量来表示应该使用多大的闪存,手机设备仍是平板设备等等。
有些设置不只仅用于编译recovery,你也能够如今去设置,由于一旦recovery构建成功而且正常运行,这里的设置是很是重要的。最好的方式就是去查看类似的设备是如何设置的。
recovery.fstab
recovery.fstab
文件定义了文件系统挂载点,文件系统类型,还有你的设备中的每个分区的快设备。他的工做和linux系统中的/etc/fstab
是同样的。
举个例子:
/system ext4 /dev/block/mmcblk0p32
该命令设置位于mmcblk0p32的快设备以ext4
文件系统的方式挂在到/system
中。
全部的挂载点应该存在于该文件中,信息的正确性是很是重要的。假如一个recovery falsh被写到错误的位置,将会发生难以预料的错误。
vendorsetup.sh
当vendor.sh
运行的时候,vendorsetup.sh
被调用。他被用来说非标准的lunch
组合添加到lunch
菜单中。
为了向lunch菜单中添加你的设备:
add_lunch_combo cm_<codename>-userdebug
为了能仅仅构建recovery,设置lunch
惟一一个常规构建,而且使用make recoveryimage
。
有用的技巧 若是你有fastboot,你能够尝试使用他讲recovery镜像安装到recovery分区。也有其余方法来安装recovery,例如使用`dd`命令。
这里没必要说不少,可是必定要保证白运行CM以前,必定要确保recovery正常工做。一个100%正常工做的recovery模式是运行android系统以前必须的条件。
若是有必要,调整recovery_ui.cpp
你可能发现了,虽然recovery镜像运行了,有一些物理按键,例如声音按键和电源按键可能不能正常工做。
你可能须要去调整GPIO数值来使得按键被识别。类似的,你可能须要include/exclude选项或者是修改其余UI元素。
为了这样作,你可能须要去建立而且编辑/device/[vendor]/[codename]/recovery/recovery_ui.cpp
。
有用的提示 你的设备的GPIO可能在内核源码中找到。
向vendor/
目录中添加块
一旦咱们构建了能够正常运行的recovery,咱们就能够去构建CM系统了。
咱们须要作的第一件事情就是获取全部的属性,二进制块到vendor/
目录下面,同时也须要.mk
文件来包含他们。
下面是必须的三个步骤:
extract-files.sh
和setup-makediles.sh
脚本使用adb
将块文件从你的设备中拉下来,而后将他们放到/vendor/
目录中。.mk
文件在编译期间复制这些文件到$OUT
文件夹中,并将他们放到合适的位置。一样,能够参考其余设备的源码。一个例子文件名称多是BoardConfigVendor.mk
。BoardConfig.mk
中被包含了,也就是使用命令-include vendor/[vendor]/[codename]/BoardConfigVendor.mk
。device/
目录
既然咱们有了一个正常工做的recovery,咱们来修改位于device/
文件夹中的文件。一样,参考其余类似设备的源码。
从制造商&供应商那里获取帮助
不少生产该平台的生产厂商会提供wiki,文档和例子代码,这些均可以帮助以完成你的移植。你会发现一些公司对开发社区可能很是友好。下面是一些OEMS。
OEM | 平台 | 仓库/资源 |
---|---|---|
各类 | Google’s Git Repository,Nexus binary blobs | |
HTC | 各类 | Dev Center |
HP | 各类 | HP OPEN SOURCE |
Lenovo | 各类 | Lenovo Smartphones (Search your device) |
LG | 各类 | LG Open Source Code Distribution |
Motorola | 各类 | Motorola Open Source Center |
Nvidia | Tegra | Tegra’s GitWeb |
Qualcomm | MSM/QSD | Code Aurora Forum |
Samsung | 各类 | Samsung Open Source Release Center |
Texas Instruments | OMAP | www.omapzoom.com,Omappedia |
有的时候,若是你有问题须要咨询,你能够经过email或者是支持论坛来询问开发者。
在你的device_[codename].mk
文件中,颇有可能存在像下面这样的代码:
DEVICE_PACKAGE_OVERLAYS := \ device/[vendor]/[codename]/overlay
他所完成的工做就是数字overlay/
文件夹来容许你覆盖仅仅用于该设备的Android框架或者是APP的任何XML文件。为了这样作,咱们须要建立一个目录结构,该结构反射指向一个XML文件的路径,从你的源码的根开始。而后把该文件放到你想覆盖的地方。
举个例子:假设你想覆盖一些标准Android设置。在frameworks/base/core/res/res/values/config.xml
文件中查看。而后将他复制到device/[vendor]/[codename]/overlay/frameworks/base/core/res/res/values/config.xml
文件中。如今你的版本将会使用。你仅仅须要要把你想覆盖的设置包含进去就好了–不是全部的,因此你能够削减文件来从默认的设置中修改。
你能够覆盖任何XML文件,包括layouts,settings,preferences,translations等。
若是以前你使用的是预构建的内核,你可能想要构建本身的内核。
后面咱们有一片文章专门讲解如何修改BoardConfig.mk
文件。
经过两篇文章就能把CM移植到你的设备上是不太可能的,中间可能会出现不少意向不到的问题,咱们就能够根据出现的问题和这两篇文章就行修改来正确知足咱们的需求。光看文章是不够的,咱们抓紧开始一个设备的移植吧。
祝你好运。