编译android goldfish内核(x86_64)

举报
王建峰 发表于 2021/11/18 23:42:01 2021/11/18
【摘要】 Android linux内核 Android并没有使用标准的Linux内核,而是做了很多的修改。AOSP网站提供了适应各种芯片或设备的linux内核源码的仓,只有少部分google设备支持的内核源码可...

Android linux内核

Android并没有使用标准的Linux内核,而是做了很多的修改。AOSP网站提供了适应各种芯片或设备的linux内核源码的仓,只有少部分google设备支持的内核源码可以通过repo构建,其他的需要做一些编译配置。

手动编译内核

这里选择emulator模拟器跑Android内核,所以选择goldfish版本作为我的的Linux Kernel,下面通过编译goldfish内核来介绍这个过程。
按照官方的教程没有找到xxx_defconfig编译配置文件,之后在网上找到一篇相似的博客,以下步骤基本上是按照那个教程来的。
1、下载源码

hinzer@ubuntu:kernel$ git clone https://android.googlesource.com/kernel/goldfish

  
 
  • 1

2、查看当前Android系统对应的内核版本

hinzer@ubuntu:android-10$ emulator   # 虚拟机运行起来,点Setting -> Android version 查看内核版本信息

  
 
  • 1

3、检出对应分支

hinzer@ubuntu:kernel$ cd goldfish/
git branch -a
#....
#....
git checkout -b dev remotes/origin/android-goldfish-4.14-dev.20190417  # 对应的内核版本为4.14
#....

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、进行编译配置

export PATH=$PATH:/home/hinzer/source/android-10/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin
export ARCH=x86_64
export CROSS_COMPILE=x86_64-linux-android-
export REAL_CROSS_COMPILE=x86_64-linux-android-

  
 
  • 1
  • 2
  • 3
  • 4

5、编译

/home/hinzer/source/android-10/prebuilts/qemu-kernel/build-kernel.sh  --arch=x86_64    # 需要在kernel的源码的根目录下执行

  
 
  • 1

但是出现error,没有发现"x86_64_emu_defconfig"这个文件。于是我将x86_64_defconfig改为x86_64_emu_defconfig

cp -a /home/hinzer/source/android-10/kernel/goldfish/arch/x86/configs/x86_64_defconfig /home/hinzer/source/android-10/kernel/goldfish/arch/x86/configs/x86_64_emu_defconfig
/home/hinzer/source/android-10/prebuilts/qemu-kernel/build-kernel.sh  --arch=x86_64    # 继续编译
...
...
Kernel: arch/x86/boot/bzImage is ready  (#1)
Kernel x86_64_emu prebuilt images (kernel-qemu and vmlinux-qemu) copied to /tmp/kernel-qemu/x86_64-4.14.88 successfully !


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6、加载内核并运行系统
模拟器默认使用的kernel是/prebuilts/qemu-kernel/x86/kernel-qemu,需要指定我们编译出的kernel。emulator启动相关的参数,可参考官方手册 - 命令行启动选项

# 编译生成的内核放在/tmp/kernel-qemu/x86_64-3.10.0/kernel-qemu
hinzer@ubuntu:android-10$ emulator -kernel /tmp/kernel-qemu/x86_64-4.14.88/kernel-qemu  # 配置参数

  
 
  • 1
  • 2

7、再次查看当前Android系统对应的内核版本

补充

将编译出的kernel-qemu加载到emulator上发现界面直接卡死,adb devices命令也连接不上。发现在emulator界面查看到的kernel版本为4.1.4,/prebuilts/qemu-kernel/x86/kernel-qemu的版本信息却是3.4的。初步怀疑是编译的linux内核版本不对,导致无法正常启动。
但是又后来编译了3.4kernel,启动出现

mi@ubuntu:android-10$ emulator -kernel prebuilts/qemu-kernel/x86/kernel-qemu 
emulator: WARNING: Couldn't find crash service executable /home/mi/source/android-10/prebuilts/android-emulator/linux-x86_64/emulator64-crash-service

emulator: ERROR: New emulator backend requires minimum kernel version 3.10+ (currently got lower)
Please make sure you've got updated system images and do not force the specific kernel image together with the engine version

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

(这个问题暂时还没有解决,只是目前单独编译不影响)

另外,进一步研究了kernel源码下的README文件,发现make ${PLATFORM}_defconfig说明。想到之前按照官方的步骤可能出了一点差错,修改为

cd goldfish
export ARCH=x86     # cpu架构
export CROSS_COMPILE=x86_64-linux-android-
make x86_64_defconfig    # 将arch/$ARCH/configs/xxx_defconfig写入.config文件,编译阶段build系统会检索
make

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

success!!此时编译出的映像文件输出arch/x86/boot/bzImage,

参考资料

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/105213616

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。