学习总纲:

Android10 硬件抽象层(HAL)概要介绍和学习计划

编译环境:

   - android 版本 - android-10.0.0_r41- 架构 - aosp_x86_64-eng- 内核分支:android-goldfish-4.14-gchips

编译资源

 参考视频教程:https://b23.tv/BV1sm4y1S7RE

编译流程

前提条件:已编译好android源码

  1. 本文选择了 android-10.0.0_r41分支的android 源码。可通过下面连接参考支持的机型的分支:
    https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds
    2. 确认模拟器内核版本(在android 源码目录下)
      source build/envsetup.sh
      lunch aosp_x86_64-eng
      emulator
    如上图 kernel version : 4.14.112+… 确认内核版本是4.14的

下载android 模拟器内核源码

参考:https://source.android.google.cn/setup/build/building-kernels-deprecated

1.创建内核文件夹 (android-kernel)
  mkdir android-kernel
2. cd android -kernel
3. 下载内核
  git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
4. cd goldfish
5. 查看远程分支情况
  git branch -a 6. 切换分支 (根据前面确定了模拟器的内核是4.14版本)
git checkout remotes/origin/android-goldfish-4.14-gchips

配置编译内核环境

在goldfish 目录下执行下面命令:

  1. export ARCH=x86_64
  2. export SUBARCH=x86_64
  3. export CROSS_COMPILE=x86_64-linux-android-
  4. export PATH=aosp-10.0.0_r41(android源码目录)/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin:$PATH

编译内核

make x86_64_ranchu_defconfig
make -j8

编译成功后生成 bzImage,如下图:

运行内核

回到android 源码目录执行如下命令:

  1. source build/envsetup.sh
  2. lunch aosp_x86_64-eng
  3. emulator -kernel 内核地址/goldfish/arch/x86/boot/bzImage

问题集锦

  1. error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel

sudo apt-get install libelf-dev

  1. fatal error: openssl/bio.h: No such file or directory
    21 | #include <openssl/bio.h>

sudo apt-get install libssl-dev

  1. scripts/Kconfig.include:35: compiler ‘x86-linux-android-gcc’ not found

这个问题是因为andriod 11源码/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin中没有x86-linux-android-gcc 这个文件。但是android10源码中有,所以我的解决方法是将为android10编译。

  1. error New address family defined, please update secclass_map
    解决方法:
  • 在内核目录下/goldfish/scripts/selinux/genheaders/genheaders.c 和/goldfish/scripts/selinux/mdp/mdp.c 删除下面引用:
      #include <sys/socket.h>
  • 在内核目录下/goldfish/security/selinux/include/classmap.h中添加下面引用:
      #include <linux/socket.h>

android ----- goldfish内核编译相关推荐

  1. Android Linux内核编译调试

    对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...

  2. 编译并测试 android goldfish kernel x86

    goldfish作为一个为模拟器打造的android内核,是对内核进行修改和测试的良好基础.而在qemu上跑x86自然是最快的.但google 提供的编译命令的例子是arm的,也不是goldfish. ...

  3. Android 9.0 内核编译实战(以一加6为例)

    前人栽树后人乘凉- 我们这里用EX内核编译做个示范 https://github.com/flar2/OnePlus6/tree/ElementalX-3.00 1.同步代码啦 git clone h ...

  4. 安卓9.0刷linux,Android 9.0 内核编译实战(以一加6为例)

    前人栽树后人乘凉... 1.同步代码啦 git clone https://github.com/flar2/OnePlus6.git -b ElementalX-3.00 我这里直接这么干了.最好还 ...

  5. android 全志a10(2.3.4)开发二(linux内核编译及源码编译)

    <android 全志a10(2.3.4)开发二>文档详细可下载地址:http://www.a10bbs.com/forum.php?mod=viewthread&tid=504& ...

  6. android内核编译教程,Android内核开发:系统编译输出的镜像文件

    主要介绍一下源码编译输出的几个重要的镜像文件,这里把bootloader源码和Linux内核源码的编译输出也算在其中,因为毕竟Android系统缺少了这两个部分在设备上也是跑不起来的. 1. MLO, ...

  7. 编译android 一加,手机内核编译教程(一加6安卓9为例实战)

    前人栽树后人乘凉- 1.同步代码啦 git clone https://github.com/flar2/OnePlus6.git -b ElementalX-3.00 2.交叉编译工具链下载 解压到 ...

  8. Android 系统编译之内核编译

    本来想超频自己的手机的,于是发现需要编译内核才能实现 作为Android开发者的我 没有任何内核编译经验,只是想试一下, 于是折腾了两天终于把内核成功编译出来了 现在分享下学习经验 我的是小米手机,其 ...

  9. Google Android操作系统内核编译图文教程

    Google Android操作系统内核编译图文教程 和标准的Linux开发流程一样,Android平台开发的一个很重要的基础工作就是对其内核的编译和移植.本文结合Android的开发文档以及本人的实 ...

最新文章

  1. API网关与zuul1.x与springcloud的三角关系
  2. kafka和mqtt的区别是什么?
  3. QT-- MainWindow外的cpp文件调用ui
  4. linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本
  5. 每天一道LeetCode-----计算整型数二进制中1的个数/返回二进制翻转后的结果
  6. ContactsContract.Contacts与ContactsContract.CommonDataKinds.Phone的区别
  7. whitelabel error page什么意思_什么是RESTful API?总算能说清楚了
  8. vba 自动排序_Excel VBA如何入门?VBA教程 Excel教程 VBA学习 Excel新手课程
  9. vue4 跳转外部链接_vue跳转到外部链接
  10. 杭电-------2048不容易系列之(4)考新郎(C语言)
  11. bzoj3555 企鹅QQ
  12. L1-022 奇偶分家 (10 分) — 团体程序设计天梯赛
  13. Deep Learning Tutorial - Multilayer perceptron
  14. JAVA面试总结(初版)
  15. 图像检索与识别(Bag-Of-Words Models)
  16. Cell:植物根系如何允许有益微生物定植的
  17. Java平台 利用Common Configuration 读取配置文件
  18. Bugku:杂项 啊哒
  19. threejs 特效 自定义发光围栏,发光墙体,闪烁动画
  20. Python入门基础总结笔记——正则表达式

热门文章

  1. 转:代码之美——Doom3源代码赏析
  2. MLOps极致细节:18. Azure ML Pipeline(机器学习管道),Azure Container Instances (ACI)部署模型
  3. linux系统盘不要超过2T,linux 分区方法(超过2T的硬盘)
  4. PUT、POST的区别:
  5. 解决问题:maven-resources-plugin:3.2.0:resources (default-resources) on project demo: Input length
  6. IdentityServer Checking for expected scope openid failed
  7. Linux创建用户,用户切换,权限相关实验
  8. 天助自助者----与君共勉
  9. 西班牙语学习、关系代词que的用法
  10. html画圆圈原理,HTML5如何划线和画圆