编译linux kernel :

首先,要编译手机平台上的内核镜像,需要交叉编译工具,而一般主流的手机上的交叉编译环境都很完备了,只要把它纳入PATH目录,基本都可以make成功。

假设交叉编译环境工具路径:~/ANDROID_CROSS_TOOL/

把交叉编译环境的bin目录加入/etc/profile

PATH=~/ANDROID_CROSS_TOOL/bin:PATH

使得开机时自动运行。

把交叉编译环境加入PATH环境变量以后,就可以make。

make成功以后,在kernel/kernel/arch/arm/boot/目录下会生成一个zImage的镜像文件,这个就是编译内核生成的内核镜像。

然后,通过./out/host/linux-x86/bin/目录下的mkbootimg命令制作boot镜像:

$./out/host/linux-x86/bin/mkbootimg --kernel
kernel/arch/arm/boot/zImage --ramdisk
out/target/product/kt501/ramdisk.img --output
out/target/product/kt501/boot.img

可见在这里,通过mkbooting命令把kernel和ramdisk打包成了一个boot镜像。

有了boot.img镜像,就可以在手机中烧录编译好的内核了。

烧录手机,有两种烧录方式:

1.卡烧

2.机烧

1.卡烧

卡烧相对容易,首先要熟悉一下手机烧录SD卡和普通SD卡的区别。烧录所用的SD卡是有一个标志文件,文件名为:“auto_flag.txt”(也许不同的手机型号标志文件不同),而且我们可以打开这个文件,其实里面是空的,说明,这个文件只起标志作用。当手机检测到了这个标志文件,就开检索需要烧录的系统文件,因为我只是重新编译了kernel,因此只需要重新烧录kernel。这时,把当时编译内核时打包生成的boot.img烧录到SD卡上。然后把SD卡装到手机上,只要开机,因为该SD卡含有“auto_flag.txt”标志文件,所以检测需要烧录的系统镜像,接着把我们自己编译的boot.img烧录到手机系统中。

2.机烧

机烧相对麻烦,而且不能被打断,曾经有一个工程师在烧录手机的时候碰了以下连接线,于是,手机的FLASH被洗空,然后就怎么都烧不上去了。

机烧的话,先进入手机的fast_boot模式,用USB连接手机和电脑,执行烧录脚本burn_linux.sh。下面是butn_linux脚本的内容:

#!/bin/bash
TARGET_PATH=.
echo "$TARGET_PATH"
./fastboot devices
./fastboot flash xloader $TARGET_PATH/MLO
./fastboot flash bootloader $TARGET_PATH/u-boot.bin
./fastboot flash environment $TARGET_PATH/u-boot.env
./fastboot flash boot $TARGET_PATH/boot.img
./fastboot flash logo $TARGET_PATH/logo.bmp
./fastboot flash userdata $TARGET_PATH/userdata.img
./fastboot erase cache
./fastboot flash system $TARGET_PATH/system.img
./fastboot flash recovery $TARGET_PATH/recovery.img
./fastboot flash auto_install
$TARGET_PATH/auto_install.iso
./fastboot reboot

可见,它就是把编译好的kernel,system等等用fastboot命令烧录到手机上。所以像我这样,只是烧录内核的话,就只要执行:

$./fastboot flash boot $TARGET_PATH/boot.img

就可以了,可以节省时间。

最后提醒,在烧录过程中,尽量不要打断它。