关于将cm android移植到你的设备上的一些技巧
你可能会遇到CM并不支持的手机设备或者是平板设备。
原来的时候我们可能会编译那些cm支持的设备源码,并将其烧录到设备中来测试运行,那个过程是相当轻松的,但是如果要移植到CM并不支持的设备上去的话,可能需要费点力气。
在这边文章中,我们假设你所在的目录是android的源码根目录。
先决条件
移植cm到一个新的设备上去可以是非常简单的,也可能是非常困难的,这依赖于设备本身,设备当前是否运行一个最近版本的Android系统,还有一个原因就是你的开发技巧。
此外,你应该熟悉CM的源码。在整个移植过程中,你需要做的所有的工作都是在目录/device/[vendor]/[codename]
,/vendor/[vendor]/[codename]
,和/kernel/[vendor]/[codename]
中。
收集你的设备的信息
在你开始移植之前,你需要尽可能多的去收集你设备的信息。我们需要的信息是设备名称,代码名称,架构,内存大小,内部存储大小和平台架构。将这些信息放在一个便于检索的文件中。尝试更多的去了解你的设备,包括它与其他设备的相似性。
有用技巧
多设备在架构上可能与一些其他设备相似,这些其他设备可能已经有cm支持了。当新的设备出现的时候,查看你是否能够找到相似的其他设备,仅仅在屏幕大小或者是内存或者是其他微小地方上的不同。如果你发现了你的设备的一个”ancestor”或者是”sibling”,大部分工作已经为你做好了。
大多数你需要的信息可以在网络上获取得到,但是假如设备已经运行了一个非cm的Android系统,你可以从设备本身获取一些信息。为了查看包含这些信息的文件,设备可能需要获取root权限。然而,有的时候你可能在线获取到一个固件升级包,然后可以从.zip
文件包中查看这些文件。
查看设备的当前/system/build.prop
假设设备已经运行了一个版本的Android系统,他的文件系统中应该存在一个文件,/system/build.prop
,该文件可以提供一些有用的信息。该文件包含用于Android设置和变量参数的定义。
所以,如果在你的计算机中已经安装了adb
,你可以使用下面的命令拉到你的计算机中:
adb pull /system/build.prop
如果收到了关于权限的错误,设备可能需要去获取root权限去访问该文件。然而,有其他方式去定位这个文件。例如,他也会包含在固件更新包中。
一旦你有了这个文件:
ro.product.manufacturer
参数的值。这个就是你的vendor
的名称。[vendor]
是设备的制造商/提供商的名称。CM已经为大多数主要的供应商简历了名称,例如samsung
,htc
,lge
等等。注意在这些目录名称中,vendor一直是小写的,并且不包含空格。写下参数ro.product.device
的值。该值就是你的设备的codename
。[codename]
对应着设备本身的项目代码名称。如果你之前构建过CM,你应该熟悉每一个设备的代码名称的概念。就像是vendor名称,codename一直都是小写的,并且不包含空格。
注意:
有的时候,设备会定义其他参数,例如ro.product.board
保留着build.prop
文件,因为后面我们会用到他。
检查boot.img
和recovery.img
如上所述,当进行移植的时候,你可能希望使用一个现存可用的预构建的内核而不是从源码重新编译。依赖于您的设备,你可能需要从设备中提取该内核文件。内核可能以一个单一文件存在或者是在boot或者是recovery分区中被打包起来。
相似的,ramdisk的内容可能是非常有用的,并且能够被提取出来。他可能为正确启动,加载模块等提供特定的文件。在大多数情况下,你可以从设备的ramdisk中去查看这些文件。
注意:
ramdisk是一个文件和目录的小组,它通过内核加载到内存当中。内核接着运行位于ramdisk中称为init
的一个文件,然后运行一个脚本文件(init.rc
,init.[codename].rc
等),该脚本文件加载Android的其他部分。我们可以使用称为mkbootimg
,mkimage
或其他方法以不同方式讲ramdisk和内核打包在一起。
我们可以使用dd
从一个获取root权限的android设备中提取出boot和recovery镜像文件(我们称为boot.img
和recovery.img
),或者是如果你可以从供应商中访问一个更新包.zip
文件的话,你在里面也可以找到这些文件。
收集任何现有的源码
使用Android的设备的制造商或者是供应商都会尽可能的遵守GPL协议,将源码包括内核公开的,所以,我们需要这样一份代码。
决定分区表
你的移动设备的基本上长期存储部分 – 通常是一个”emmc”(嵌入式多媒体卡) – 看上去更像是计算机的硬盘,他能以不同的方式去定义和隔离不同数据的区域。这些独一无二的区域被称为分区,他们有很多不同类型的数据存储在这里面。一些分区包含原声数据 – 固件,内核,ramdisk等等。大多数情况下,一个分区被格式化去使用一个特定的文件系统,该文件系统会被内核重新识别,这样文件和目录就能够被读取和写入了。
在你可以使用CM替换原来的操作系统的时候,确定设备的分区表是非常重要的。你构建的recovery镜像需要这个信息去了解到哪里去查找各种各样的Android目录。特别的,你需要知道哪一个分区被分配到/system
,/data
,/cache
和/sdcard
。你需要知道哪一个分区存在,在什么设备上,他们是怎样被挂在的,还有就是分区的大小。这些信息后续都需要传送到位于你的/vendor
目录中的BoardConfig.mk
文件中。
如果你幸运的话,recovery.fstab
文件坐落在recovery.img
镜像中,这样就能够加快我们弄清楚什么去哪里的速度。当然,位于ramdisk中的inint.[codename].rc
文件也会有一些有用信息。我们通过下面的命令来查看分区被挂载到哪里了:
cat /proc/partitions
从一个运行的设备中可以帮助我们定义分区。也可以查看/proc/emmc
,/proc/mounts
,/proc/mtd
。你也可以从命令mount
中获取一些信息。(以root身份运行)。
也要检查/cache/recovery.log
或者是/tmp/recovery.log
文件。
最后,如果你有bootloader的源码,你也可以获取一些信息。
注意:
要知道会有一些特殊例子,例如HP Touchpad,他就使用了一个抽象的虚拟文件系统。
设置三个新的目录
现在,我们已经收集了关于我们的设备的一些信息,是时候为你的设备配置生成一些文件夹了。
device/[vendor]/[codename]/
–这个是存放你的设备特有的安装文件的地方。device/
目录包含配置设置的99-100%和用于特别设备的其他代码。你将会发现这个目录是非常好的。正如上面提到的,当为这个设备开始了一个文件夹,模仿和他相似的设备的目录是一个好主意。vendor/[vendor]/[codename]/
–vendor/
目录包含了属性,从原始设备备份来的二进制块(或者是有供应商提供的)。kernel/[vendor]/[codename]/
–内核源码的位置。当你初次开始移植尝试的时候,你可能希望简单是使用预编译的内核而不是通过源码重新编译。方法就是从其他系统中提取出内核,然后带着新的ramdisk重新打包它,把他打包成你的设备可以使用的格式。该方法在设备和设备之间是不同的,所以查看相似的设备是非常有用的。从源码中构建内核不是对每一个设备都很严格,但是本着开源精神,对CM来说这个是更好的方式。有至少三种方法来生成这些目录:
方法一:使用mkvendor.sh
来生成基本文件
使用位于build/tools/device/
中的mkvendor.sh
来自动生成目录。
注意:
mkvendor
脚本仅仅在设备使用一个标准的boot.img
,使用标准的Android协议和头文件的时候才能正常运转,在其他方式下是不能正常工作的。
该脚本接受三个参数:vendor,codename,还有一个boot.img
文件。
举例:
./build/tools/device/mkvendor.sh samsung i9300 ~/Desktop/i9300boot.img
在上面的例子中,samsung
代表vendor,i9300
代表codename,最后一个参数是boot.img所在的路径。
其中的boot.img是使用dd
命令从boot分区下载的或者是从更新包中获取的。
上面的命令应该会在你的CM源码目录下创建一个/device/samsung/i9300
文件夹。在文件夹里面,会有文件AndroidBoard.mk
,AndroidProducts.mk
,BoardConfig.mk
,cm.mk
,device_[codename].mk
,kernel
,recovery.fstab
等等。
这个命令并不会创建kernel/
目录。当我们准备好构建内核的时候,我们需要手动创建该文件夹。
注意:
如果返回信息”unpackbootimg not found.Is your android build environment set up and have the host tools been built?”,请运行下面的命令:
`make -j4 otatools`
方法2:fork一个相似设备的git仓库
方法3:手动创建目录和文件
你可以手动的创建相应的目录和文件。这个不太推荐,因为这或许是一个无聊的方法,但是很有指导意义。你可以查看其他设备作为参考你需要什么文件。
定制文件
在device/
文件夹中有很多文件。我们将会通过关注四个文件BoardConfig.mk
,device_[codename].mk
,cm.mk
,recovery.fstab
和kernel
开始。
我们来检查每一个文件:
BoardConfig.mk
这个文件包含关于你设备母板,CPU和其他硬件架构的重要信息。正确的获取这个文件是非常重要的。为了得到一个基本的recovery booting,在这个文件中需要设置一些参数。
为了编译一个正常运转的recovery镜像,下面的参数必须要在BoardConfig中设置:
ramdisk.img
中找到这个信息。boot.img
的页面大小,为了能够启动,一定要正确设置。该参数典型的数值是2048和4096。该信息可以从内核中提取出来。BOARD_USERDATAIMAGE_PARTITION_SIZE:分配给Android数据文件系统分区的大小
注意:
上面的信息都可以从/proc/partitions
或者是/proc/mtd
获取的到,典型的就是1024。
BOARD_HAS_NO_SELECT_BUTTON:(可选),如果你的设备需要使用他的Power按钮来确认选择就使用该选项。
现在先到这里,后面的教程会在下一篇文章中讲解!!谢谢大家。
文章浏览阅读1k次。profile的使用_spring profiles加载顺序
文章浏览阅读754次,点赞14次,收藏3次。*原因分析:**上传时头部信息,content-type内容不对应,修改为multipart/form-data即可。:在前端开发时,需要通过表单元素上传图片或其他文本,但是上传不成功,后端接口也没问题。
文章浏览阅读418次。文章目录声明使用的版本两种方法使用fabric-ca使用ca-server的docker容器打开https配置对应的yaml文件停止/启动docker查看容易的log查看证书目前的ip在其他机器上使用ca-server使用二进制工具打开https一个标识打开https接下来的步骤最终生成的文件夹如下声明使用的版本fabric版本如下:1.4.8node-sdk版本:1.4.8node版本:v8.11.1ubuntu版本:16.04两种方法使用fabric-ca有两种方法都能使用fabric_failed to enroll admin user : error: calling enroll endpoint failed with err
文章浏览阅读2.1w次,点赞3次,收藏5次。php编译安装与配置===========================================官网:http://php.net/官网下载:http://php.net/downloads.php===========================================一:了解与准备1.1:Apache(httpd) nginx 与 php 连接方式:..._php编译后面--profile所对应的路径是
文章浏览阅读1.8w次,点赞8次,收藏35次。本地环回接口(或地址),亦称回送地址(loopback address)。此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。常见于如下用途:1 作为一台路由器的管理地址 系统管理员完成网络规划之后,为了方便管理,会为每一台路由器创建一个loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址,管理员会使用该地址对路由器远程登录(telnet ),_loopback是什么意思
文章浏览阅读233次。情感分析python 包https://www.jianshu.com/p/d50a14541d01英语:textBlob包中文:snownlp实战:IMDb电影评论https://baijiahao.baidu.com/s?id=1598913702189213115&wfr=spider&for=pc步骤:1、清洗文本数据:删除不需要的字符2、标记文档:分词、词..._自然语言处理情感分析matlab
文章浏览阅读611次。用户在执行延时语句dbms_lock.sleep(5); 时报PLS-00201: identifier 'SYS.DBMS_LOCK' must be declared错误。解决办法:请用GRANT EXECUTE..._dbms_clock must be declare
文章浏览阅读415次,点赞4次,收藏3次。20、【多选题】熄火保护装置,燃烧器设有火焰监测器,随时监测炉膛内()是否成功.火焰监测器一般在5秒钟内(点火)及1秒钟内(运行时)关闭进油进气电磁阀并通过电铃声发出声、光报警信号,这时风机继续运转()炉膛内残留可燃气体.通风时间对于锅炉至少应持续()秒钟。54、【单选题】利·安全生产 模拟 考试一点通·用微压气动控制技术,用于保持物料容器顶部保护气(氮气)的微压力恒定,避免容器内物料与空气直接接触,阻止物料的挥发、被氧化,同时保护容器的安全,这种装置称:()。
文章浏览阅读532次。一:MTK 平台查看eMMC和DDR的工作频率eMMC:adb shell cat /sys/kernel/debug/mmc0/clockDDR:adb shell cat /sys/bus/platform/drivers/emi_clk_test/read_dram_data_rate1. 获取 flash id:cat /sys/bl..._mtk emi
文章浏览阅读900次,点赞26次,收藏20次。知识付费甚欢喜,为咱码农谋福利。简洁清新时尚大学生恋爱心理健康教育ppt模板。简洁时尚大气卡通教育教学课件培训ppt模板。简洁清新时尚房地产计划运营培训ppt模板。简洁时尚大气金融网络面试介绍ppt模板。简洁时尚大气教育培训说课通用ppt模板。简洁时尚清新物流转正述职报告ppt模板。简洁时尚清新工业地产招商项目ppt模板。简洁时尚清新保险公司团建活动ppt模板。简洁时尚大气银行员工述职报告ppt模板。简洁时尚大气银行营销产品介绍ppt模板。简洁时尚清新教育信息技术说课ppt模板。
文章浏览阅读1.6k次。查看HAL版本_stm32 hal 查看版本
文章浏览阅读3.8k次,点赞2次,收藏6次。java基于openCv图像处理本文使用javaCV封装后的OpenCv<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.5.5</version></dependency>1、图片读取、保存在openCv中有一函数用于读取图片 imr_javacv 读取图片