如何将CM android移植到你的设备(二)

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50372553 (一):写在前面在上面一个小节当中,我们学习了将CM移植到我们自己的设备的上半部分,这里,我们将下半部分学习一下,并尝试讲CM移植到一个平板上去。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/50372553

(一):写在前面

在上面一个小节当中,我们学习了将CM移植到我们自己的设备的上半部分,这里,我们将下半部分学习一下,并尝试讲CM移植到一个平板上去。


(二):承接上文

device_[codename].mk

文件device_[codename].mk包含关于构建哪一个Android包,去哪里复制指定文件和包或者是在整个编译阶段要设置的指定属性等的指令。

该文件可以在编译阶段被用来讲重要文件复制到ramdisk中。

  • PRODUCT_COPY_FILES:用于在编译期间将文件复制到ramdisk中,该文件将被加载到$OUT/recovery/root中。

举个列子:

$(LOCAL_PATH)/sbin/offmode_charging:recovery/root/sbin/offmode_charging \

这会将文件offmode_charging二进制复制到位于ramdisk中的sbin文件夹中。

  • PRODUCT_NAME/PRODUCT_DEVICE:用于设置你的codename的值。这是你使用Lunch加载的设备的名称。

kernel

这个就是一个简单的预编译的内核镜像或者是一个你将要编译的内核,用于启动设备。内核的格式可能是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镜像

为了能仅仅构建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文件来包含他们。

下面是必须的三个步骤:

  1. 创建extract-files.shsetup-makediles.sh脚本使用adb将块文件从你的设备中拉下来,然后将他们放到/vendor/目录中。
  2. 创建一个.mk文件在编译期间复制这些文件到$OUT文件夹中,并将他们放到合适的位置。同样,可以参考其他设备的源码。一个例子文件名称可能是BoardConfigVendor.mk
  3. 确保刚刚创建的Makefile在你的主BoardConfig.mk中被包含了,也就是使用命令-include vendor/[vendor]/[codename]/BoardConfigVendor.mk



现在修改device/目录

既然我们有了一个正常工作的recovery,我们来修改位于device/文件夹中的文件。同样,参考其他相似设备的源码。


从制造商&供应商那里获取帮助

很多生产该平台的生产厂商会提供wiki,文档和例子代码,这些都可以帮助以完成你的移植。你会发现一些公司对开发社区可能非常友好。下面是一些OEMS。

OEM 平台 仓库/资源
Google 各种 Google’s Git RepositoryNexus 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.comOmappedia

有的时候,如果你有问题需要咨询,你可以通过email或者是支持论坛来询问开发者。



添加XML

在你的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移植到你的设备上是不太可能的,中间可能会出现很多意向不到的问题,我们就可以根据出现的问题和这两篇文章就行修改来正确满足我们的需求。光看文章是不够的,我们抓紧开始一个设备的移植吧。

祝你好运。

目录
相关文章
|
5天前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。
|
20天前
|
安全 物联网 测试技术
构建未来:Android与IoT设备的无缝交互深入探索软件自动化测试的未来趋势
【5月更文挑战第30天】在物联网(IoT)技术快速发展的当下,Android系统因其开放性和广泛的用户基础成为了连接智能设备的首选平台。本文将探讨如何通过现代Android开发技术实现智能手机与IoT设备的高效、稳定连接,并分析其中的挑战和解决方案。我们将深入挖掘Android系统的底层通信机制,提出创新的交互模式,并通过实例演示如何在Android应用中集成IoT控制功能,旨在为开发者提供一套可行的指导方案,促进IoT生态系统的进一步发展。
|
25天前
|
Shell 开发工具 Android开发
|
1月前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
40 5
|
1月前
|
Android开发
Android监听USB设备插拔
Android监听USB设备插拔
57 7
|
1月前
|
Android开发
Android 获取 USB设备列表
Android 获取 USB设备列表 【5月更文挑战第6天】
39 4
|
1月前
|
Android开发
获取Android设备屏幕大小
获取Android设备屏幕大小
26 3
|
1月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
44 5
|
1月前
|
存储 监控 Java
Android Service之设备存储空间监控 DeviceStorageMonitorService
Android Service之设备存储空间监控 DeviceStorageMonitorService
31 2
|
1月前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
19 1