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

祝你好运。

目录
相关文章
|
4月前
|
Android开发 iOS开发 UED
探索未来:Android与iOS在智能穿戴设备上的较量
随着科技的飞速进步,智能穿戴设备已经成为我们日常生活中不可或缺的一部分。本文将深入探讨两大操作系统——Android和iOS——在智能穿戴领域的竞争与发展,分析它们各自的优势与挑战,并预测未来的发展趋势。通过比较两者在设计哲学、生态系统、用户体验及创新技术的应用等方面的差异,揭示这场较量对消费者选择和市场格局的影响。 【7月更文挑战第31天】
51 0
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
87 0
|
3月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
50 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
3月前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
55 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
3月前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
78 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
3月前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
48 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
3月前
|
Android开发
不写一行代码(二):实现安卓基于PWM的LED设备驱动
本文介绍了在Android系统中不编写任何代码,通过设备树配置和内核支持的通用PWM LED驱动来实现基于PWM的LED设备驱动,并通过测试命令调整LED亮度级别。
43 0
不写一行代码(二):实现安卓基于PWM的LED设备驱动
|
3月前
|
Linux Android开发 C语言
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
本文通过实践操作,展示了在Android系统中不编写任何代码,利用设备树(DTS)配置和内核支持的通用GPIO LED驱动来控制LED设备,并进一步通过C语言编写NDK测试APP来实现LED的闪烁效果。
141 0
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
|
3月前
|
存储 Ubuntu API
如何使用Python创建服务器向Android设备发送GCM推送通知
如何使用Python创建服务器向Android设备发送GCM推送通知
27 0
|
4月前
|
Android开发 数据安全/隐私保护 iOS开发
探索未来:安卓与iOS在智能穿戴设备领域的较量
随着科技的飞速发展,智能穿戴设备已逐渐成为我们日常生活的一部分。从健康监测到通讯交流,它们正以惊人的速度改变着我们的生活方式。本文将深入探讨安卓和iOS这两大操作系统在智能穿戴领域的现状、竞争以及未来发展趋势,揭示它们如何通过创新技术满足用户需求,并预测未来可能的发展方向。
41 0