原文:https://blog.csdn.net/panbiao1999/article/details/77520127

前言:树莓派3安卓原生系统的移植主要分成两大步骤:1、Linux和安卓镜像文件的编译;2、就是镜像文件的烧写。由于之前已经编译好了Linux和安卓镜像文件了(资源包附在文章最后百度网盘链接),所以这里就先从怎么烧写系统开始讲起。第二部分再介绍如何去编译Linux内核和安卓镜像。

一、系统镜像文件的烧写

在烧写镜像之前我们首先要对用作树莓派的系统卡进行分区和格式化处理。Linux环境下,可以用fdisk工具进行分区和格式化处理。但是这里为了方便一点我推荐用一款图形化工具软件Gparted(Windows下应该也有该软件)。

首先使用sudo apt-get install gparted下载安装该软件。安装完成后,在任意终端运行命令gparted启动该软件。大概的界面应该是这样的:

做系统大概有这么几个步骤:

1.1、我们要将树莓派的系统卡按照图1分成四个区,分别为boot、system、cache、data。

1.2、将卡分区好后,需要将本文档路径下的android文件夹下system.img这个文件写入到第二个(system)分区里面。具体操作为:在Linux环境下运行命令dd if=system.img of=/dev/ bs=1M;简单的解释一下这条命令:dd就是写盘的工具命令,if后面的就是输入文件(input file),of就是输出文件,/dev/同理可知就是文件输出的路径啦,如果你不确定你要写的分区叫什么名字,那么你可以用fdisk -l的命令来看一下。

1.3、文件写成功后,然后再将本文档路径下的android文件夹下除system.img外的所有文件都复制到第一个(boot)分区(注意这里是复制而不是dd。具体方法你可以将第一个分区挂载到Linux系统的某个文件下再进行操作)

完成了以上三个步骤后,将做好的sd卡插到树莓派3,上电后就启动成功了。

1.4、adb连接测试

系统启动后跟我想象的不一样,没有熟悉的图像界面,但是能确认它已经跑起来了。我们用adb调试工具来连接测试一下。插上网线,获取到树莓派的ip在Linux下执行adb connect 就可以与树莓派连接上了。再执行adb devices就可以看到当前连接的设备。执行adb shell就可进入安卓的文件系统了。

关于adb调试工具的使用可以参考:https://developer.android.google.cn/studio/command-line/adb.html

二、Linux内核和安卓镜像的编译

1、编译环境要求:

硬件配置:硬盘容量至少100G;内存8G;cpu:8核心

系统环境:Ubuntu16;需要提前安装git、repo、openjdk-8-jdk等工具

2、下载Linux内核源码和安卓源码

2.1:更换安卓源码源。运行vim /usr/bin/repo找到REPO_URL并替换成REPO_URL = ‘https://gerrit-google.tuna.tsinghua.edu.cn/git-repo‘保存

2.2:在Linux的/根目录下建立工作目录Android,在建立好的工作目录文件夹下运行repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.2_r4初始化我们的工作目录,标黄的就是我们要编译的安卓版本号,我们可以根据需要选定特定的版本。

2.3:

git clone https://github.com/android-rpi/local_manifests .repo/local_manifests

2.4:执行repo sync,下载源码文件。具体下载时间看网速,最终下载完成估计有30~40G的文件。

以上过程中,如果出现错误,一般会有提示信息,按照提示一般就可以解决。

3、编译linux内核

3.1:配置交叉编译环境。在raspberrypi的github官方主页的tools仓库有交叉编译环境,地址如下 https://github.com/raspberrypi/tools/tree/master/arm-bcm2708

可以看到上图在arm-bcm2708下面有5个文件夹分别放着不同的平台编译环境下的交叉编译工具链。其中gcc-linaro-arm-linux-gnueabihf-raspbian文件夹是32位的操作系统的工具链,gcc-linaro-arm-linux-gnueabihf-raspbian-x64文件夹是64位操作系统的工具链。

我们先将这个文件夹下载下来放在Linux根目录下的/opt文件夹下面(当然也可以放在别的地方,不管习惯上一般会放在这里)。接下来就是配置交叉编译环境了,执行命令:Vim /etc/profile打开该文件,在最底部追加:

export PATH=”$PATH:/opt/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin”

注意红色字体的地方,刚才我们说了,这个是64位操作系统的交叉编译工具链的路径。如果你的平台是32位的操作系统,那么你要选择的是gcc-linaro-arm-linux-gnueabihf-raspbian这个文件夹。否则到时候编译内核源码时会出错。

修改完成后在终端上运行source /etc/profile使其生效。接下来就可以编译内核了。

3.2:编译Linux内核镜像。依次执行下列命令:
  • 1
  • 2

$ ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg

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

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

稍微解释一下这几条命令的意思:1.进入内核源码的目录;2.执行脚本自动生成.config文件;3.编译内核镜像;4.生成树莓派的设备树文件。

这里有个坑!!!提示一下,在3.编译内核镜像时。由于当前的编译器不支持-fstack-protector这个编译选项,所以这里需要修改一下Makefile文件。进入Linux内核源码顶层目录(kernel/rpi)vim打开Makefile文件找到667和674行将ifdef CONFIG_CC_STACKPROTECTOR_REGULAR改成ifndef CONFIG_CC_STACKPROTECTOR_REGULAR保存退出,再make。

编译完Linux内核镜像之后就可以编译安卓镜像了。

4、编译安卓镜像。进入安卓工作目录的顶层,执行

lunch rpi3-eng //也可以直接执行lunch不带参数,那样会弹出所有的target供选择

$ make -j4

如果顺利的话,几个钟头的时间你就会看到诸如下面的画面,安卓镜像就编译成功了。那么第一部分的系统镜像文件的烧写所需要的文件都在哪里呢?分别如下:

device/brcm/rpi3/boot/*下的所有文件:bootcode.bin,cmdline.txt,config.txt,fixup.dat,start.elf

kernel/rpi/arch/arm/boot/zImage

kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb

kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo

out/target/product/rpi3/ramdisk.img

out/target/product/rpi3/system.img

5、已知的错误

编译的时候可能会有如下错误,下面就列举一下,以提供参考。

错误1:提示/android/prebuilts/misc/linux-x86/bison/bison没有该文件

原因:这是因为在64位的操作系统中编译,而下载的源码文件是32位系统的文件,所以造成文件不可用。

解决方法:

1、单独make目标bison,make成功后,在android/out/host/linux-x86/bin下找到bison文件并将改文件复制到/android/prebuilts/misc/linux-x86/bison/

2、然后再将android/out/host/linux-x86/bin下的文件libc++.so复制到当前系统/usr/lib下,再在终端执行ldconfig;

3、apt-get install m4

4、make clean后再重新make

错误2:提示Try increasing heap size with Java option ‘-Xmx’

解决方法:

1、停止Server:jack-admin stop-server。

2、添加-Xmx4096m或者-Xmx4g.打开prebuilts/sdk/tools/jack-admin文件,修改29行 JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMEN

TS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation}”,

改为JACK_SERVER_VM_ARGUMENTS=”-Xmx2g

-Dfile.encoding=UTF-8 -XX:+TieredCompilation”。

注意:这里不再使用${parameter:=default}的语法,直接给JACK_SERVER_VM_ARGUMENTS赋值。

3、重新编译。

错误3:Communication error with Jack server

解决方法:执行jack-admin start-server

TIPS:

1、如果遇到错误没有提示,没有解决方案时,你不妨提高一下你的虚拟机的性能。例如CPU、内存、硬盘容量等。

2、在编译安卓的内核文件之前最后先配置一下这个文件。在目录/android/device/brcm/rpi3/BoardConfig.mk文件中的尾部追加

ANDROID_JACK_VM_ARGS := -Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m; 表示设置jack的缓存空间为4096m

NINJA := false; 表示不是用NINJA工具链编译

3、如果烧完系统后屏幕显示不对,可以参考一下这个链接修改一下有关显示部分的代码。

https://github.com/android-rpi/device_brcm_rpi3/wiki#use-hal_pixel_format_bgra_8888

4、参考链接:

http://www.elicec.com/2017/01/raspberry_pi2_port_android/

https://github.com/android-rpi/device_brcm_rpi3

http://blog.csdn.net/u013553529/article/details/54869266

https://source.android.com/source/

https://source.android.com/source/building

http://pan.baidu.com/s/1i5ig6zFhttp://pan.baidu.com/s/1i5ig6zF(Android资源包)

添加遇到的问题:

1) 报:from mako.template import Template
ImportError: No module named mako.template

解决:用apt-get install python-mako命令安装mako模块,问题解决

转载请注明:CodingBlog » 树莓派3移植安卓系统指导

移植安卓系统到树莓派开发板相关推荐

  1. 安卓系统主板手机开发板,MTK 5G 通讯模块主板芯片全解

    手机芯片通常是指应用于手机通讯功能的芯片,包括基带.处理器.协处理器.RF.触摸屏控制器芯片.Memory.处理器.无线 IC 和电源管理 IC 等.手机存储芯片是安装在主板上的,与电脑不同,RAM ...

  2. 移植安装ModBus到ARM开发板

    1.libmodbus官网 2.下载 二.交叉编译 1.解压 2.创建安装目录 3.进入解压的目录 4.配置编译选项 5.编译 6.安装 7.生成动态链接库 三.移植到ARM开发板 1.复制文件到AR ...

  3. QT开发环境的建立以及qte4.6.3、tislib1.4移植到博创star2410开发板

    1.首先是建立Linux开发环境 1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-22 ...

  4. 移植QT5.9到嵌入式开发板(详细)

    移植QT5.9到嵌入式开发板 1.硬件平台 2.软件平台介绍 Linux操作系统 移植的要求 3.源码下载与编译 交叉编译器 4.系统烧录 制作SD卡烧录 命令行烧录 Nandflash启动OK335 ...

  5. opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译

    opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译 原文我是用有道笔记记录的,下面排版不是很好,可参看有道笔记原文:h ...

  6. 三星官方smdkv210 uboot移植到我的s5pv210开发板

    北京 2020-7-26 19:44 周日 昨天外面闷热 今日凉快.空调一开啥事没有!O(∩_∩)O 用了差不多两个周末蹲家里移植的.进度比较慢,算是把uboot相关的一些东西基本了解了. uboot ...

  7. Android11系统丨RK3568开发板运行第一个Android程序

    基于迅为RK3568开发板 1.在模拟器上运行 (1)打开上次创建的 MyApplication 工程,点击 file->project structure ,如图所示,选中默认的 NDK, 然 ...

  8. android打印doc文件,安卓系统APP打印开发实例.doc

    S&PS Solution Tips PAGE 5 | Page 主题 安卓系统APP打印开发实例 适用范围 带网口Honeywell系列 intermec系列 解决方案 当你想要在安卓DPA ...

  9. LVGL的PC端移植和STM32F429阿波罗开发板移植

    LVGL 8.1_学习总结 LVGL介绍 LVGL开发环境 LVGL的GitHub的代码介绍 LVGL8.1 在F429上面的移植 准备 修改lv_port_disp.c文件中的 修改lv_port_ ...

  10. linux adb arm移植,移植ubuntu core到Arm开发板

    origin: http://blog.csdn.net/kickxxx/article/details/15341079 最初是想把整个ubuntu移植到MX51开发板,因为项目不需要运行桌面系统, ...

最新文章

  1. C++中关于[]静态数组和new分配的动态数组的区别分析
  2. 惊呆了,Spring中竟然有12种定义bean的方法
  3. 前端技术周刊 2018-03-02
  4. 【mysql】时间戳
  5. rsync本地及远程复制备份【原创】
  6. 树形结构数据汇总查询解决方案+优化求助
  7. python机器学习算法.mobi_机器学习之ID3算法详解及python代码实现
  8. 魔法师突然出现的C++
  9. 使用jstack查看某个Java进程内的线程堆栈信息
  10. C++ 求解一整数划分问题
  11. 论文阅读 A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SEN- TENCE EMBEDDINGS
  12. 视频教程-cURL实战教程-PHP
  13. [AngularJS面面观] 20. 依赖注入 --- instance注入器以及provider注入器
  14. Geomesa-HBase索引篇——Z3索引
  15. DDSM数据库在windows环境下的转换
  16. echarts直角坐标系
  17. Gif动态图片怎么做?教你简单的gif合成小窍门
  18. Java Message Servicec - ActiveMQ
  19. Pycurl的简单使用与对比
  20. <<计算机操作系统(慕课版)>>第五章参考答案

热门文章

  1. 【装机心得】win8或以上系统的电脑降级安装win7时的正确操作手册
  2. 人工智能--人类的二次进化
  3. python英语单词 扇贝英语安卓下载_扇贝单词英语版手机版|扇贝单词英语版安卓版下载 v3.6.402 - 跑跑车安卓网...
  4. SQL中OVER(PARTITION BY)详解
  5. 网页另存word分页
  6. Pigeon中的流量限制
  7. java itextPdf导出pdf
  8. APP推广渠道分析:5种方法和2种思路
  9. python正则表达式实战——获取图片
  10. 使用皮卡(pika)操作RabbitMQ