基于nexus6修改android内核

本文详细介绍如何在nexus6上编译和移植Android内核,包括克隆源代码、选择版本、编译器准备、编译内核、内核移植及可能遇到的问题解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 内核修改

使用到的设备: nexus 6,必须含有root权限。
刷内核须谨慎,请备份重要信息,尽量不要使用自己使用的手机进行测试

一、克隆源代码:

git clone https://android.googlesource.com/kernel/msm

nexus系列的内核源码可以在google的官方内核源码库克隆。

二、根据自己机型checkout到合适的版本

如nexus 6对应的型号是shamu,因此可以先查看仓库关于nexus 6的内核分支

git branch -a | grep shamu

得到结果是:

remotes/origin/android-msm-shamu-3.10-lollipop-mr1
remotes/origin/android-msm-shamu-3.10-lollipop-release
remotes/origin/android-msm-shamu-3.10-m-preview
remotes/origin/android-msm-shamu-3.10-marshmallow
remotes/origin/android-msm-shamu-3.10-marshmallow-mr1
remotes/origin/android-msm-shamu-3.10-marshmallow-mr1-r0.15
remotes/origin/android-msm-shamu-3.10-marshmallow-mr2
remotes/origin/android-msm-shamu-3.10-n-preview-1
remotes/origin/android-msm-shamu-3.10-n-preview-2
remotes/origin/android-msm-shamu-3.10-n-preview-3
remotes/origin/android-msm-shamu-3.10-n-preview-4
remotes/origin/android-msm-shamu-3.10-n-preview-5
remotes/origin/android-msm-shamu-3.10-nougat-mr0.5
remotes/origin/android-msm-shamu-3.10-nougat-mr1.2
remotes/origin/android-msm-shamu-3.10-nougat-mr1.5
remotes/origin/android-msm-shamu-3.10-nougat-mr1.6
remotes/origin/android-msm-shamu-3.10-nougat-mr1.7

根据android的版本,选择一个分支进行checkout,其中lollipop(5.0),marshmallow(6.0),nought(7.0),如:

git checkout remotes/origin/android-msm-shamu-3.10-marshmallow

checkout后会在当前目录下生成一个msm目录,该目录就是nexus 6的内核源码。

三、编译器准备

注意:编译内核前,需要查询清楚内核的位数,因为32位的内核和64位的内核使用一般是使用不同的配置以及编译工具。
编译工具:交叉编译工具有很多博客有介绍到,这里不详细说,我这里使用到的32位交叉工具是arm-eabi-4.8(git仓库),以及64位交叉编译工具aarch64-linux-android(git仓库),安装完之后加入到系统环境变量中。

四、编译内核

进入内核源码所在目录(msm目录),配置在命令行设置编译环境

# 32位设备,因为nexus 6是32位的设备,因此使用该配置
$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-

如果是64位设备,可以是

# 64位设备,如nexus 6p
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-android-

然后进行内核宏的配置,之后进行编译

$ make shamu_defconfig # 加载内核配置
$ make -j8             # 开始进行编译

shamu_defconfig是nexus 6(shamu)默认的宏配置,请根据手机型号指定不同的defconfig,可以去arch/arm/configs,或者arch/arm64/configs,查看是否有包含自己手机型号的defconfig。如果需要对内核的宏进行定制,可以:

$ make shamu_defconfig # 加载内核配置
$ make menuconfig      # 根据需要定制内核的宏
$ make -j8             # 开始进行编译

最后生成的系统镜像文件Image.gz-dtb会保存在arch/arm/boot或者arch/arm64/boot中。

五、内核移植

安装mkboot工具:android的内核通过某种格式与分区表等信息打包在一起(boot.img),因此需要通过mkboot工具对内核进行解包和打包。我使用的mkboot工具,进行编译后得到了mkbootimg和unmkbootimg两个可执行文件。

从目标手机获得手机boot.img文件:通过数据线连接手机,执行

$ adb shell   #进入手机终端
$ su          # 转换为超级用户
cd /dev/block/platform/soc.0/f9824900.sdhci/by-name #中间路径也许不同,但最终是到by-name这个目录
ls -l boot # 这个文件是一个符号连接,链接到/dev/block下的某个文件
dd if=/dev/block/mmcblk0p34 of=/sdcard/boot.img #by-name目录下的boot即boot.img,但是它是一个符号链接,因此将符号连接的内容复制出来
$ adb pull /sdcard/boot.img ~/resource

将自己编译的内核放进boot.img:通过unmkbootimg解压boot.img

unmkbootimg -i boot.img #输出信息中,有建议怎么去重新打包boot.img

复制unmkbootimg提示的信息,然后将改信息中 --kernel 指定部分换为自己后编译后的内核文件Image.gz-dtb,-o指定新打包的内核名称,其余不需要修改,如:

mkbootimg --base 0 --pagesize 4096 --kernel_offset 0x00008000 --ramdisk_offset 0x02000000 --second_offset 0x00f00000 --tags_offset 0x01e00000 --cmdline 'androidboot.hardware=angler androidboot.console=ttyHSL0 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 boot_cpus=0-3 no_console_suspend buildvariant=user' --kernel Image.gz-dtb --ramdisk ramdisk.cpio.gz -o newboot.img

回车执行后,获得重新打包的内核newboot.img。

将新boot.img重新刷写入手机
首先将手机切换到fastboot状态

$ su                              # 刷入内核需要获取root状态
adb reboot bootloader             # 切换到fastboot状态
fastboot flash boot newboot.img   #刷入新内核
fastboot reboot                   #重启

至此,新手机内核已经刷入完成,手机重启后,可以去设置-关于手机查看内核版本和型号。

可能会遇到的紧急情况
如果操作失误,可能会遇到分区表损坏的情况,导致开不了机,也使用不了recovery,这个时候只需要去官方下载官方rom,然后单独刷入recovery就可以重新使用recovery功能,然后重新刷官方rom就可以救砖(数据会全部丢失!!

### Nexus 6P上的CSI数据捕获 在Nexus 6P设备上捕获或提取CSI(Channel State Information)数据是一个复杂的过程,因为大多数商用Wi-Fi芯片组并不公开提供对CSI的访问接口。然而,一些研究团队已经开发了特定的方法和技术来实现这一目标。 #### 方法一:使用外部工具和驱动程序 某些研究人员通过修改Linux内核模块以及利用Atheros或Intel Wi-Fi适配器实现了对CSI数据的支持。尽管Nexus 6P本身可能不直接支持CSI采集,但可以尝试以下方法: 1. **外接USB Wi-Fi适配器** 使用兼容CSI数据提取的USB Wi-Fi适配器连接到Nexus 6P,并安装相应的驱动程序[^2]。这些适配器通常基于Atheros AR9000系列或其他支持开源CSI工具包的硬件。 2. **Android NDK编程** 如果希望直接在Nexus 6P内部操作,则需借助Android Native Development Kit (NDK),并通过JNI调用底层C/C++代码与Wi-Fi驱动交互。这种方法需要深入理解设备的Wi-Fi堆栈架构及其固件限制[^3]。 #### 方法二:依赖现有框架 目前存在几个用于获取CSI数据的研究级软件框架,虽然它们主要针对PC平台设计,但在适当调整后也可能适用于移动环境下的实验用途: - **OpenWPM Framework**: 提供了一套完整的解决方案以记录无线通信过程中的各种参数,包括但不限于CSI值[^4]。 - **CSITool & CSItool Patched Kernel Modules**: 需要root权限并刷入定制版kernel才能激活隐藏功能从而读取原始CSI帧信息[^5]。 需要注意的是,在实际部署前应仔细评估所选方案的技术可行性及合法性,确保不会违反制造商规定或者当地法律法规关于无线电使用的条款。 ```bash # 示例命令行脚本展示如何加载csi_tool模块(假设已具备相应条件) sudo insmod csi_tool.ko dmesg | grep csi_data ``` 以上仅为理论指导方向,具体实施细节取决于项目需求和个人技术水平。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值