build your own kernel Image for Nexus10

         公司买了一台Nexus10,上面搭在最新的Android4.2系统。

         由于自android4.1以后,在现实模块有相当大的改进,android4.1增加了vsync同步,使得显示更加顺滑流畅,android4.2增加了external display,使得对HDMI的支持更加完善。于是想以Nexus10为载体,研究下对应的内核在这方面的改动。

         android不愧是开放式系统,拿到一台标准的android设备,可以在android官网下载对应的源码,然后自己编译并烧写到设备中,让设备运行自己编译的代码,对于linux hacker来说,这是一个十分有趣的事情。

         于是想自己编译一份代码在Nexus10上跑起来,其实公司其他部门已经有同事做到了,不过和这位同事不熟,还是自己来研究好了,通过google,折腾了一天,终于成功了,步骤如下:

        (1)下载Nexus10内核源码

             git clone https://android.googlesource.com/kernel/exynos.git

        (2)编译

             make ARCH=arm manta_defconfig                               //manta是Nexus10的开发代号

             make ARCH=arm CROSS_COMPILE=/usr/local/arm/toolchain/arm-eabi-4.6/bin/arm-eabi-

            最终编译会生成arch/arm/boot/zImage,就是运行android系统所需要的内核镜像。

            这里需要注意的是,cross tool需要用4.6.x的版本,低版本的编译不过。

       (3) 生成包含内核镜像的boot.img

            标准的android ROM内核镜像是和android编译生成的ramdisk.img一起打包在boot.img 里面在。所以需要用自己编译生成的zImage重新生成boot.img。打包过程如下:

          (a)先从google官网下载Nexus10的最新固件,取得里面的boot.img ,并从boot.img 里面提取ramdisk.img

                  ./getramdisk.py boot.img                 //getramdisk.py是一个脚本,在xda论坛上找的

          (b)用自己编译的zImage和上一步提取的ramdisk.img 重新打包,生成新的boot.img

                    ./mkbootimg --kernel zImage --ramdisk ramdisk.img -o new-boot.img  //mkbootimg 也是在xda论坛上找的工具

     (4)把新的new-boot.img 下载到Nexus10的内存中运行

               (a)用usb连接Nexus10和PC,确保adb功能可用,用adb命令是Nexus10进入fastboot模式

                      adb reboot bootloader

                (b)下载new-boot.img 到Nexus10的内存中运行

                     fastboot boot new-boot.img

                成功后机器会自动重启,这时候系统跑的就是自己编译的内核,可以通过cat proc/version命令验证。

需要注意的是,这种方式,只是把boot.img下载到机器的内存里面运行,flash中固化的还是机器自带的boot.img,如果希望把自己的boot.img固化到系统中,命令如下

                fastboot flash boot new-boot.img

你可能感兴趣的:(build your own kernel Image for Nexus10)