转自http://blog.csdn.net/fdl19881/article/details/7467129
首先准备条件:
安装git (版本管理软件)
android开发环境 (eclipse , jdk , sdk )
总之,在这个过程中,他提示你少了什么,那么你就通过sudo apt-get install xxx安装什么 (多用Tab键补全功能)
ps:如果你不是太懂这个,请按照步骤一步步的来,不要跳过。
目录:
1. 下载android 模拟器所用的内核源码, 代号为goldfish
2. 下载arm-linux交叉工具链
3. 编译内核文件
4. 让android模拟器运行在刚编译的内核上
5. 编译自己的whoVisit.ko内核模块
6 将whoVisit.ko载入到内核中
7. 编译好的内核下载(android模拟器专用) 和 编译时用的config文件 下载
转载请注明出处:http://blog.csdn.net/fdl19881/article/details/7467129
1. 下载android 模拟器所用的内核源码, 代号为goldfish
(goldfish内核是专为android模拟器使用的)
ps:假设我们在~/android-kernel目录下下载android内核文件
$mkdir android-kernel #创建此目录
$cd android-kernel
$git clone https://android.googlesource.com/kernel/goldfish.git
$cd goldfish
$git branch -a #查看全部的版本
* (no branch)
master
remotes/origin/HEAD -> origin/master
remotes/origin/android-goldfish-2.6.29
remotes/origin/master
$git checkout remotes/origin/android-goldfish-2.6.29 #这部就是下载goldfish内核
到此下载android 模拟器专用的内核源码完成 , 所在文件夹为: ~/android-kernel/goldfish
2. 下载arm-linux交叉工具链
(ps: 假设工具链的目录为: ~/android-toolchain/)
注意: 最好是用下面的步骤安装工具链, 否则后面编译.ko可能会出问题. 我当时一直用NDK里面的工具链,结果编译.ko老是失败!!
$mkdir ~/android-toolchain
$cd ~/android-toolchain
$git clone https://android.googlesource.com/platform/prebuilt #这一步,要下载近1.8GB。
然后将此路径加入PATH变量中, 修改~/.profile文件
在最后一行加入:
export PATH="/home/xxx/android-toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH"
然后注销,再登陆就生效了。 (或者source ~/.profile , 不懂的就注销)
到此arm-linux交叉编译工具链就弄好了。
3. 编译内核文件
ps: 为了让内核文件支持动态加载和卸载.ko模块,请大家按下面的步骤进行
$cd ~/android-kernel/goldfish
$export ARCH=arm
$export SUBARCH=arm
$export CROSS_COMPILE=arm-eabi- #前面已经将路径加入到PATH变量中了
$make goldfish_defconfig
为了支持动态加载和卸载ko模块,否则请跳过。
$make menuconfig #这步可能会提示缺少个什么库 , 用sudo apt-get install libxxx安装 (多按Tab补全)
然后请把Enable loadable module support项按y选上
然后按回车进入选上三项,如图:
如果想使用netfilter,请把
Networking support -> Networking options -> Network packet filtering framework (Netfilter)这些选上
下面开始编译内核
$make -j8 #-j8表示并行编译数,即8个进程并行编译,更快
到此支持loadable 的内核编译完成 , 编译后的内核为 ./arch/arm/boot/zImage
4. 让android模拟器运行在刚编译的内核上
4.1 打开eclipse -> window -> AVD manager 新建一个模拟器,比如名叫avd2.1 (此步的前提是你已经装好了android开发环境)
4.2 使用自己的内核运行
(假设你的android sdk已经安装 , 这里使用 ANDROID_SDK表示android sdk安装目录)
$ $ANDROID_SDK/tools/emulator -avd avd2.1 -kernel ~/android-kernel/goldfish/arch/arm/boot/zImage -show-kernel
到此运行成功!
5. 编译自己的whoVisit.ko内核模块
假设文件位置在~/src中
源码whoVisit.c
就成功了! 或者你可以找网上更简单的hello.ko的例子(不需要netfilter)!
6 将whoVisit.ko载入到内核中
先按照第4步运行模拟器
$cd ~/src
$adb push whoVisit.ko /data
$adb shell
#cd data
#insmod whoVisit.ko
然后看看第4步中运行的shell里的输出情况是不是有from <IP> to <IP>
这就说明成功了!
7. 编译好的内核下载(android模拟器专用)
下载地址:http://download.csdn.net/detail/fdl19881/4252901
kernel文件名为zImage418.bak
用法见第四步。
编译时的配置文件为config418.bak
用法:
1.准备好我在第一、二章。
2. 将此文件改名为 .config 放到goldfish内核源码根目录
3. 然后make menuconfig (如果你还要在调整下配置的话,否则跳过)
4. 编译 make -j10 . 完成生成zImage文件就是内核文件了, 用法见第四章
这个过程不懂的,可以跟帖问。 其他的我估计也不懂了。。
参考资料:
http://source.android.com/source/building-kernels.html
http://www.52rd.com/Blog/Detail_RD.Blog_bajie22_30194.html
http://www.cnblogs.com/mengshu-lbq/archive/2011/01/19/1939011.html
http://blog.csdn.net/quaful/article/details/6053708