Android kernel编译与刷机

RT3070的驱动在交叉编译时发现过程十分纠结,且网上说法不一,但辗转反侧折腾中发现了新的契机。原来Nexus 7的3.1.10内核本身就支持Ralink RT3070,只需要开启后编译产生新内核刷入Nexus 7就可以了,至于能不能让网卡支持混杂模式还有待测试。
编译内核比编译Android本身还容易,源码量小,对系统要求也比较低。参考[这里]下载编译内核有关代码
接下来为了编译内核,需要从Nexus 7下面把/proc/config.gz拽回来,并且解压得到.config放到kernel代码的根目录
cat config.gz | gunzip >.config
直接用git下载回来的Nexus 内核源码里面只有一个.git文件夹,需要使用git checkout才能将特定版本的源码解包释放。版本的选择可以参考下设备上的内核版本标注。比如我的为3.1.10-g009b6d1,就可以使用
git checkout 009b6d1
 
来释放对应版本的内核代码。然后 make menuconfig 可以调整内核模块,开启上述模块
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig 
 
Networking support –> Wireless
[*] Generic IEEE 802.11 Networking Stack (mac80211) 
// 只有开启这个选项才能看到RT3070的驱动模块
device drivers –>
network device support ->
wireless lan –>
ralink driver support
 
最后make一下就产生了zImage在arch/arm/boot/下面
接下来需要把这个zImage打包成boot.img然后刷入Nexus 7中
打包方法可以参看[这里] ,所需的解压包工具从[这里]下载
 
我的做法是用Nexus 7 toolkit把系统的boot.img提取,然后用unpackbootimg解包,然后把我的zImage和ramdisk重新打包成成boot.img,就能够刷入系统了。刷入的方法就是用
fastboot flash boot boot.img
 
推荐在做一切前hack工作前,用Nexus-7-toolkit先备份好,fastboot,adb这类工具toolkit里面也提供了

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注