`
asdf314159265
  • 浏览: 247712 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

编译android kernel

 
阅读更多
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编译之kernel详解 #### 一、开发环境与硬件配置 本项目基于MTK6577平台,采用Android 4.0系统进行kernel的编译工作。开发环境搭建在虚拟机内,操作系统选用的是Ubuntu 14.04。硬件配置方面,...

    Android内核编译方法

    - [Android内核编译指南](http://wiki.droiddocs.net/Compilation_of_Android_kernel) 以上步骤详细介绍了如何从零开始构建一个适用于Android的内核。尽管本文主要针对新手,但对于有经验的开发者来说也具有一定的...

    Android kernel到App流程代码

    这里,我们将详细探讨"Android kernel到App流程代码"中的关键知识点。 首先,我们从最底层开始,即Android Linux内核(Kernel)。Android基于Linux内核构建,它是操作系统的核心部分,负责管理硬件资源,如CPU、...

    编译Android源码全过程

    ### 编译Android源码全过程详解 #### 一、获取Android源代码 在开始编译Android源码之前,首先需要确保获取完整的Android源代码。这一部分将详细介绍如何使用Git和Repo脚本完成这一任务。 ##### Git简介 Git是一...

    Android Kernel源码下载方法

    ### Android Kernel源码下载方法详解 #### 一、前言 在进行Android系统开发与定制的过程中,对于Kernel(内核)级别的理解与修改是至关重要的一步。本文将详细介绍如何下载Android Kernel的源代码,帮助开发者更好...

    android kernel在windows下载全过程

    开发过程中,你可能还需要使用其他工具,如Kernel配置工具`(make menuconfig)`,用于定制内核特性,以及编译工具链,如GCC和ld,来编译和生成可加载的内核映像。对于调试,GDB和SystemTap等工具也很有用。 总的来说...

    Android kernel代码

    压缩包中的“kernel”文件可能包含了以下内容: 1. **配置文件**(如`.config`):记录了内核编译时的选项,这些选项决定了哪些功能被启用或禁用。 2. **源代码**:包含了内核的C和汇编语言源代码,包括核心模块、...

    android内核编译手册(图文并茂)

    本文将详细介绍如何在Linux环境下编译Android内核,并在模拟器中运行。 首先,你需要一个合适的**工作环境**,这里推荐使用Redhat Linux 9.0作为编译平台,同时宿主机可以是Windows XP SP3。为了进行内核编译,你...

    在Ubuntu下载、编译Android内核源码

    在Ubuntu上下载、编译和安装Android最新内核源代码是一项复杂但重要的任务,对于开发者而言,这能提供对系统底层更深入的理解和定制能力。本文将详细讲解这一过程。 首先,确保你已经按照前一篇文章的指导在Ubuntu...

    android编译.doc

    Android 编译环境搭建是 Android 应用开发的必要步骤,本文将指导读者从零开始搭建 Android 编译环境,并详细介绍编译 Android 的步骤。 一、安装必要的软件环境 在 Ubuntu 9.10 平台上,需要安装以下软件包: * ...

    android 内核 3.18 goldfish源码打包下载

    AndroidKernel3.18源码包含了Linux内核的所有组成部分,包括arch、drivers、fs、include、kernel、lib等目录。编译源码需要设置合适的配置选项,通过make命令生成适合目标平台的内核映像。编译过程涉及到Kconfig文件...

    下载、编译 Android platform 源码

    在Android开发领域,有时需要对Android平台的源码进行深入研究或定制,这就涉及到了下载和编译Android源码的过程。下面将详细讲解这个过程。 一、下载Android源码 1. **主机环境准备**:这里以Fedora10为例,确保...

    Android内核编译手册

    《Android内核编译手册》是一本专注于指导用户如何编译Android操作系统的内核的详尽指南。在Android系统中,内核起着至关重要的作用,它是连接硬件和上层软件的桥梁,负责管理和调度系统资源。对于开发者来说,理解...

    android kernel 开发培训.pdf

    ### Android Kernel 开发知识点详解 #### 一、Android Kernel开发环境搭建 在进行Android Kernel的开发之前,首要任务是构建一个稳定且高效的开发环境。这包括选择合适的内核版本、安装必要的工具链以及配置编译...

    编译 android 全过程

    ### 编译 Android 全过程详解 #### 一、获取 Android 源代码 在开始编译 Android 源码之前,第一步自然是获取完整的源代码。对于 Ubuntu 10.04 这样的 Linux 发行版,有几种方法可以获得源码,其中最常见的是使用 ...

    模拟器专用android kernel2.6 (支持netfilter,ko文件加载与卸载)

    $ANDROID_SDK/tools/emulator -avd avd2.1 -kernel ~/android-kernel/goldfish/arch/arm/boot/zImage -show-kernel 2. 如何使用config文件,作为配置,重新编译内核 下载android kernel 2.6 (goldfish) 然后将...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    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 ...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    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 ...

Global site tag (gtag.js) - Google Analytics