raspberryPi2 移植Android系统

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

raspberryPi2 移植Android系统

 Android  elicec   8个月前 (01-08)   3494次浏览   已收录  0个评论


 raspberryPi2 移植Android系统

从本文你学到的东西

  • 如何下载Android源码
  • 如何编译Android源码
  • 如何在Linux下分区
  • 如何将Android镜像移植到raspberrypi

步骤概览

  1. 下载raspberry2的Linux内核和Android源码
  2. 编译raspberry2的Linux内核生成zImage内核镜像
  3. 编译Android系统,生成system.img系统镜像和ramdisk.img镜像
  4. 对SD卡分区
  5. 将编译好的镜像文件写入分好区的SD卡

下载Linux内核和Android源码

  • Android版本:Marshmallow(android 6.0.1)
  • 编译平台:Ubuntu 14.04 64bit (下载加编译至少准备100G硬盘空间

下载Android源码

下载Android源码可以参考官方网站http://source.android.com/source/downloading.html。 但是考虑到国内无法访问Google,以下采用国内tuna清华镜像下载。 步骤如下:

1.下载repo工具

chmod a+x ~/bin/repo

 
 
  1. //其中bin目录建立在当前用户文件夹下即可。
  2. mkdir ~/bin
  3. PATH=~/bin:$PATH
  4. curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

2.建立工作目录:

 
 
  1. //工作目录为Android源代码下载保存的位置。名称任意。
  2. mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY

3.初始化仓库:

  • 首先得编辑~/bin/repo文件修改REPO_URL变量,操作如下:
       
       
    1. //打开刚才下载的repo文件,也可以用gedit或者vim等任何文本编辑器打开
    2. nano ~/bin/repo
    3. //找到REPO_URL,并修改为
    4. REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
  • 在工作目录初始化仓库
       
       
    1. repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r10
    2. //或
    3. repo init -u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest -b android-6.0.1_r10// 如果需要特定的Android包可以修改后面的-b android-6.0.1_r10
  • 下载raspberrypi2用的manifests文件到repo。这样可以repo到树莓派相关的硬件文件
       
       
    1. $ cd .repo // .repo位于刚才下载repo的bin目录
    2. $ git clone https://github.com/peyo-hd/local_manifests -b marshmallow

4. 最后就可以下载源码了

在你刚才新建的工作目录执行repo sync, 下载过程很长,可能需要好几天,当下载中途出错,可以执行repo sync,便可以自动继续下载

编译Linux内核

交叉编译环境的搭建

下载交叉编译

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

该目录中有总共有四个编译环境,根据不同的编译平台,我选用的是gcc-linaro-arm-linux-gnueabihf-raspbian 下载到Ubuntu任意目录。

设置其环境变量

gedit /etc/profile  //打开profile文件 

最末尾添加

PATH="$PATH:/home/van/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin" export PATH 

执行 source /etc/profile使之立即生效

编译Linux内核

 $ cd kernel/rpi //内核下载的目录位于建立的下载Android的工作目录  
$ 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 

编译Android系统

在开始编译Android系统之前,需要先修改framework中的一个可能导致的bug,文件GestureDetector.java 在490行onTouchEvent中添加如下switch几句话:

core/java/android/view/GestureDetector.java 
 @@ line 490 @@ 
public class GestureDetector { 
 public boolean onTouchEvent(MotionEvent ev) {  
+ switch(ev.getAction() & MotionEvent.ACTION_MASK) { 
+ case MotionEvent.ACTION_HOVER_MOVE:  
+case MotionEvent.ACTION_HOVER_ENTER: 
+ case MotionEvent.ACTION_HOVER_EXIT: 
+ case MotionEvent.ACTION_BUTTON_PRESS: 
+ case MotionEvent.ACTION_BUTTON_RELEASE: 
+ case MotionEvent.ACTION_SCROLL: 
+ return false;  
+ }   
if (mInputEventConsistencyVerifier != null) { 

接着,可以开始编译Android系统了,切换到Android源码目录

 $ source build/envsetup.sh  $ lunch rpi2-eng //也可以直接执行lunch不带参数,那样会弹出所有的target供选择  
$ make -j4  //4代表同时编译的线程数目,例如双核四线程电脑就 j4 

编译时间根据cpu性能而不同,一般4小时左完成。

向SD卡写入内核和系统

如何将编译好的系统写入sd卡可以参考我在YouTube上找到一个视频,非常详细~包括如何分区,如何写入镜像等等 http://v.youku.com/vshow/idXMTQ2MzY2MzA1Ng==.html

下面是简短的文字描述攻参考

SD卡分区

分区工具,Ubuntu自带的Gparted

总共分四个区

分区 大小 格式 label flags
p1 512M Fat32 boot *boot
p2 537M ext4 system  
p3 512M ext4 cache  
p4 剩余全部 ext4 data  

写入Android镜像

 
 
  1. $ cd out/target/product/rpi2
  2. $ sudo dd if=system.img of=/dev/<p2> bs=1M
  3. //p2代表分区二在系统中挂载的名字,例如我的挂载为sdb2,外接usb存储设备都挂载在/dev/sd*下,具体名字可以在GParted中看到

上一步中Android系统编译完成后会在out/target/product/rpi2中生成system.img镜像文件。dd命令将其写入P2分区

接着将所需的其他文件直接拷贝到p1分区即boot目录(直接拷贝),总共8个:
device/brcm/rpi2/boot/*下的所有文件:`bootcode.bin,cmdline.txt,config.txt,fixup.dat,start.elf`
kernel/rpi/arch/arm/boot/zImage
kernel/rpi/arch/arm/boot/dts/bcm2709-rpi-2-b.dtb 
out/target/product/rpi2/ramdisk.img 

复制完成后就可以给raspberry上电,启动了。

可能遇到的问题

问题:用HDMI口连接显示器是,显示器提示分辨率无法匹配。或者黑屏。 解决:在config.txt中加 hdmiignoreedid=0xa5000080。这样可以不用理会显示器具体,配置,而是强制输出到显示器。


elicec , 版权所有丨如未注明 , 均为原创丨本网站采用 BY-NC-SA协议进行授权 , 转载请注明 raspberryPi2 移植Android系统
喜欢 (5) 分享 (0)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Zigbee和Raspberry Pi的智能家居系统是一种利用无线通信技术和单板计算机结合的智能设备管理系统。Zigbee是一种低功耗、短距离通信协议,被广泛应用于智能家居领域,用于与各种智能设备进行通信。而Raspberry Pi是一种功能强大的小型计算机,可用于控制、操作和监控智能家居设备。 该系统能够通过使用Raspberry Pi作为中心控制器,连接和管理通过Zigbee协议通信的智能家居设备。用户可以通过使用智能手机或其他远程设备上的应用程序,对家中的各种设备进行远程控制。例如,可以通过手机应用程序调整灯光亮度、温度、音量等。同时,系统还可以设置各种定时任务和场景模式,自动控制设备的运行状态,以提高居家生活的便利性和舒适度。 基于Zigbee和Raspberry Pi的智能家居系统具有以下优点:首先,Zigbee协议具有较低的功耗和较长的通信距离,使得设备之间的通信更加可靠和稳定。其次,Raspberry Pi作为中心控制器,具有强大的计算和存储能力,可以快速响应用户的指令和需求。此外,系统的可扩展性也非常好,可以轻松添加和管理新的智能设备。 总结来说,基于Zigbee和Raspberry Pi的智能家居系统通过结合无线通信技术和单板计算机,实现了智能设备的连接、控制和管理。该系统方便用户远程控制设备,并且具有较低的功耗和较长的通信距离等优点。随着智能家居技术的不断发展,这种基于Zigbee和Raspberry Pi的系统将会在未来得到更广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值