我们可以用 Android Open Source Project (AOSP) 源码和相关的硬件特有二进制文件为 Google 的手机/平板,如 Nexus 系列,Pixel 系列等编译镜像,这有时为我们对 Android 系统的研究调试及开发提供了极大的便利。除此之外,为了 Android 系统能够得到更加广泛的应用,Google 官方还对两款参考开发板提供了支持,及 HiKey 和 HiKey 960 ,因而我们也可以为方便简单地为它们编译镜像。

HiKey 和 HiKey960 开发板是 Google Android 官方提供支持的开发板。Google 有提供为这两块开发板编译内核的文档,地址为 https://source.android.com/source/devices 。不过需要注意的是,这个页面的中文版,提供的是为 HiKey 开发板编译内核的方法,英文版则同时描述了为 HiKey 和 HiKey960 开发板编译内核的方法。HiKey 和 HiKey960 是两块不同的开发板,它们的硬件配置,内核编译方法还是有着细微的差别。

HiKey960 有 3GB RAM 的配置,而 HiKey 则只有 1GB 和 2GB 的 RAM 配置。HiKey960 板子如下图:

hikey960

使用下面的命令可以下载,构建并在 HiKey960 开发板上运行 Android。

编译用户空间

  1. 下载 Android 源码树

    $ repo init -u https://android.googlesource.com/platform/manifest -b master
    $ repo sync -j24
  2. 下载并提取二进制文件到 Android 源码树

    $ wget https://dl.google.com/dl/android/aosp/arm-hikey960-NOU-7ad3cccc.tgz
    $ tar xzf arm-hikey960-NOU-7ad3cccc.tgz
    $ ./extract-arm-hikey960.sh

    Android 本身是开源的,但设备本身集成的一些硬件,它们相关的软件,如驱动等,则很有可能是闭源的。这个包主要包含了设备中的硬件所需要的一些闭源的二进制文件,如特有的库等。没有这些文件,很有可能在编译 Android 的时候不会有问题,但在运行的时候会失败。

  3. 构建

    $ . ./build/envsetup.sh
    $ lunch hikey960-userdebug
    $ make -j2

    就像为任何设备编译 Android 一样,为 HiKey 960 编译 Android 镜像。

刷写镜像

  1. 通过打开开关 1 和 3 来进入 fastboot mode。

    开关在板子的如上图所示的这一面,具体位置是在右上角。在图中的右上角可以清晰地看到 “Ext boot”,“Boot mode” 等字样,开关就位于它们的左边并紧挨它们。开关可以通过拨动白色的拨片开打开关闭。板子上可以清晰地看到这些开关的编号,实际上自上至下这些开关的编号分别为 “3”、“2” 和 “1”。

  2. 运行如下的命令刷写镜像

    fastboot flash boot out/target/product/hikey960/boot.img
    fastboot flash dts out/target/product/hikey960/dt.img
    fastboot flash system out/target/product/hikey960/system.img
    fastboot flash cache out/target/product/hikey960/cache.img
    fastboot flash userdata out/target/product/hikey960/userdata.img
  3. 关闭开关 3 并重启板子的电源

HiKey 960 这块板子在拿到手的时候,已经刷写了 AOSP 编译出的 userdebug 版镜像。将设备脸上 USB,是可以通过 adb 访问设备的。那通过 adb reboot bootloader 进入 fastboot 模式岂不是要方便得多么?

在大多数时候,使用 adb reboot bootloader 进入 fastboot 模式确实要方便很多,然而 adb 命令也并不是总是可用的,比如修改了内核的代码,修改了 init 进程的代码,而且不小心把功能改烂了,那么 Android 的启动过程就不会执行到 adbd 启动,也就是我们可以使用 adb 的阶段。在这个时候,通过设置这些开关,就像手机上通过同时按住音量上下键和电源键进入 fastboot 模式一样,就变得非常有用了。

编译内核

  1. 运行下面的命令

    $ git clone https://android.googlesource.com/kernel/hikey-linaro
    $ cd hikey-linaro
    $ git checkout -b android-hikey-linaro-4.4 origin/android-hikey-linaro-4.4
    $ make ARCH=arm64 hikey960_defconfig
    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- -j24

    Android 用户空间代码和内核代码是分开存放管理的,AOSP 源码树中并不包含内核的代码,而只包含一些已经编译好内核镜像文件。且通常针对不同硬件设备厂商的 Android linux 内核,会位于不同的 git repo 下。可以专门为内核建立一个目录,比如也命名为 kernel,然后在这个目录下 clone 内核代码。除了前面看到的 hikey-linaro,还有 msmmediatektegra等等版本的内核代码。这里下载 HiKey 的 Android Linux 内核源码,执行配置并编译。
    执行 make ARCH=arm64 hikey960_defconfig 命令,会根据预先定义好的一个配置文件,这里也就是 hikey960_defconfig 文件,在当前目录下生成后面编译内核所需要的 .config 文件。 hikey960_defconfig 文件实际位于内核源码树的 arch/arm64/configs/hikey960_defconfig,这个文件的内容类似下面这样:

    CONFIG_POSIX_MQUEUE=y
    CONFIG_FHANDLE=y
    CONFIG_AUDIT=y
    CONFIG_NO_HZ=y
    CONFIG_HIGH_RES_TIMERS=y
    CONFIG_SCHED_WALT=y
    CONFIG_BSD_PROCESS_ACCT=y
    CONFIG_BSD_PROCESS_ACCT_V3=y
    . . . . . .

    主要定义了用于控制一些功能特性的打开或关闭的开关选项。要打开或关闭内核的某一个功能特性,修改这个文件是一种非常方便的方法。

  2. 更新 boot image 中的内核

    • 将编译产生的 hi3660-hikey960.dtb (arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb) 复制到 hikey-kernel 目录下,文件名仍然为 hi3660-hikey960.dtb。hikey-kernel 目录在 AOSP 源码库中的具体位置为 device/linaro/hikey-kernel
    • 将编译生成的 Image 文件 (arch/arm64/boot/Image.gz) 拷贝到 hikey-kernel 目录下,修改文件名为 Image.gz-hikey960。这将覆盖原来存在的同名文件。
  3. 编译 boot image
    在 Android 源码树的根目录执行如下命令:

    $ make bootimage -j24

    编译 Android 用户空间代码时,执行 make 之前所需要做的在执行这个命令之前当然也需要做。需要注意的是,boot image 中除了包含内核之外,还包含了 init 等系统核心可执行文件等。如果 Android 用户空间代码及相关 image 没有更新,可以通过命令 fastboot flash boot out/target/product/hikey960/boot.img 只更新 boot image。

设置序列号

要设置随机的序列号,则运行:

$ fastboot getvar nve:SN@16_DIGIT_NUMBER

Bootloader 将通过 androidboot.serialno= 把生成的序列号导到内核。

参考文档

Using Reference Boards

HiKey960 开发板 android 编译相关推荐

  1. Firefly-RK3288开发板Android编译环境搭建开荒

    入手了Firefly-RK3288的开发板,自己从零开始搭建编译环境开荒 第一步:安装Ubuntu12.04,使用安装盘安装(安装的过程就不详写了,下面贴图) 安装完后,更新ubuntu 第二步: 从 ...

  2. iTOP-3588开发板Android 固件编译

    历尽千辛万苦,终于过关斩将,终于可以大快朵颐的进行系统编译开发以及调试了,恭 喜你来到系统编译的章节,现在我们开始编译 Android12 系统吧.在编译的时候,如果编译 出现问题,一定要冷静分析,沉 ...

  3. iTOP3588开发板Android固件编译修改成mipi显示

    iTOP3588开发板Android固件编译修改成mipi显示 打开安卓 12 源码 kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-evb7-lp4. ...

  4. 全志A40i开发板Android系统编译

    Android系统编译 A40i &T3 板卡用户可以通过飞凌嵌入式提供的网盘链接获取OKA40i-C开发板软件和硬件的文档及源码.软件和硬件的文档及源码下载方法不清楚的可联系飞凌嵌入式客服索 ...

  5. 国产平台之T507 开发板Android 安全策略漫谈 -飞凌嵌入式

    硬件平台:飞凌嵌入式 OKT507-C开发板 操作系统:Android10.0 飞凌嵌入式 T507 开发板 Android系统版本为Android10.0,默认开启了SELinux.基于MAC访问控 ...

  6. 全志A33开发板vstar编译环境搭建

    全志A33开发板vstar编译环境搭建 安装系统 全志提供的vstar的SDK使用内核linux-3.4.39, 在编译过程中,要用到一个文件gen_check_code,位于linux-3.4/ar ...

  7. 安信可 ESP8266机智云开发板:编译与烧录

    安信可 ESP8266机智云开发板:编译与烧录 编译:1.SDK 开发环境搭建见 安信可ESP系列一体化开发环境搭建                        下载地址:http://pan.ba ...

  8. tiny4412开发板Android篇_2基于tiny4412的Android系统的编译

    tiny4412开发板使用的android系统版本是android5.0.2,由友善之臂公司提供,下载网址: https://pan.baidu.com/s/1pnn6N8Wpsx8PISLmKT59 ...

  9. imx6的android编译,iMX6开发板 Android系统下常见问题解决思路

    本文以飞凌嵌入式OKMX6Q /DL 平台为基础讲解,其它iMX6 平台可参考使用. 第一章 Android4.4屏幕竖屏 修改Android源码(Android源码需要整体编译一遍以后才可以) vi ...

最新文章

  1. 把mysql 中的字符gb2312 改为gbk的方法
  2. LRU算法确定最后使用时间的顺序-计数器
  3. XCode 7上传遇到ERROR ITMS-90535 Unexpected
  4. Python3编写网络爬虫04-爬取猫眼电影排行实例
  5. java 生成无重复 随机数
  6. 广告流量分析之评价指标的选择(二)
  7. Redis系列(三)-Redis发布订阅及客户端编程
  8. 信号与系统分析中的复变函数
  9. java hsqldb_HSQLDB: java程序使用hsqldb 入门教程 java启动hsqldb
  10. Intel ICH9 sata驱动
  11. mysql求平方根_MySQL数据库中如何求一个数的二次平方根(SQRT函数)呢?
  12. 远程桌面由于以下原因之一无法连接到远程计算机解决方法(亲测)
  13. Xilinx SRIO_gen2关于时钟的问题
  14. 金蝶全渠道营销列车,邀请您上车
  15. 【个人博客】Hexo个人博客搭建与配置详细教程 + Fluid主题 + Gitee发布
  16. OpenLayers标记地图点及点击地图点显示自定义弹出框
  17. Win10域客户端强制更改壁纸
  18. OpenGL-36-01SSAO
  19. 【如何在自己的宿舍有一台幽灵主机?】关于如何合理配置外网透穿和进行System服务的编写、安装,同时添加局域网唤醒等的一次实践。
  20. 【八月总结】回实验室第一个月

热门文章

  1. IDEA与tomcat相关配置
  2. Fegion-4解决Fegion第一次请求timeout的问题
  3. linux多线程 消费者,linux c 多线程 生产者-消费者二
  4. java 发送邮件昵称_javaMail发送邮件设置发件人中文昵称
  5. oracle or使用速度快马_使用mysqld_exporter监控MySQL并展示数据
  6. 在 Markdown 中,如何在反引号对语句中使用反引号
  7. linux下c的学习
  8. “重构”黑洞:26岁MIT研究生的新算法
  9. 解决appium安装app时某些手机弹出的提示框
  10. GIT入门笔记(5)- 创建版本库