android ----- goldfish内核编译

2023-11-02

学习总纲:

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
    android 分支 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android ----- goldfish内核编译 的相关文章

随机推荐

  • 【c++primer第五版】第十一章习题答案

    第十一章 关联容器 练习11 1 描述map和vector的不同 解 顺序容器中的元素是 顺序 存储的 对于vector 元素在其中按顺序存储 每个元素都有唯一对应 的位置编号 所有操作都是按编号进行的 例如 获取元素 头 尾 下标 插入删
  • 继承QDialog的类弹框不阻塞

    继承QDialog的类 如myDialog 在myDialog构造函数设置模态如下 this gt setWindowModality Qt ApplicationModal 使用如下 myDialog pMyDlg new myDialo
  • MariaDB(mysql的替代品)

    原文地址 http www csdn net article 2013 04 25 2815043 lookout oracle they tem up Oracle于09年收购了Sun 其中必不可少的原因就是获得MySQL这个最热门开源D
  • 【计算机网络系列】网络层⑩:路由选择协议——外部网关协议BGP

    外部网关协议BGP 协议BGP的主要特点 在外部网关协议 或边界网关协议 BGP中 现在使用的是第4个版本BGP 4 常简写为BGP 协议BGP对互联网非常重要 前面介绍的路由选择协议RIP和OSPF 都只能在一个自治系统AS内部工作 因此
  • leetcode刷题:三数之和

    题目 分析 这是最容易想到的做法 但是有明显的问题 时间复杂度达到0 n3 并且没有去重 class Solution public vector
  • 华为OD机试 - 模拟消息队列(Python)

    题目描述 让我们来模拟一个消息队列的运作 有一个发布者和若干消费者 发布者会在给定的时刻向消息队列发送消息 若此时消息队列有消费者订阅 这个消息会被发送到订阅的消费者中优先级最高 输入中消费者按优先级升序排列 的一个 若此时没有订阅的消费者
  • asp服务器 首选精图数码稳定,架设游戏服务端选什么云服务器

    架设游戏服务端选什么 DDOS是游戏 1 网络层攻击 YNFlood ACKFlood ICMPFlood UDPFlood NTPFlood SSDPFlood DNSFlood等 2 应用层攻击 CC攻击 3 HTTP的攻击等网络攻击
  • 如何要求用户的密码必须符合一定的复杂度

    如何要求用户的密码必须符合一定的复杂度 我们在使用 linux 系统 设置密码的时候 经常遇到这样的问题 系统提示 您的密码太简单 或者您的密码是字典的一部分 那么系统是如何实现对用户的密码的复杂度的检查的呢 系统对密码的控制是有两部分 我
  • 一种用QT实现即时通信软件表情发送与接收的思路

    一种用QT实现即时通信软件表情发送与接收的思路 最近需要使用QT为项目添加一个表情包发送与接受的功能 虽然之前知道表情发送与接收显示的一个基本原理 但是其中涉及到例如表情包插入到QTextEdit如何显示 如何保证从文本框发送出去的是表情编
  • Android Studio中创建java项目

    转自 https www cnblogs com jpfss p 9875402 html 1 创建普通的android工程 2 创建一个module 3 module类型选择java library 4 填写libary和class的名字
  • Sality病毒分析

    Sality病毒分析 基本信息 MD5 E100C2C3F93CABF695256362E7DE4443 样本来源 https www 52pojie cn thread 537381 1 1 html 样本报告 微步在线云沙箱 threa
  • 位运算符(一):C/C++位运算符

    位运算是指按二进制进行的运算 在程序中 常常需要处理二进制位的问题 C C 语言提供了6个位操作运算符 这些运算符只能用于整型操作数 即只能用于带符号或无符号的char short int与long类型 在实际应用中 建议用unsigned
  • C语言实现顺时针螺旋的顺序输出矩阵中元素

    给定一个 m 行 n 列的矩阵 请按照顺时针螺旋的顺序输出矩阵中所有的元素 从 0 0 位置开始 具体请参见下图 include
  • c++运算符、继承、多继承中构造函数和析构函数顺序、内部类和局部类

    一 自增自减运算符 单目运算符 正号 负号 开始代码 include
  • 万向肖风最新演讲:区块链应用模式的终极猜想

    互联网的应用解放了消费者 区块链的应用解放了开发者 解放开发者就是解放创业者 本文谨代表作者个人观点 不代表火星财经立场 该内容旨在传递更多市场信息 不构成任何投资建议 火星财经APP 微信 hxcj24h 一线消息 10月27日 由万向区
  • 5G时代三兄弟,NB-IoT到底有多牛逼

    5G时代的诱惑 犹如隔壁家厨房的气味 间歇性地飘过 刺激着大家的神经 然而对于工业而言 这个气味的信号实在是太微弱了 在2020年以前 5G的大规模应用 大家都不抱希望 没有设备制造商会认为5G能够迅速布置下去 即使是相关标准进展神速 6
  • fork函数讲解及代码分析

    fork 函数 fork 的基础知识 父进程通过调用fork函数来创建一个新的运行的子进程 父进程和子进程之间最大的区别就是PID不同 1 在父进程中 fork返回新创建子进程的PID 2 在子进程中 fork返回0 3 如果出现错误 fo
  • 自动控制原理(四)

    根轨迹分析法 概述 根轨迹的概念 根轨迹的绘制 基本规则和步骤 特征方程 确定根轨迹的方向 起点和终点 根轨迹的分支数 根轨迹的连续性和对称性 实轴上根轨迹的分布 根轨迹的渐近线 根轨迹的分离 会合点 根轨迹与虚轴的交点 根轨迹的入射角和出
  • 第十一章从零玩转系列之微信支付实战PC端我的订单接入退款取消接口

    一 前言 欢迎来到本期的博客 本期将会讲解如何接入微信支付的退款和取消订单接口 本篇文章将是PC端的最后一个文章啦 之后将会是UniApp的篇章感受移动端的诱惑吧 本次为前端知识点如果不懂前段可以去仓库直接copy出来使用 如果有什么问题可
  • android ----- goldfish内核编译

    学习总纲 Android10 硬件抽象层 HAL 概要介绍和学习计划 编译环境 android 版本 android 10 0 0 r41 架构 aosp x86 64 eng 内核分支 android goldfish 4 14 gchi