admin管理员组

文章数量:1609936

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

#从0开始编译android类原生系统

写在文章开头的废话:



为什么我要写这篇文章给自己留下笔记,给大家一起进步。

为什么原生安卓?原生,即是AOSP,是不包括厂商或运营商定制程序以及任何第三方修改的Android系统,主要由谷歌维护。所以说原生安卓会很干净。不会有系统应用偷偷联网,偷偷窃取用户信息。而且还少了很多应用,内存也大了起来。

为什么这么多的原生安卓系统,还有不同日期版本?在各类美化和修改团队下,产生了各种类型的系统,例如著名的CM(LineageOS),Crdroid,havoc,dotos.他们都是为了原生更加好看,好用而存在的。每个月,因为谷歌都会定期给AOSP进行安全更新,所以原生系统会很安全。

我应该选择哪一个?你应该跟上你所选的系统,跟上自己喜欢的开发者脚步,刷上最新的系统。

环境准备在 Ubuntu 18.04 下编译 LineageOS/CM 等 AOSP

源码可能会踩到很多坑。下面就跟我一起来配置避免入坑吧。

Ubuntu 18.04 LTS 请选择 64 位的。

硬件最低要求:HDD: HDD 100GB 及以上剩余存储空间(最好用固态硬盘)。

CPU 性能差点没事,只不过是浪费时间与电费而已。(本人是AMD Ryzen 2500u)

安卓源码所在目录最低剩余空间不要小于 150GB。

本人建议:

胆子大去学校机房编译,系统十分钟就出来了2333安装依赖组件(编译需要用到的东西,复制就完事了) sudo apt install -y bc bison build-essential curl flex gcc-multilib git gnupg gperf g++-multilib libgl1-mesa-dev liblz4-tool libncurses-dev libreadline-dev libesd0-dev sudo apt install libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils libx11-dev lib32ncurses5-dev lib32z1-dev lzop pngcrush schedtool squashfs-tools sudo apt install unzip xsltproc zip zlib1g-dev sudo apt install python git如果显示libxml2-utils_2.9.4-1+deb.sury~xenial+2_amd64.deb 找不到,无法直接安装。解决方法

直接google搜索 libxml2-utils_2.9.4-1+deb.sury~xenial+2_amd64.deb,下载对应的deb文件。安装 JDK sudo apt install -y openjdk-8-jdk

设置repo工具(如果这里不行,其实清华,中科大的源也是可以的。)

参考教程:谷歌下载源代码教程,中科大aosp下载教程将 https://mirrors.tuna.tsinghua.edu/git/git-repo 替换为 git://mirrors.ustc.edu/aosp/platform/manifest。就是中科大的源啦

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里: export REPO_URL='https://mirrors.tuna.tsinghua.edu/git/git-repo/

1

2

3

4

5

6

7`curl https://mirrors.tuna.tsinghua.edu/git/git-repo > ~/bin/repo`

`chmod a+x ~/bin/repo`

`echo "export PATH=~/bin:$PATH" >> ~/.bashrc`

`source ~/.bashrc`设置git身份,添加自己的邮箱和姓名: git config --global user.email "[email protected]" git config --global user.name "piratemorgen"

初始化repo客户端:新建目录(别起太长或中文,你会后悔的) mkdir -p ~/dotos cd ~/dotos当然,他是一个莫滴感情的工具,我们这里将下载aosp编译dotos系统,所以命名dotos初始化仓库(直接在github下载也行,放进dotos在运行以下命令)manifest.zip repo init -u git://github/DotOS/manifest.git -b dot-p你要做LineageOS16,或者下载完整的AOSP,可以根据主页的设置repo init(中科大源,当前版本为r45) repo init -u git://mirrors.ustc.edu/aosp/platform/manifest -b android-9.0.0_r45如果提示无法连接到 gerrit.googlesource,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的: REPO_URL = 'https://gerrit-googlesource.proxy.ustclug/git-repo替换已有的AOSP源代码的remote

如果你之前已经通过某种途径获得了AOSP的源码,但是你希望以后通过中科大同步,只需要将.repo/manifest.xml(隐藏文件夹)中的

fetch=".."

review="https://android-review.googlesource/" /> 改为下面的code即可:

fetch="git://mirrors.ustc.edu/aosp/"

review="https://android-review.googlesource/" />下载AOSP仓库 repo sync -c -jx --force-sync --no-clone-bundle --no-tags-jx指的是你的下载线程,太多会卡,太少会慢

源码下载完成后,看到下面的信息可以说明下载成功。整个源码的大小为45g构建手机内核(这里以小米9se为例)重要:内核开发者工作手机内核有新有旧,当然,这里为了方便开发者,我决定挑选小米初始的内核,并且自己重做(重新打caf等操作)

手机内核是决定硬件是否能正常工作的部分,很重要。

要在内核上工作的内容差不多,就是打commit,保持上游更新,如果你需要做成offical,不能乱来,请看教程打上游

Git是一个 “分布式版本管理工具”,我们这里需要学习git工具的知识:git-tips

打开终端,我喜欢在主页面下载内核/home/gah0,所以,你也可以选择你喜欢的位置克隆

1`git clone -b grus-p-oss --single-branch [email protected]:Gah0/android_xiaomi_kernel_grus.git`

克隆后,进入内核文件夹内,在本地新建一个分支,自己重做内核

1

2

3`cd android_xiaomi_kernel_grus`

`git checkout -b lineage-16.0`

成功的消息是:切换到一个新分支 ‘lineage-16.0’注意:通常,我们得到的内核可能是不完整的,厂商只是遵循gpl-2.0规定释放内核快照(遵守规则),例如wifi驱动,指纹驱动,这些是其他厂商工作(手机厂商是没有义务公布出来的)。通常不会集成在内核里面,编译的时候会有各种报错。所以这个时候我们就要自己整合到内核里面…

看清楚自己手机设备是使用什么平台的处理器,例如我的小米9se为高通712,就需要获取qcacld-3.0的驱动,那么就在源码branch或tag页面使用

1

2

3`git fetch https://source.codeaurora/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/ LA.UM.7.8.r1-06500-SDM710.0`

`git merge FETCH_HEAD`

如何查看当前最新CAF驱动,内核标签?请点击在这里

LA.UM.7.8.r1-06500-SDM710.0在2019.08.07为当前日期最新android P标签当你像我一样完成了合并驱动和内核标签之后..

此时内核或者驱动会有一点小小的编译错误,在编译期间会停下来报错,需要自行修复。

这次我捕捉到多个错误,就像这样,漏个某个function漏了个bool类型,枚举类型没有使用这样的错误

后续还会有更多错误,请自检查并修复,用clang编译器编译内核可以参考这里修复如何写device tree

这里分为两个部分,一个是重写device tree,一个是偷窃device tree开源成果如果手机比较新,通常就是没有device tree,需要自己补上

首先先建立一个device tree骨架,填上相应的手机硬件信息,需要自己从手机获取。Android.mk这个makefile存在于很多文件夹中。目的是在用户调用正确的build命令时,building脚本可以正确检测到device-treeBoardConfig.mk这个makefile是最重要的文件之一,包含了board的定义(分区大小,include路径、overlay路径、CPU、Soc等等)Lineage.mk这个文件是首先被building脚本读取的,仅包含了产品名称、代号、制造商还有是平板还是手机,并且link device.mkdevice.mk这个文件包含了所有的需要使用或者需要复制的包、应用、权限和库,也包含了设备编译apps的时候需要的大小(例:xhdpi)extract-files.sh+setup-makefiles.sh这些shell脚本被调用来创建vendor(通过ADB从proprietary-files.txt拉取需要的文件到vendor文件夹)proprietary-files.txt这个文本文件一行一个文件,决定了AOSP需要的来自原生固件的文件(audio库、图形库(例如OpenGL、MALI驱动等),等等)system.prop这个文件包含了一些需要被复制到build.prop的属性,包含了一些设置,比如RIL类、库、支持,要使用的WLAN接口,显示大小等等偷窃开源成果手机比较老,那么通常就会有开发者写出device tree或device tree common

正常情况下,如果获取到device tree,可是要编译与开发者不同的第三方系统,需要修改很多地方。

例如在device tree文件夹下的某.mk文件,以达到编译期间能正常链接该文件进行编译 PRODUCT_MAKEFILES := $(LOCAL_DIR)/mk_libra.mk

1

2`PRODUCT_MAKEFILES :=

#从0开始编译android类原生系统

写在文章开头的废话:



为什么我要写这篇文章

给自己留下笔记,给大家一起进步。

为什么原生安卓?

原生,即是AOSP,是不包括厂商或运营商定制程序以及任何第三方修改的Android系统,主要由谷歌维护。所以说原生安卓会很干净。不会有系统应用偷偷联网,偷偷窃取用户信息。而且还少了很多应用,内存也大了起来。

为什么这么多的原生安卓系统,还有不同日期版本?

在各类美化和修改团队下,产生了各种类型的系统,例如著名的CM(LineageOS),Crdroid,havoc,dotos.他们都是为了原生更加好看,好用而存在的。每个月,因为谷歌都会定期给AOSP进行安全更新,所以原生系统会很安全。

我应该选择哪一个?

你应该跟上你所选的系统,跟上自己喜欢的开发者脚步,刷上最新的系统。

环境准备

在 Ubuntu 18.04 下编译 LineageOS/CM 等 AOSP

源码可能会踩到很多坑。下面就跟我一起来配置避免入坑吧。

Ubuntu 18.04 LTS 请选择 64 位的。

硬件最低要求:

HDD: HDD 100GB 及以上剩余存储空间(最好用固态硬盘)。

CPU 性能差点没事,只不过是浪费时间与电费而已。(本人是AMD Ryzen 2500u)

安卓源码所在目录最低剩余空间不要小于 150GB。

本人建议:

胆子大去学校机房编译,系统十分钟就出来了2333

安装依赖组件(编译需要用到的东西,复制就完事了)

sudo apt install -y bc bison build-essential curl flex gcc-multilib git gnupg gperf g++-multilib libgl1-mesa-dev liblz4-tool libncurses-dev libreadline-dev libesd0-dev

sudo apt install libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils libx11-dev lib32ncurses5-dev lib32z1-dev lzop pngcrush schedtool squashfs-tools

sudo apt install unzip xsltproc zip zlib1g-dev

sudo apt install python git

如果显示libxml2-utils_2.9.4-1+deb.sury~xenial+2_amd64.deb 找不到,无法直接安装。解决方法

直接google搜索 libxml2-utils_2.9.4-1+deb.sury~xenial+2_amd64.deb,下载对应的deb文件。

安装 JDK

sudo apt install -y openjdk-8-jdk

设置repo工具(如果这里不行,其实清华,中科大的源也是可以的。)

参考教程:谷歌下载源代码教程,中科大aosp下载教程

将 https://mirrors.tuna.tsinghua.edu/git/git-repo 替换为 git://mirrors.ustc.edu/aosp/platform/manifest。就是中科大的源啦

repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里:

export REPO_URL='https://mirrors.tuna.tsinghua.edu/git/git-repo/

1

2

3

4

5

6

7`curl https://mirrors.tuna.tsinghua.edu/git/git-repo > ~/bin/repo`

`chmod a+x ~/bin/repo`

`echo "export PATH=~/bin:$PATH" >> ~/.bashrc`

`source ~/.bashrc`设置git身份,添加自己的邮箱和姓名: git config --global user.email "[email protected]" git config --global user.name "piratemorgen"

初始化repo客户端:新建目录(别起太长或中文,你会后悔的) mkdir -p ~/dotos cd ~/dotos当然,他是一个莫滴感情的工具,我们这里将下载aosp编译dotos系统,所以命名dotos初始化仓库(直接在github下载也行,放进dotos在运行以下命令)manifest.zip repo init -u git://github/DotOS/manifest.git -b dot-p你要做LineageOS16,或者下载完整的AOSP,可以根据主页的设置repo init(中科大源,当前版本为r45) repo init -u git://mirrors.ustc.edu/aosp/platform/manifest -b android-9.0.0_r45如果提示无法连接到 gerrit.googlesource,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的: REPO_URL = 'https://gerrit-googlesource.proxy.ustclug/git-repo替换已有的AOSP源代码的remote

如果你之前已经通过某种途径获得了AOSP的源码,但是你希望以后通过中科大同步,只需要将.repo/manifest.xml(隐藏文件夹)中的

fetch=".."

review="https://android-review.googlesource/" /> 改为下面的code即可:

fetch="git://mirrors.ustc.edu/aosp/"

review="https://android-review.googlesource/" />下载AOSP仓库 repo sync -c -jx --force-sync --no-clone-bundle --no-tags-jx指的是你的下载线程,太多会卡,太少会慢

源码下载完成后,看到下面的信息可以说明下载成功。整个源码的大小为45g构建手机内核(这里以小米9se为例)重要:内核开发者工作手机内核有新有旧,当然,这里为了方便开发者,我决定挑选小米初始的内核,并且自己重做(重新打caf等操作)

手机内核是决定硬件是否能正常工作的部分,很重要。

要在内核上工作的内容差不多,就是打commit,保持上游更新,如果你需要做成offical,不能乱来,请看教程打上游

Git是一个 “分布式版本管理工具”,我们这里需要学习git工具的知识:git-tips

打开终端,我喜欢在主页面下载内核/home/gah0,所以,你也可以选择你喜欢的位置克隆

1`git clone -b grus-p-oss --single-branch [email protected]:Gah0/android_xiaomi_kernel_grus.git`

克隆后,进入内核文件夹内,在本地新建一个分支,自己重做内核

1

2

3`cd android_xiaomi_kernel_grus`

`git checkout -b lineage-16.0`

成功的消息是:切换到一个新分支 ‘lineage-16.0’注意:通常,我们得到的内核可能是不完整的,厂商只是遵循gpl-2.0规定释放内核快照(遵守规则),例如wifi驱动,指纹驱动,这些是其他厂商工作(手机厂商是没有义务公布出来的)。通常不会集成在内核里面,编译的时候会有各种报错。所以这个时候我们就要自己整合到内核里面…

看清楚自己手机设备是使用什么平台的处理器,例如我的小米9se为高通712,就需要获取qcacld-3.0的驱动,那么就在源码branch或tag页面使用

1

2

3`git fetch https://source.codeaurora/quic/la/platform/vendor/qcom-opensource/wlan/qcacld-3.0/ LA.UM.7.8.r1-06500-SDM710.0`

`git merge FETCH_HEAD`

如何查看当前最新CAF驱动,内核标签?请点击在这里

LA.UM.7.8.r1-06500-SDM710.0在2019.08.07为当前日期最新android P标签当你像我一样完成了合并驱动和内核标签之后..

此时内核或者驱动会有一点小小的编译错误,在编译期间会停下来报错,需要自行修复。

这次我捕捉到多个错误,就像这样,漏个某个function漏了个bool类型,枚举类型没有使用这样的错误

后续还会有更多错误,请自检查并修复,用clang编译器编译内核可以参考这里修复如何写device tree

这里分为两个部分,一个是重写device tree,一个是偷窃device tree开源成果如果手机比较新,通常就是没有device tree,需要自己补上

首先先建立一个device tree骨架,填上相应的手机硬件信息,需要自己从手机获取。Android.mk这个makefile存在于很多文件夹中。目的是在用户调用正确的build命令时,building脚本可以正确检测到device-treeBoardConfig.mk这个makefile是最重要的文件之一,包含了board的定义(分区大小,include路径、overlay路径、CPU、Soc等等)Lineage.mk这个文件是首先被building脚本读取的,仅包含了产品名称、代号、制造商还有是平板还是手机,并且link device.mkdevice.mk这个文件包含了所有的需要使用或者需要复制的包、应用、权限和库,也包含了设备编译apps的时候需要的大小(例:xhdpi)extract-files.sh+setup-makefiles.sh这些shell脚本被调用来创建vendor(通过ADB从proprietary-files.txt拉取需要的文件到vendor文件夹)proprietary-files.txt这个文本文件一行一个文件,决定了AOSP需要的来自原生固件的文件(audio库、图形库(例如OpenGL、MALI驱动等),等等)system.prop这个文件包含了一些需要被复制到build.prop的属性,包含了一些设置,比如RIL类、库、支持,要使用的WLAN接口,显示大小等等偷窃开源成果手机比较老,那么通常就会有开发者写出device tree或device tree common

正常情况下,如果获取到device tree,可是要编译与开发者不同的第三方系统,需要修改很多地方。

例如在device tree文件夹下的某.mk文件,以达到编译期间能正常链接该文件进行编译 PRODUCT_MAKEFILES := $(LOCAL_DIR)/mk_libra.mk

`$(LOCAL_DIR)/lineage_libra.mk`

又例如在AndroidManifest.xml,设置控件 package="org.mokee.settings.device" 改为: package="org.lineageos.settings.device"

最好能获取device tree common自己修改。

通常可以通过别人的源,采摘樱桃

部分开发者通过修改device tree以保证系统完善

例如让第三方系统支持微信,支付宝指纹支付。

当然,我也在研究中,改天再写

修成正果:编译成功!

但是却无法开机

需要在手机中提早加载adb,以方便卡米时logcat。卡米就是小米手机卡在启动动画

很多时候卡米,无法debug,可能framework问题,也可能是源码问题,建议和开发者多交流。

本文标签: 组件系统android