树莓派3 Android Pie 编译适配

article/2025/6/29 2:34:36

树莓派3 Android Pie 编译适配

  • 1准备工作
  • 2.下载源代码以及配置依赖项
    • 2.1 配置Git与Repo
    • 2.2 下载源代码
    • 2.3 配置依赖项
  • 3. 编译
    • 3.1 编译内核
    • 3.2 打补丁
    • 3.3 编译
  • 4 制作启动盘
    • 4.1 tf卡分区
    • 4.2 各分区格式化
    • 4.3 写入系统镜像
    • 4.4 写入boot
  • 5 开机上电
    • 5.1 安装adb工具
  • 完结

1准备工作

Raspberry 3(老版本),github上反馈,3B+版本会黑屏。
宿主机,ubuntu16.04LST
本文参考github大神peyo-hd的wiki,祭出链接 android-rpi,大家可以自行查阅。

2.下载源代码以及配置依赖项

2.1 配置Git与Repo

2.2 下载源代码

 $ repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r45$ git clone https://github.com/android-rpi/local_manifests .repo/local_manifests -b pie$ repo sync

由于不可描述的原因,repo sync的速度会特别缓慢。对于android原生代码ASOP的下载,可以通过更改中科大镜像源的方法提速。对于github中kernel/rpi下载速度缓慢甚至超时中断,需要更改ssh配置,甚至挂小飞机(亲测挂小飞机也没有改观)。百度有大佬用gitee作中继,但亲测未成功,具体需要自行摸索。

2.3 配置依赖项

参考TPrime.A在Ubuntu下配置的依赖项,并做了一点修改。

$ sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev
$ sudo apt-get install libx11-dev libreadline6-dev libgl1-mesa-dev g++-multilib 
$ sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev
$ sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
$ sudo apt-get install git-core gnupg flex bison gperf build-essential  
$ sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
$ sudo apt-get install libc6-dev
$ sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
$ sudo apt-get install lib32z-dev ccache
$ sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
$ sudo apt-get install python-mako

重点:JDK配置,由于JDK闭源,下载需要官网注册,十分繁琐。google官网给出的教程推荐使用openJDK,使用apt 安装即可,安装完成后配置环境变量。

3. 编译

3.1 编译内核

安装交叉编译工具,否则报找不到arm-linux-gnueabihf-gcc错。

$ sudo apt-get install gcc-arm-linux-gnueabihf

拼接config,此步骤依赖bision。若执行不成功,apt安装bision即可。

 $ cd kernel/rpi$ ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig kernel/configs/android-base.config kernel/configs/android-recommended.config

编译zImage

 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage

出现以下结果,编译成功。
zImage 编译成功
编译设备树

 $ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs

3.2 打补丁

补丁链接:https://github.com/android-rpi/device_brcm_rpi3/wiki/Pie-:-patch-framework-source
然而链接所示的patch不是标准格式,并且行号与现在的代码已经不对应,保存patch文件用patch命令运行报错,说我patch输入里面只有辣鸡…人工大法好,直接cd到源文件改,保存。
patch格式错误

3.3 编译

终于到了激动人心的编译环节了。
首先加载编译工具,配置编译选项。此处依赖JDK,若JDK版本未满足要求,会报错,按要求更改JDK版本即可。

 $ source build/envsetup.sh$ lunch rpi3-eng

成功
编译系统镜像,此处可以根据个人电脑配置,选择合适的编译线程。默认-j4,适用于双核四线程。若八核十六线程的专业编译服务器,可选择-j16。

make ramdisk systemimage

等待编译中。。。
+++++++++++++++++更新分界线20191104++++++
编译一定要记得给磁盘预留足够空间,建议100GB,编译完成后会在out文件夹下看到.img的镜像文件。编译成功。

4 制作启动盘

4.1 tf卡分区

使用fdisk分区工具,首先插入tf卡,运行查询命令

sudo fdisk -l

查询到tf卡设备号:/dev/sdd
在这里插入图片描述
运行fdisk命令,格式化各分区。

  1. 首先d命令删除所有分区,n命令新建分区256M,t命令更改分区类型 W95 FAT32(LBA) ,a设置成bootable。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. n命令新建第二个分区
    在这里插入图片描述
  3. n命令新建第三个分区,w命令保存
    在这里插入图片描述

4.2 各分区格式化

此处建议把sd卡弹出,再重新插入一次。否侧格式化容易不成功。

sudo mkfs.vfat -n boot /dev/sdd1
sudo mkfs.ext4 -L userdata /dev/sdd3

4.3 写入系统镜像

这里注意要改自己的第二个分区名。(用作/system)

  $ cd out/target/product/rpi3$ sudo dd if=system.img of=/dev/sdd2 bs=1M

在这里插入图片描述

4.4 写入boot

挂载boot分区:

sudo mkdir /media/test
sudo mount -t fat /dev/sdd1 /media/test

复制boot分区文件

  sudo cp device/brcm/rpi3/boot/*  /media/test/sudo cp kernel/rpi/arch/arm/boot/zImage  /media/test/sudo cp kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb  /media/test/sudo mkdir /media/test/overlayssudo cp kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo  /media/test/overlays/vc4-kms-v3d.dtbosudo cp out/target/product/rpi3/ramdisk.img /media/test/

5 开机上电

见证奇迹的时刻
启动中
屏幕logo出现,然鹅…
启动完成
折腾了这么几天,你就给我看这个????应用只有system tracing和settings???编译路径下安装的那么多应用嘞???鼠标箭头虚影,键盘无响应

5.1 安装adb工具

自行安装adb工具,完成后,发现USB方式并不能连接上。那就网络连接也很香

adb connect xxx.xxx.xxx.xxx(ip address)
adb shell

在这里插入图片描述
查看了一下log,并没有什么组件启动失败,那可能这个系统就是啥都没有,面向命令行吧。

完结


http://chatgpt.dhexx.cn/article/glCW6Hvu.shtml

相关文章

树莓派吃派(android Pie)指南

树莓派吃派(android Pie)指南 前言一、效果预览二、配件清单三、安装步骤1.下载系统镜像2.系统烧录2.1 使用Win32 Disk Image烧录2.2 使用Balena Etcher烧录2.3 烧录注意点 3 屏幕驱动配置 四、开机五、其他注意事项总结 前言 你的下一台android pad何必…

洛谷试炼场-P1001-A+B Problem 题解

洛谷试炼场-P1001-AB Problem 题解【c】 题目描述 输入两个整数a,b&#xff0c;输出它们的和(|a|,|b|<10^9)。 注意 pascal使用integer会爆掉哦&#xff01; 有负数哦&#xff01; c/c的main函数必须是int类型&#xff0c;而且最后要return 0。这不仅对洛谷其他题目有效&…

个人纪录——洛谷试炼场,简单模拟三排!【普及练习场】

首先自然是洛谷链接~ 度过了新手村的BOSS战后&#xff0c;在普及练习场的第一个简单模拟里也遇到不少坑&#xff0c;记录一下以免以后再犯。 P1003 铺地毯 实现代码 #include <iostream> #include <math.h> #include <stdio.h> #include<iomanip> u…

洛谷试炼场---提高历练地

洛谷试炼场---提高历练地 搜索Ex 1.NOIP 2004 提高组 复赛 alpha 虫食算 //P1092 虫食算 //读完题目&#xff0c;第一直觉&#xff0c;要用高精度算法。 //N进制&#xff0c;该题处理&#xff0c;对理解进制很有帮助。 //为何要从高位往低位搜索&#xff0c;这篇文章写得不错…

洛谷试炼场---普及练习场

洛谷试炼场---普及练习场 简单的模拟 1.p1003 铺地毯 NOIP2011 提高组 复赛 day1 carpet 铺地毯 1.读完题目&#xff0c;对样例1进行模拟&#xff0c;进一步明白题目意图。 2.地毯数据采用结构体数组&#xff0c;处理起来比较方便。 3.查询点上地毯&#xff0c;采用自上而下…

洛谷试炼场 普及组 动态规划的背包问题

相关视频&#xff1a;洛谷试炼场 普及组 动态规划的背包问题 P1048 [NOIP2005 普及组] 采药 T就是背包的体积&#xff0c;M就是物品的数量&#xff0c;c[i]就是物品的体积&#xff0c;v[i] 就是物品的价值。 AC代码 #include<bits/stdc.h> using namespace std; int T,…

【OJ】洛谷试炼场の新手村整合(Java语言描述)

Pass 最近通关了洛谷试炼场新手村Part&#xff0c;做了很多的红题和橙题&#xff0c;这里做一下整理吧&#xff0c;希望对需要的人有所帮助。 说明 这些内容确实不是什么复杂的东西&#xff0c;所以无需多言。 洛谷的第一个任务 这里是我写的所有题解&#xff08;Java&…

洛谷试炼场---新手村

洛谷试炼场---新手村 在线测评地址https://www.luogu.com.cn/training/mainpage 洛谷的第一个任务 1.p1001 AB Problem 难度&#xff1a;入门难度 考点&#xff1a;输入&#xff0c;输出 ,整数四则运算 适用&#xff1a;小学生 #include <stdio.h> int main(){int …

洛谷试练场入门之“洛谷的第一个任务”讲解

话说&#xff0c;其实我主要在洛谷上做题 www.luogu.org 有些萌新若想在洛谷提升自己的实力&#xff0c;先看试炼场 因为吧&#xff0c;我个人觉得试炼场是适合一点一点来 那么这是试炼场的截图 分五个阶段&#xff1a; 1.入门 2.普及 3.提高 4.省选 5.USACO 以我的实力&#…

6.20 C语言练习(找出1至99之间的全部同构数。同构数是这样的一组数:它出现在平方数的右边。)

【练习】 题目要求&#xff1a;试编程序&#xff0c;找出1至99之间的全部同构数。同构数是这样的一组数:它出现在平方数的右边。如5是25右边的数&#xff0c;25是625右边的数&#xff0c;5和25均是同构数。例如&#xff1a;输出&#xff1a;1 5 6 25 76#include <stdio.h&g…

Python识别同构数

题目描述&#xff1a; 1.程序功能&#xff1a; 随机输入若干个不超过2位的正整数&#xff08;输入-1表示输入结束&#xff09;&#xff0c;找出其中所有同构数并排序输出。&#xff08;正整数n若是它平方数的尾部&#xff0c;则称n为同构数。如5的平方数是25&#xff0c;且5是…

c语言输入一个数判断是否是同构数,c语言:编写函数判断x是否同构数

c语言:编写函数判断x是否同构数 mip版 关注:271 答案:4 悬赏:30 解决时间 2021-01-19 03:42 已解决 2021-01-18 15:16 例如5是同构数,因为5是25右边的数,在主函数中调用该函数打印输出1到100间的同构数 下面是我编的程序,结果应该是1,5,6,25,76,可是却多了几个不对…

同构数-c语言入门(5)

找出2~999之间所有的的同构数 首先解释一下同构数&#xff0c;同构数是指自己本身与自己的平方右侧的数一样。例如6的平方36&#xff0c;6和36的最右侧一位6一样&#xff0c;所以6是同构数&#xff1b;再例如25的平方625&#xff0c;25与625的右侧25一样&#xff0c;所以25也是…

C++同构数计算

题目: 编写程序&#xff0c;找出1-99之间的全部同构数。同构数是这样一组数&#xff1a;它出现在平方数的右边。例如&#xff1a;5是25的右边的数&#xff0c;25是625右边的数&#xff0c;5和25都是同构数。 题目分析: 题目要找出1-99之间的全部同构数&#xff0c;首先要想到的…

同构数(c语言)

【问题描述】 具有下面性质的数a称为"同构数"&#xff1a;设b是a的平方&#xff0c;a与b的低若干位相同。 例如&#xff0c;5是25的同构数&#xff0c;25是625的同构数编程序满足如下要求&#xff1a;输入两个整数a&#xff0c;b&#xff08;0<a&#xff0c;b<…

python求同构数

找出1与100之间的全部“同构数”。“同构数”是这样一个数&#xff0c;它出现在它的平方数的右端。例如&#xff0c;5的平方是25&#xff0c;5是25右端的数&#xff0c;5就是同构数&#xff0c;25也是一个同构数&#xff0c;它的平方是625。 代码如下&#xff1a; for i in ran…

C语言 同构数的算法

“同构数”是指这样的整数&#xff1a;它恰好出现在其平方数的右端。 如&#xff1a;376*376141376。请输出10000以内的全部“同构数”。 算法分析&#xff1a; 1.求出1-10000之间每个数的位数&#xff08;即这个数是几位数&#xff09;。设这个数是i. //用for循环实现&#x…

第三方token过期监控及刷新机制

背景 信息系统随着业务发展的多样化及场景的拓展&#xff0c;需要接入越来越多的第三方系统&#xff0c;部分收费的第三方服务都会按照合同约定给用户提供对应的应用授权账户&#xff0c;授权账户包含并不仅限于账号/密码/AppKey/AppSecret/MerchantId&#xff0c;但是从系统安…

vue token过期后自动刷新token

在系统登录后&#xff0c;后端返回一个token&#xff0c;和refreshToken。每次接口请求的时候都会携带这个token&#xff0c;但是这个token一般是有过期时间的&#xff0c;假设过期时间为半小时&#xff0c;你半小时内没有调接口。半小时后你再调接口&#xff0c;会报401错误&a…

JAVA开发(token过期续期)

一、需求背景&#xff1a; 在使用token进行登录的过程中&#xff0c;如果token过期了&#xff0c;需要重新输入用户名和密码登录&#xff0c;这种体验肯定是不好的&#xff0c;因为如果一直在使用系统&#xff0c;系统应该一直能够保持登录状态&#xff0c;而不是用着用着就突然…