编译安卓内核教程(2023,6,13)

这篇具有很好参考价值的文章主要介绍了编译安卓内核教程(2023,6,13)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编译安卓内核前需要准备的东西。

  1. 一台支持解锁bootloader的手机
  2. 官方开源地址,或者第三方整合好的也行
  3. 一个linux环境,虚拟机、wsl、termux等都可以
  4. 看得懂中文

开始操作!

一、 从你的手机里面提取config.gz文件,在/proc/config.gz路径,这个文件是构建你手机内核的配置文件,这个默认是官方的,如果没有这个文件,那你需要通过解包boot.img来获取,稍后会说。

二、拉取你官方开源的内核源码以及设备树(安卓9以后,默认只开源内核了,设备树这些,都不再开放了)。

  1. 从你的品牌官方获取开源代码,比如小米开源地址,摩托罗拉开源地址,真我手机开源地址。把源码拉取到本地。

  2. 如果你不想用官方的,想用第三方的,比如LineageOS,Crdroid也可以。

  3. 你没有官方开源也没有第三方官方支持,那你可以不用看了,省点流量跟电量,去做别的事情吧- - 。

#git拉取示例
#--depth=1代表只拉取最新的源码,可以极大减少拉取后的体积,缩减拉取时间
git clone --depth=1 https://github.com/ProjectBlaze-Devices/kernel_xiaomi_chime

三、配置基本构建环境。
1.安装Linux环境。(wsl、vm虚拟机、双系统实体机的Linux,都可以)
2.安装编译工具。
Debian系列:(包括Ubuntu、Linux mint、优麒麟、Uos、termux)

#Debian系列:
apt-get install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick
lib32ncurses5-dev lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libncurses5 libncurses5-dev
libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync
schedtool squashfs-tools xsltproc
zip zlib1g-dev

ArchLinux系列

pacman -Syu git
cd ~ 
git clone https://aur.archlinux.org/aosp-devel.git
cd aosp-devel
makepkg -si

其它系列,自行查找对应的工具安装.

3.拉取内核编译工具(刚刚只是安装基本构建环境,这个编译工具才是重头戏,构建安卓内核的工具,只能从安卓源码里面拉取,而且有版本限制,太新不行,太老了也不行)

  1. 直接去LineageOS的GitHub官方仓库拉取
#官方GitHub拉取
git clone https://github.com/LineageOS/android_prebuilts_clang_kernel_linux-x86_clang-r416183b

#国内gitee拉取
git clone https://gitee.com/SorryMyLife/android_prebuilts_clang_kernel_linux-x86_clang-r416183b

#如果你还需要GCC进行编译,那么就拉取这个
#arm64
git clone https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9

#国内gitee

git clone https://gitee.com/SorryMyLife/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9

#arm32
git clone https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9

#国内gitee
git clone https://gitee.com/SorryMyLife/android_prebuilts_gcc_linux-x86_arm_arm-linux-androideabi-4.9
  1. 去Google source官方拉取

    如果你有才艺,可以直接访问Google

#arm64的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9

#arm32的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9

#arm64的clang
git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86

国内的临时解决方案

git config --global url."https://mirrors.tuna.tsinghua.edu.cn/git/AOSP".insteadOf https://android.googlesource.com

#arm64的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9

#上面配置完后,再拉取下面的代码,就可以了

#arm32的gcc
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9

#arm64的clang
git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86

四、开始构建内核源码

  1. 先去你的内核源码里面看看,有没有config文件。
cd 你的内核源码文件夹/arch/你的设备架构/configs/

一般配置文件会在这里,以你这台设备的代号命名,比如你的手机代号(codename)叫做lime,那么这个位置会有个带lime字母的config文件。

cd 你的内核源码文件夹/arch/你的设备架构/configs/vendor/

有的则是在这个路径下的vendor文件夹里面

设备代号为chime的 示例 (可能会无法访问,最好带才艺进去)

如果里面没有config文件,那么你就需要从你的官方boot里面提取了,先下载或者从你设备提取boot分区出来,上传到Linux环境里面,cd到内核源码里面,执行scripts/extract-ikconfig工具提取config信息。

cd 你的内核源码路径
./scripts/extract-ikconfig 你的boot分区文件路径 >> device_config
cp device_config arch/你的设备cpu架构/configs/你的设备代号名称_config
#或者这样
cp device_config arch/你的设备cpu架构/configs/temp_config
#取一个临时的名字

2.解决完config文件后,那么就开始构建内核。

cd 你的内核源码路径
#告诉编译器你构建的是arm64的内核,如果你不是64位的,那就把64删掉
export ARCH=arm64
export SUBARCH=arm64

#配置之前同步好的内核编译器环境变量,让当前环境可以直接使用
#/home/sir/pstar/kernel/clang是clang编译器的路径
#它下面的bin则是可执行二进制文件存放的文件夹,我们需要调用这个里面的程序来开始构建内核
export PATH="/home/sir/pstar/kernel/clang/bin:/home/sir/pstar/kernel/gcc64/bin:/home/sir/pstar/kernel/gcc32/bin:$PATH"

args="-j$(nproc --all) \ #-j$(nproc --all)这里是说用当年环境下最高的cpu线程进行编译
ARCH=arm64 \ 
SUBARCH=arm64 \
O=out \ #输出路径是在当前位置的out文件夹
CC=clang \ #指定C语言文件编译器为clang
CROSS_COMPILE=aarch64-linux-android- \ #配置交叉编译的目标平台为arm64
CROSS_COMPILE_ARM32=arm-linux-androideabi- \ #配置32位交叉编译器
CLANG_TRIPLE=aarch64-linux-gnu- " #负责交叉编译的Linux编译器
#这个也不清楚干嘛用的,就是它在构建的时候,需要用到Linux的一些标准库内容
#但是安卓的编译器阉割了,直接用安卓的编译,会出现很多莫名其妙的错误,所以就需要再配置一下这个编译器了
#如果你的设备是32位的,这里也要修改的

#清理之前构建的残留内容
make clean && make mrproper
#删除out文件夹,也就是之前指定输出的文件夹
rm -rf out 
#新建out文件夹,用来保存临时产生的垃圾文件还有最终生成的内核文件
mkdir -p out

#先检测配置文件有没有问题,进行初次构建
make ${args} vendor/lineageos_pstar_defconfig 
#这里如果不加vendor,就会读取
#内核源码/arch/你的设备架构/configs/里面的配置文件
#这个完整路径为: 内核源码/arch/你的设备架构/configs/vendor/lineageos_pstar_defconfig 
#不加vendor的完整路径为:内核源码/arch/你的设备架构/configs/lineageos_pstar_defconfig 

#这里的args就是上面设置的临时变量args里面的内容
#开始构建内核
make ${args} 

3.构建内核中如果出现一些报错,你应该去GitHub里面搜索,而不是用百度

4.构建完成的内核文件会根据不同的压缩规则存放在:

你的内核源码/out/arch/你的设备架构/boot/

END

参考文章:小米开源 摩托罗拉开源文章来源地址https://www.toymoban.com/news/detail-631820.html

到了这里,关于编译安卓内核教程(2023,6,13)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓RK3399编译驱动MPU6050,实现内核层与HAL层驱动

    今天我们一起学习一下如何实现对一款有驱动代码的传感器适配安卓系统 开发板:某AR眼镜公司的开发板RK3399 1. 什么是设备树(.dts) DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。 其主要目的是定义MCU各个引脚的接线功能,通过

    2024年02月04日
    浏览(54)
  • Android 13 关于安卓判断通知权限

    判断权限是否开启: public class NoticePermissionUtil {       private static final String CHECK_OP_NO_THROW = \\\"checkOpNoThrow\\\";     private static final String OP_POST_NOTIFICATION = \\\"OP_POST_NOTIFICATION\\\";       //调用该方法获取是否开启通知栏权限     public static boolean isNotifyEnabled(Context context) {        

    2023年04月13日
    浏览(43)
  • [Android]从零开始的内核编译

    本教程将基于小米 10S 的内核源码进行实例,其他型号的手机请自行寻找内核源码。具体内容可以参考我的内核编译项目。 1. 获取设备(手机)代号 在安卓设备终端( adb shell )上执行: 并寻找带有 ro.xx.device 这一行,里面的内容即为你的手机代号,例如: 2. 获取设备架构 在

    2024年02月05日
    浏览(76)
  • Android驱动开发之如何编译和更换内核

    编译内核可以使用图形化的界面配置,也可以直接使用脚本。在X86_64模拟器环境下,不用交叉编译,而交叉编译工具很容易出现兼容问题,一般也只能使用芯片厂商提供的工具,而不是GNU提供的工具。 android内核开发流程以及架构变化了很多,详情请看 内核官网 内核版本选择

    2024年04月26日
    浏览(30)
  • 【linux内核】Debian内核编译

    列出 Debian 内各种版本的核心软件包 apt安装软件包 编译内核源码 安装内核 更新grub 参考: 8.10. 编译内核 (debian.org) Debian编译内核教程 - 时光旅行的懒猫 - 博客园 (cnblogs.com) 内核编译方法-tony_ayuan-ChinaUnix博客

    2024年02月17日
    浏览(49)
  • Linux内核学习(包含Linux 2.6内核编译安装流程)

    Linux内核官方网站为:http://www.kernel.org 或者使用git将源码clone下来(我这里使用的版本为2.6): clone下来的源码目录结构如下:  其中比较重要的目录的官方描述如下: 对应的中文描述如下: 由于centos7.6初始gcc版本为4.8.5,而编译内核需要的最低版本为5.1.0,所以需要安装高

    2024年02月07日
    浏览(65)
  • linux内核分析编译体验

    linux-2.6.22.6 下载地址 https://mirrors.edge.kernel.org/pub/linux/kernel/v2.6/ linux-2.6.22.6_jz2440.patch下载地址 https://download.csdn.net/download/zjq_5586288/10438800?utm_source=bbsseo cd /home/li/kernel_learn/linux-2.6.22.6 patch -p1 …/linux-2.6.22.6_jz2440.patch 三种方式 (1)make menuconfig (2)使用默认配置(defconfig)在上面

    2023年04月11日
    浏览(40)
  • 树莓派Linux内核编译

    树莓派内核源代码保存在GitHub上github.com/raspberrypi/linux,可以看做是Linux主线内核代码的一个分支。树莓派内核源代码是从Linux主线的长期维护的稳定版本加上树莓派特有的改动形成的。树莓派的内核更新可以通过apt命令自动更新到最新的稳定版本。但是如果你需要使用到最新

    2024年02月08日
    浏览(46)
  • 编译Linux 2.6.34内核

    《Linux内核设计与实现(第三版)》中所用的内核版本为2.6.34,这个版本太旧了,在高版本系统中编译各种不支持,所以选了Ubuntu 14.04进行编译。 编译环境 :Ubuntu 14.04 GCC版本:4.8.4 编译的内核版本:Linux 2.6.34 内核源码下载:https://mirrors.edge.kernel.org/pub/linux/kernel/ 解压源码l

    2024年02月10日
    浏览(42)
  • Linux内核的编译、安装、调试

    Linux内核下载The Linux Kernel Archives 打开 .config 更改 CONFIG_SYSTEM_TRUSTED_KEYS 和 CONFIG_SYSTEM_REVOCATION_KEYS 更改 CONFIG_DEBUG_INFO_BTF 注释掉CONFIG_X86_X32 首先安装模块 这里加上 INSTALL_MOD_STRIP=1 是为了避免内核启动时卡在 loading initial ramdisk 安装内核 更改引导 更改 grub 修改文件 更新 重启 在

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包