Android : 修改内核源码 and 编译、打包成新的boot.img
一、Android内核源码的下载:
1.Google GIT地址:
$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/exynos.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git
2.清华服务器地址:
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/common.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/exynos.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/hikey-linaro.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/lk.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/omap.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/samsung.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/tegra.git
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/x86_64.git
goldfish
项目包含适用于所模拟的平台的内核源代码。msm
项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作使用 Qualcomm MSM 芯片组的起点。omap
项目用于 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 芯片组的起点。samsung
项目用于 Nexus S,可用作使用 Samsung Hummingbird 芯片组的起点。tegra
项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 芯片组的起点。exynos
项目包含适用于 Nexus 10 的内核源代码,可用作使用 Samsung Exynos 芯片组的起点。x86_64
项目包含适用于 Nexus Player 的内核源代码,可用作使用 Intel x86_64 芯片组的起点。hikey-linaro
项目用于 HiKey 参考板,可用作使用 HiSilicon 620 芯片组的起点。
二、编译:
1.代码库(msm) download之后会在对应的目录下可以通过 ls -al 查看到 .git , git branch -a 查看所有分支,我手上nexus平板刷的Android5.0的系统,所有选择以下内核版本:
git checkout remotes/origin/android-msm-flo-3.4-lollipop-release
2.分支代码下载好之后:
(1)修改Makefile:
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改为:
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
或者 手动设置环境变量:
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
export TARGET_PREBUILT_KERNEL=$你的内核目录/arch/arm/boot/zImage
(特殊 Google Nexus5 这样设置 export TARGET_PREBUILT_KERNEL=$你的内核目录/arch/arm/boot/zImage-dtb ,其他平台遇到问题可以两个都试试)
(2)配置:
kernel/msm/arch/arm/configs/ ,目录下有很多配置文件
make flo_defconfig ,选择默认配置,之后会生成 .config
make menuconfig ,可以通过此命令进一步配置内核更新 .config
(3)编译:
配置好内核后就可以输入 : make ,等待 zImage 和 zImage-dtb 的生成。
三、打包 zImage 到 boot.img,并刷机:
第一种方法:将编译产生的新的Android内核文件 android-xxx/kernel/msm/arch/arm/boot/zImage-dtb 替换掉 Android xxx源码编译生成的内核文件。重启Nexus 5手机进入刷机模式 fastboot flashall -w 刷入手机。
第二种方法:解包Android 源码编译生成的boot.img文件替换内核文件,具体的就是对Android 源码编译后产成的 android-xxx/out/target/product/flo/boot.img 镜像文件进行解包替换原来的Android内核文件然后进行打包。解包打包boot.img文件的工具比较多,
1.windows下使用bootimg.exe:
-解包命令:bootimg.exe --unpack-bootimg
-打包命令:bootimg.exe --repack-bootimg
2.linux下使用bootimg-tools工具解包打包boot.img文件替换内核(bootimg-tools工具比较好用--推荐)
(1)下载bootimg-tools解包打包工具: git clone https://github.com/pbatard/bootimg-tools.git
(2) make 编译生成可执行文件
(3) ./unmkbootimg -i boot.img : 解压原来android系统源码生成的boot.img,信息如下:
./unmkbootimg -i boot.img kernel written to 'kernel' (6730288 bytes) ramdisk written to 'ramdisk.cpio.gz' (619357 bytes)
To rebuild this boot image, you can use the command: mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x80208000 --ramdisk_offset 0x82200000 --second_offset 0x81100000 --tags_offset 0x80200100 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3 vmalloc=340M' --kernel kernel --ramdisk ramdisk.cpio.gz -o boot.img
(4)将内核源码编译生成的 zImage 或者 zImage-dtb 复制到 上面解压boot.img的目录下命名为kernel,使用以上红色指令进行打包生成新的boot.img,然后刷机:
adb reboot bootloader
fastboot erase boot
fastboot flash boot boot.img
fastboot reboot
如果能正常开机,那就congratulation!!!^v^
PS: 编译遇到的问题:
(1) warning: argument to 'sizeof' in 'strncmp' call is the same expression as the second source; did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
解决方法:在相应位置的Makefile里加上:EXTRA_CFLAGS += -Wno-sizeof-pointer-memaccess
(2) Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
解决方法:把 kernel/timeconst.pl 脚本里该行的 defined( ) 去掉即可。
(3)编译的zImage打包后刷入无法正常开机,试了n久最后把编译工具 arm-eabi-4.7 换成 arm-eabi-4.6 编出来的正常 - -!
下面提供msm的kernel源码和编译工具以及打包工具的下载链接:
msm内核源码:链接:http://pan.baidu.com/s/1eStNPVs 密码:7xj2
编译工具: 链接:http://pan.baidu.com/s/1sloHLAt 密码:erjn
打包工具:链接:http://pan.baidu.com/s/1mimkiG4 密码:qs0i
--end--
Android : 修改内核源码 and 编译、打包成新的boot.img的更多相关文章
- 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01
百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...
- 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01
百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06
百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...
- 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...
- Linux 内核源码外编译 linux模块--编译驱动模块的基本方法
1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...
- windows下在idea用maven导入spark2.3.1源码并编译并运行示例
一.前提 1.配置好maven:intellij idea maven配置及maven项目创建 2.下载好spark源码: 二.导入源码: 1.将下载的源码包spark-2.3.1.tgz解压(E:\ ...
- 如何下载android源码与android内核源码
首先,要分清楚,android的源代码和android的内核代码一般是分开的,要分别进行下载. 1.先下载android的源代码.(这里不包括android的内核代码) 下载最新的源代码,一 ...
- 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 百篇博客分析OpenHarmony源码 | v61.02
百篇博客系列篇.本篇为: v61.xx 鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 百篇博客分析OpenHarmony源码 | v59.01
百篇博客系列篇.本篇为: v59.xx 鸿蒙内核源码分析(构建工具篇) | 顺瓜摸藤调试鸿蒙构建过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿 ...
随机推荐
- 日常英语---十二、MapleStory/Monsters/Level 1-10(Horny Mushroom)
日常英语---十二.MapleStory/Monsters/Level 1-10(Horny Mushroom) 一.总结 一句话总结: horny-['hɔːnɪ]-adj.角的 Another m ...
- gdb 的 symbos 加载详情(set verbose on)
http://stackoverflow.com/questions/10000335/how-to-use-debug-version-of-libc 两个重要参数 set verbose on d ...
- Docker微容器+微服务将颠覆传统的软件架构
从我的观点看:Docker是一个微容器,一个云计算的微PaaS容器,类似JVM但比其更强大的容器,直接基于Linux内核,支持各种语言,它比VM虚拟机更加轻量,能够在Linux或云计算IaaS等平台上 ...
- 当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?
当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...
- linux服务器规格查看
性能测试前,需要确定服务器规格. 下面汇总下如何查看linux的CPU等规格 1. 查看服务器CPU个数 1)查看物理CPU个数: cat /proc/cpuinfo |grep "phys ...
- English trip V1 - B 20. Likes and Dislikes 喜欢和不喜欢 Teacher:Sole Key:
In this lesson you will learn to talk about likes and dislikes. 课上内容(Lesson) # talk about hobby Do y ...
- 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39
如果你还在被HD钱包.BIP32.BIP44.BIP39搞的一头雾水,来看看这边文章吧. 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥) ...
- kernel_thread简析
1.3.100static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags){ lon ...
- 『MXNet』第六弹_Gluon性能提升
一.符号式编程 1.命令式编程和符号式编程 命令式: def add(a, b): return a + b def fancy_func(a, b, c, d): e = add(a, b) f = ...
- HTML(form标签)、CSS选择器一
一.表单标签<form> 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互. 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含t ...