http://blog.sina.com.cn/s/blog_706845a5010129da.html
终于很恶心的把流程走通了
首先列出需要的东西,从网上搜一下就能搜到了:
---------源码类-----------
1. kernel source
2. .config文件
---------工具类-----------
1. 交叉编译器arm-eabi-
2. fastboot,adb等android工具
3. mkbootimg用于解包boot.img使用
---------脚本类-----------
1. repack-bootimg.pl //不一定需要
2. unpack-bootimg.pl
下面是完整版刷内核及内核模块攻略(基于恶心的Galaxy Nexus)
1. 配置交叉编译器等各种环境
1)下载交叉编译器:
$ git clone https://android.googlesource.com/platform/prebuilt
2)写入环境变量中:
export PATH="/home/xxx/android-toolchain/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH"
2. 编译内核
1)修改内核根目录下的Makefile(一劳永逸的方法...):
#ARCH ?= $(SUBARCH)
#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
ARCH ?= arm
CROSS_COMPILE ?= arm-eabi-
2)从手机目录: /proc/下找到config.gz压缩文件,拿出来解压成.config,复制到内核源码根目录下
很多情况下手机中没有config.gz,我们刷了N多的rom加内核才找到一个能正常跑并且里面有这个文件的内核...
但是找到了可以一直使用,即使换了别的rom或者内核也没关系
实在没有的话,看第三步。
3)如果2)成功了,执行make menuconfig,看看该配置是否支持netfilter,如果不支持安下面的选上
To use netfilter
Networking support -> Networking options -> Network packet filtering framework (Netfilter)
Choose related choices
如果找到config.gz,执行make tuna_defconfig(这个是默认的德州仪器CPU的配置文件,理论上可用,但是我没有成功),然后同样看netfilter配置
4)执行make -j 2
5)完成编译,得到arch/arm/boot/zImage文件
3. 将zImage扔到手机中
1)从手机中拿出boot.img,或者从刷入手机的rom或kernel中拿也可,总之拿到一个手机在用的boot.img
2)执行前确保各个脚本permission正确,将boot.img,zImage,脚本unpack-bootimg.pl,可执行文件mkbootimg,放于同一个目录下。
3)执行脚本com.sh:(com.sh内容如下),用于将zImage打包进boot.img形成我们自己的kernel:newtestboot.img
./unpack-bootimg.pl boot.img
cd boot.img-ramdisk/
find . | cpio -o -H newc | gzip > ramdisk-repack.cpio.gz
cd ..
./mkbootimg --kernel zImage --ramdisk boot.img-ramdisk/ramdisk-repack.cpio.gz --base 0x30000000 -o newtestboot.img
4. 手机进入bootloader模式,利用fastboot刷入newtestboot.img
1)$ adb reboot bootloader
2)$ fastboot boot newtestboot.img
若出现permission denied,waiting for devices之类的问题,执行
$ sudo vim /etc/udev/rules.d/51-android.rules
在规则中添加
若出现permission denied之类的错误,执行
$ sudo vim /etc/udev/rules.d/51-android.rules
在规则中添加:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666"
这个的作用是将usb权限以及配置与adb或者fastboot配对,特别是fastboot由于是通过usb线刷的,必须保证usb口是匹配的。
5. 此时不出意外就是完成了内核刷入,下面将内核模块加载进去就简单了
6. 编译内核模块
1)利用我们的内核源码作为头文件,交叉编译器作为编译器来编译内核模块,Makefile文件写法如下:
KERNELDIR := /home/carelife/android_icecream/android_kernel/CyanogenMod
PWD :=$(shell pwd)
ARCH=arm
CROSS_COMPILE=arm-eabi-
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld
obj-m := netCatch.o
modules:
$(MAKE) -C $(KERNELDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
7. 加载KM
1)$ adb push /your_kernel_module_position /sdcard/
2)$ adb shell
#cd sdcard
#insmod your_kernel_module_name
8. 查看debug信息
1)$ adb shell dmesg
这个方法的实质是从手机IO缓存中读取print信息,输出到电脑屏幕上,所以是一个固定时间更新的静态查看信息的方法,十分不利于调试
2)等待寻找其他debug方法...
分享到:
相关推荐
### MTK6577+Android编译之kernel详解 #### 一、开发环境与硬件配置 本项目基于MTK6577平台,采用Android 4.0系统进行kernel的编译工作。开发环境搭建在虚拟机内,操作系统选用的是Ubuntu 14.04。硬件配置方面,...
- [Android内核编译指南](http://wiki.droiddocs.net/Compilation_of_Android_kernel) 以上步骤详细介绍了如何从零开始构建一个适用于Android的内核。尽管本文主要针对新手,但对于有经验的开发者来说也具有一定的...
这里,我们将详细探讨"Android kernel到App流程代码"中的关键知识点。 首先,我们从最底层开始,即Android Linux内核(Kernel)。Android基于Linux内核构建,它是操作系统的核心部分,负责管理硬件资源,如CPU、...
### 编译Android源码全过程详解 #### 一、获取Android源代码 在开始编译Android源码之前,首先需要确保获取完整的Android源代码。这一部分将详细介绍如何使用Git和Repo脚本完成这一任务。 ##### Git简介 Git是一...
### Android Kernel源码下载方法详解 #### 一、前言 在进行Android系统开发与定制的过程中,对于Kernel(内核)级别的理解与修改是至关重要的一步。本文将详细介绍如何下载Android Kernel的源代码,帮助开发者更好...
开发过程中,你可能还需要使用其他工具,如Kernel配置工具`(make menuconfig)`,用于定制内核特性,以及编译工具链,如GCC和ld,来编译和生成可加载的内核映像。对于调试,GDB和SystemTap等工具也很有用。 总的来说...
压缩包中的“kernel”文件可能包含了以下内容: 1. **配置文件**(如`.config`):记录了内核编译时的选项,这些选项决定了哪些功能被启用或禁用。 2. **源代码**:包含了内核的C和汇编语言源代码,包括核心模块、...
本文将详细介绍如何在Linux环境下编译Android内核,并在模拟器中运行。 首先,你需要一个合适的**工作环境**,这里推荐使用Redhat Linux 9.0作为编译平台,同时宿主机可以是Windows XP SP3。为了进行内核编译,你...
在Ubuntu上下载、编译和安装Android最新内核源代码是一项复杂但重要的任务,对于开发者而言,这能提供对系统底层更深入的理解和定制能力。本文将详细讲解这一过程。 首先,确保你已经按照前一篇文章的指导在Ubuntu...
Android 编译环境搭建是 Android 应用开发的必要步骤,本文将指导读者从零开始搭建 Android 编译环境,并详细介绍编译 Android 的步骤。 一、安装必要的软件环境 在 Ubuntu 9.10 平台上,需要安装以下软件包: * ...
AndroidKernel3.18源码包含了Linux内核的所有组成部分,包括arch、drivers、fs、include、kernel、lib等目录。编译源码需要设置合适的配置选项,通过make命令生成适合目标平台的内核映像。编译过程涉及到Kconfig文件...
在Android开发领域,有时需要对Android平台的源码进行深入研究或定制,这就涉及到了下载和编译Android源码的过程。下面将详细讲解这个过程。 一、下载Android源码 1. **主机环境准备**:这里以Fedora10为例,确保...
《Android内核编译手册》是一本专注于指导用户如何编译Android操作系统的内核的详尽指南。在Android系统中,内核起着至关重要的作用,它是连接硬件和上层软件的桥梁,负责管理和调度系统资源。对于开发者来说,理解...
### Android Kernel 开发知识点详解 #### 一、Android Kernel开发环境搭建 在进行Android Kernel的开发之前,首要任务是构建一个稳定且高效的开发环境。这包括选择合适的内核版本、安装必要的工具链以及配置编译...
### 编译 Android 全过程详解 #### 一、获取 Android 源代码 在开始编译 Android 源码之前,第一步自然是获取完整的源代码。对于 Ubuntu 10.04 这样的 Linux 发行版,有几种方法可以获得源码,其中最常见的是使用 ...
$ANDROID_SDK/tools/emulator -avd avd2.1 -kernel ~/android-kernel/goldfish/arch/arm/boot/zImage -show-kernel 2. 如何使用config文件,作为配置,重新编译内核 下载android kernel 2.6 (goldfish) 然后将...
2.4 编译Android kernel 47 2.4.1 获取goldfish内核代码 47 2.4.2 获取msm内核代码 50 2.4.3 获取omap内核代码 50 2.4.4 编译Android的Linux内核 50 2.5 运行模拟器 52 2.5.1 ...
2.4 编译Android kernel 47 2.4.1 获取goldfish内核代码 47 2.4.2 获取msm内核代码 50 2.4.3 获取omap内核代码 50 2.4.4 编译Android的Linux内核 50 2.5 运行模拟器 52 2.5.1 ...