精华内容
下载资源
问答
  • android内核编译

    千次阅读 2014-12-23 13:49:13
    android内核编译

    上一篇文章记录了android源码的编译过程:http://blog.csdn.net/jiguangcanhen/article/details/42081229

    但是我们在编译的过程中,使用的是google给我们编译好的内核源码,位置在:/prebuilt/android-arm/kernel/kernel-qemu

    那么我们怎么编译自己的内核源码呢?

    首先下载内核源码:内核源码

    下载了内核源码之后,我再android源码的kernel文件夹中,建立了一个文件夹private_guo,然后把下载的文件夹放入其中。

    进入内核源码根目录:/usr/local/Android/Android_2.3.7/kernel/private_guo/kernel

    修改Makefile文件:sudo gedit Makefile

    如图:

    之后,就可以执行编译命令了,这个时候你的shell应该在内核源码的根目录:

    make goldfish_defconfig

    make


    然后会发现一个错误:

    找不到arm-eabi-gcc

    那么就下载这个工具:http://pan.baidu.com/s/1eQ3WSU2

    大家也可以去git上面拿:https://github.com/android/platform_prebuilt/tree/master/linux-x86/toolchain/arm-eabi-4.4.3 

    我这里是提供了整个的prebuild,大家只要拿到里面的platform_prebuilt-master\linux-x86\toolchain\arm-eabi-4.4.3就可以了。

    然后把它放入到/usr/lib中去就可以了,然后大家配置一下环境变量就可以了。

    sudo gedit /etc/profile

    然后在CLASSPATH中添加/usr/lib/arm-eabi-4.4.3/lib

    在PATH中添加/usr/lib/arm-eabi-4.4.3/bin

    然后再执行一下source /etc/profile来应用环境变量(懒得重启了)。

    这样,再次执行上面的编译命令,这个时候又发现一个错误:

    include/asm is a directory but a symlink was expected

    这个也很简单:linux/include/asm 文件夹是内核编译过程中创建的,创建结果就是一个指向文件夹asm-arm的链接,表明该系统的平台是arm架构的,而编译系统内核之前,是没有asm这个链接的,所以,在编译过程中,创建该链接时文件名字与asm文件夹的名字发生冲突,报错了

    这样之后,再次执行编译命令:

    出现OBJCOPY arch/arm/boot/zImage

    Kernel: arch/arm/boot/zImage is ready

    这样就说明编译成功了。

    下面就是用我们的来启动模拟器了:

    export PATH=$PATH:/usr/local/Android/Android2.3.7/out/host/linux-x86/bin

    export ANDROID_PRODUCT_OUT=/usr/local/Android/Android_2.3.7/out/target/product/generic

    emulator -kernel ./kernel/private_guo/kernel/arch/arm/boot/zImage

    等一会,我们的模拟器就启动起来了:


    ok,这样,我们的内核也就编译完成了。good luck!


    展开全文
  • Android内核编译

    2011-11-17 17:06:52
    Android系统的内核编译操作过程,简单的文档描述
  • android内核编译方法

    2010-02-25 10:02:18
    android,内核编译,android内核编译,android内核编译方法 真正的android内核编译
  • Android内核编译手册

    2012-04-13 12:56:38
    Android内核编译手册
  • Android内核编译方法

    2010-12-22 11:44:23
    介绍了Android内核编译的方法,适用于新手学习
  • 图解Google Android内核编译教程 Android作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供的内核源代码中除了linux部分外,有很大一部分是与虚拟处理器Qemu和模拟硬件平台Goldfish相关...
  • android内核编译方法2008-09-24 嵌入式在线 (){Favorites();}" href="javascript:;">收藏 | 打印 google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是...

    android内核编译方法

    2008-09-24      嵌入式在线      收藏 | 打印
            google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的一个大师级别的黑客Ben “Benno” Leslie,他曾经试图把目前google发布的android移植到openmoko的平台上去,并且做了10000多行代码的尝试。最终虽然由于open moko采用比较老的arm 920t的内核,而android采用较新的arm926-ej-s内核,而且使用了新的内核的一些新特性,导致移植失败,但是anyway,他已经做了足够多的前期工作了,尔后的宣布成功移植android到real target板子上的人,大多是在他提供的patch的基础上继续走下去做出来的。

     下面是一些有用的参考,希望有助于对此感兴趣的开发人员:
    (1)Ben “Benno” Leslie的关于andorid移植到openmoko的个人博客地址:
    http://benno.id.au/blog/

    (2)早期宣布成功移植android到zauraus-sl-c760的详细方法描述的链接:
    http://euedge.com/blog/2007/12/06/google-android-runs-on-sharp-zaurus-sl-c760/

    (3)后续的根据上述先行者们的工作,成功移植android到zauraus-c3000的方法:
    http://androidzaurus.seesaa.net/article/74237419.html

    (4)本文是参考下面的wiki,接合个人的实践写出来的,对原文的作者表示一下感谢:
    http://wiki.droiddocs.net/Compilation_of_Android_kernel

    很羡慕这些人阿!

    不过很可惜,偶的开发板是s3c2410的,恰好是arm920t的核心的。。。估计移植上去戏不是很大,需要重写很多代码,毕竟偶跟benno相差得太远太远了,同样是开发人员,差距咋就那么大呢?!
    (毕竟google仅仅开放了kernel的源代码而已,他们需要开放的东西还很多。)

    在这里把关于android内核编译方法简单写一下,或许对希望移植内核的朋友能有些帮助:
    (看了Benno的移植过程以后,觉得即使你能够编译google开放出来的内核,意义也不是特别大,因为这个内核中加入了为了支持qemu的很多东西,而这些代码似乎对希望移植到真机上的朋友来说,没有任何意义,反而是一种阻碍)。

    1)从CodeSourcery上面载用于交叉编译的工具链:
    http://www.codesourcery.com/gnu_toolchains/arm/download.html
    我在这里选择的是->ARM GNU/Linux,以及IA32-GNU/Linux。有文章说应该选择ARM EABI,我不知道了,没有测试过,反正我选择的这个编译的内核也是可以跑起来的:P

    2)下载google的android linux的内核源代码:
    http://code.google.com/p/android/downloads/list
    主要是这个文件:linux-2.6.23-android-m3-rc20.tar.gz

    3)把下载到的内核和交叉编译工具解压缩,并最好把工具链的路径放到PATH里面去

    解压缩内核:
    $ mkdir -p android
    $ cd android
    $ tar xzvf ../linux-2.6.23-android-m3-rc20.tar.gz
    会解压出来一个叫做kernel的目录,google的android的linux内核就在里面了。

    解压缩交叉编译工具链:
    $ cd /usr/local/
    $ sudo cp ~/arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 .
    $ sudo tar zxvf arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
    此时会解压出来一个叫做arm2007q3的一个目录,这里面就是工具链了。

    设置一下环境变量:
    $ export PATH=$PATH:/usr/local/arm2007q3/bin
    好了,到此,基本的内核编译环境就搞好了。

    4)现在是要得到android的内核编译参数的配置文件的时候了,该文件需要从已经安装好的android的模拟器
    中得到才行。所以安装android的sdk也是必须的,这一步不太明白的朋友可以参考我以前发的android
    命令行体验的文章。
    首先启动android模拟器,然后通过adb得到模拟器中提供的内核配置文件:
    $emulator &
    $adb pull /proc/config.gz .
    这时候adb工具会连接模拟器,并从它里面下载一个叫做config.gz的文件到你的当前目录下。
    把它拷贝到你的kernel目录:
    $cd ~/android/kernel
    $cp ~/config.gz .
    解压缩该文件,并重命名为.config,这一步做了就可以跳过make menuconfig之类的内核参数设置
    动作了。
    $gunzip config.gz
    $mv config .config

    5)修改kernel目录中的Makefile文件,用emacs或vi打开该Makefile

    修改CROSS_COMPILE变量为:
    CROSS_COMPILE=arm-none-linux-gnueabi-
    这个就是刚刚的下载和解压的工具链的前缀了,旨在告诉make,在编译的时候要使用我们的工具链。

    在Makefile中注释掉LDFLAGS_BUILD_ID这个变量:
    例如将如下定义:
    LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
    $(call ld-option, -Wl$(comma)--build-id,))
    修改为:
    LDFLAGS_BUILD_ID=
    #LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
    # $(call ld-option, -Wl$(comma)--build-id,))
    把它注释掉的原因是目前android的内核还不支持这个选项。--build-id选项,主要是用于在生成的elf
    可执行文件中加入一个内置的id,这样在core dump,或者debuginfo的时候就可以很快定位这个模块是
    哪次build的时候弄出来的。这样就可以避免,每次都把整个文件做一遍效验,然后才能得到该文件的是由
    哪次build产生的。对于内核开发者来说,这是很不错的想法,可以节约定位模块版本和其影响的时间。
    目前,该功能还出于early stage的状态,未来的android或许会支持,但至少目前的版本是不支持的。
    所以,用#注释掉即可,或者害怕不保险的话,就加入LDFLAGS_BUILD_ID=空,这样即使编译的时候用了,
    也只是一个空格而已。
    对这个--build-id选项感兴趣的朋友,可以访问下面的网址,它的作者已经解释得非常明白了:
    http://fedoraproject.org/wiki/Releases/FeatureBuildId

    6)终于可以开始make了。
    $ make
    不出意外的话,应该整个过程都会非常顺利,最终会在~/android/kernel/arch/arm/boot目录下面
    生成一个zImage,这个就是我们要的内核映像了。

    7)激动人心的时刻终于到来了,我们可以测试一下刚刚编译出来的内核可以不可以用了。
    $emulator -kernel ~/android/kernel/arch/arm/boot/zImage
    当看到red eye在晃来晃去,最终显示出来android的界面的时候,一颗悬着的心总算放下了。

    android的proc里面的version如下:
    # cat version
    Linux version 2.6.23 (wayne@wayne) (gcc version 4.2.1 (CodeSourcery Sourcery G++ Lite 2007q3-51)) #1 Sat Jan 19 18:11:44 HKT 2008
    从这里就可以看出,这是自己编译的kernel,而不是人家sdk里面自带的kernel-qemu了。

    android自带的sdk里面的kernel映像的version应该是:
    # cat version
    Linux version 2.6.23-gcc3bc3b4 (arve@arvelnx.corp.google.com) (gcc version 4.2.1) #3 Tue Oct 30 16:28:18 PDT 2007
    hoho, 这里不会把这个开发者的email暴露出来了吧。。。

    android的cpuinfo如下:
    Processor : ARM926EJ-S rev 5 (v5l)
    BogoMIPS : 313.75
    Features : swp half thumb fastmult vfp edsp java
    CPU implementer : 0x41
    CPU architecture: 5TEJ
    CPU variant : 0x0
    CPU part : 0x926
    CPU revision : 5
    Cache type : write-through
    Cache clean : not required
    Cache lockdown : not supported
    Cache format : Harvard
    I size : 4096
    I assoc : 4
    I line length : 32
    I sets : 32
    D size : 65536
    D assoc : 4
    D line length : 32
    D sets : 512

    Hardware : Goldfish
    Revision : 0000
    Serial : 0000000000000000
    不过挺奇怪的,google sdk自带的内核映像的BogoMIPS是3.18的,偶编译出来的是3.13的。
    展开全文
  • ANDROID内核编译和移植

    2011-11-03 14:07:16
    该文档详细介绍了如何从事android的底层开发和移植编译属于自己的android系统。是初学者不可或缺的文档。
  • Android内核编译与裁剪

    千次阅读 2013-03-07 18:47:11
    编译Android内核 创建一个目录android,用来存放我们即将要下载的android源码。  命令:$ mkdir android 进入上一步中建立好的目录android。  命令:$ cd android 选择一个内核版本,使用git下载...

    编译Android内核

    1. 创建一个目录android,用来存放我们即将要下载的android源码。

       命令:$ mkdir android

    1. 进入上一步中建立好的目录android。

       命令:$ cd android

    1. 选择一个内核版本,使用git下载android的源码。我选择了goldfish版本,该版本是适用于模拟器平台的内核版本。

       命令:

       $ git clone https://android.googlesource.com/kernel/goldfish.git 

       查看goldfish内核在git中的所有分支信息。

       命令:$ git branch -a

       选择适合的分支,下载goldfish真正的代码。

       命令:$ git branch android-goldfish-2.6.29

    1. 在编译android内核时,需要使用交叉编译器。选择工具链,使用git下载prebuilt工具链。

       命令:

       $ git clonehttps://android.googlesource.com/platform/prebuilt

    1. 将工具链的其bin路径添加到PATH中,确保工具链在环境变量中。

       命令:

       $ export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

      6.  设置其他环境变量。

       命令:

       $ export ARCH=arm

       $ export SUBARCH=arm

       $ export CROSS_COMPILE=arm-eabi-

    1. 进入内核的目录中。

       命令:$ cd goldfish

    1. 编译内核源码。首先,设定编译时的默认配置文件,如果不这么做,可能会出现“找不到配置文件”错误。

       命令:$ make goldfish_defconfig


    图1.执行make goldfish_defconfig命令

       执行完此条命令后,会在goldfish目录下生成一个.config文件。接着可直接编译。


    图2.执行完上条命令,生成.config文件

       命令:$ make

    图3.执行make命令

       执行完该命令后,会在“kernel/goldfish/arch/arm/boot/”目录下生成名为zImage的文件,大小为1.7M左右。

    图4.执行完make命令,生成zImage文件

    裁剪Android内核

       1.   为了使用makemenuconfig,需要安装ncurses。

        命令:$ sudo apt-get install ncurses-dev

       2.   进行内核配置,执行相应命令。

        命令:$ make menuconfig

       3.   进行内核裁剪。通过界面操作更改配置,以进行某些模块的裁剪。


    图5.通过界面操作配置进行裁剪

       4.   编译裁剪之后的内核。生成新的zImage文件,大小约为995K。

        命令:$ make


    图6.编译裁剪过的内核生成的zImage文件属性

     

       通过上述裁剪的过程,可以进行相关类似的操作,以裁剪不同的模块,满足不同的需要。编译裁剪之后的内核一般会发现其生成的zImage文件的大小会变小。

    展开全文
  • 手把手教你在linux下编译android内核并在模拟器中运行
  • 在Ubuntu 上搭建Android 内核编译环境, 具体步骤如下: ①准备系统环境, 需要的软件包列表flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev(optional), build-essential, zip, curl; ②安装JDK...

    在Ubuntu 上搭建Android 内核编译环境, 具体步骤如下:
    ①准备系统环境, 需要的软件包列表flex, bison,

    gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev(optional),
    build-essential, zip, curl;
    ②安装JDK 的1.5 版本;
    ③安装repo;
    ④在主文件目录建立一个bin 文件夹并加入到
    环境变量当中;
    ⑤下载repo 脚本,并将它的属性改为可执行curl
    http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo;
    ⑥创建一个保存源码的目录
    mkdir coredroid
    cd coredroid
    ⑦获取Android 内核代码:
    git clone git://android.git.kernel.org/kernel/common.git
    经过以上步骤,最新版本Android 内核就被下载
    到文件夹coredroid 当中。
    cd cordroid
    make xconfig(配置可按doucument 文件夹下的android.
    txt 说明配置)
    make
    编译完成后生成zImage 文件, 可用模拟器测试
    运行
    cd mydroid/out/cupcake/out/target/product/generic
    emulator -image system.img -data userdata.img -ramdisk
    ramdisk.img -kernel ~/coredroid/common /arch/arm/boot/zIma
    ge

    展开全文
  • 本文结合Android的开发文档以及本人的实践经验,简单介绍了Android内核编译过程,希望有助于对内核移植感兴趣的开发人员。 Android 作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。...
  • Android内核编译和裁剪

    千次阅读 2013-03-09 20:24:45
    一、建立Android 内核开发环境 1、工作环境及所需软件包 1)系统环境:Ubuntu12.04 2)交叉编译器:arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar ...
  • 第0步 编译准备 首先,介绍以下编译内核的环境。 主机:Ubuntu 11.04(32bit) 目标机:HTC Desire HD(G10) 安装系统HTC官方系统2.3(内核版本2.6.35) 需要下载文件:1> Android源码(仅适合HTC) ...
  • android内核编译过程

    千次阅读 2011-12-16 11:30:17
    Android 的核心 Makefile 为 build/core/main.mk ,其中编译内核的target为 INSTALLED_BOOTIMAGE_TARGET 即 out/target/product/dream-open/boot.img boot.img的生成在下面的Makefile中 build/core/Makefile...
  • android内核编译札记

    千次阅读 2011-05-18 14:35:00
    1.内核编译完成后可以生成 arch/arm/boot/compressed/vmlinux, arch/arm/boot/Image, arch/arm/boot/zImage其中vmlinux 是一个elf格式的文件,Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4...
  • Android内核编译、裁剪与运行

    千次阅读 2013-03-06 21:43:44
    上篇我对ARM版linux进行了编译与裁剪,下面将编译、裁剪Android内核,并在模拟器上运行编译后的系统。  1、建立Android开发环境:  在Oracle官网下载jdk-7u15-linux-i586.tar.gz,复制到/usr文件夹下并解压: ...
  • Androidandroid内核编译方法

    千次阅读 2008-06-07 11:13:00
    google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的一个大师级别的黑客Ben “Benno” Leslie,他曾经试图把目前...
  • android内核是在前段时间下载的,由于之前android的源码没有编译成功,所以只是拿来看代码。今天把android的源码编过了,开始到kernel了。在kernel目录查看版本情况: [zzz@localhost goldfish]$ git branch -a * ...
  • 四、编译内核 1. export刚才下载的交叉编译工具的目录到$PATH中: export PATH=$PATH:~/Android/AndroidKernel/arm-eabi-4.6/bin 2. 修改goldfish目录下Makefile文件: # ARCH ?= (SUBARCH) # CROSS_...
  • 但在编译安卓内核时遇到了困难,我按照官网步骤,下载和编译kernel,均无错误产生,手机Nexus5下载的适合它msm平台的内核.我配置好TARGET_PREBUILT_KERNEL变量后(查看确定配置正确),然后make bootimage,刷到真...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,418
精华内容 16,967
关键字:

android内核编译