那么请跟着我的脚步上路吧!
一、Linux主机安装内核开发包
Linux内核编译需要主机安装一些开发包,具体的开发工具有那些可以通过包名自行补脑。安装过程中需要留意开发包是否都有安装成功,若有开发包安装失败可以单独再重新安装。
代码: 全选
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
代码: 全选
sudo apt-get install libc6:i386
二、安装交叉编译工具链
纯Linux开发的朋友可以通过Github单独下载交叉编译工具链,内核编译用到arm-eabi-4.6交叉编译工具链,下载链接为:
http://pan.baidu.com/s/1sl7v1EX
下载好放到指定目录~/UbuntuDev/toolchain后解压:
代码: 全选
mkdir ~/UbuntuDev/toolchain
cd ~/UbuntuDev/toolchain
tar -xvf arm-eabi-4.6.tar.gz
如果是android开发者,可以直接按android SDK编译的方法编译SDK里的内核,android SDK里自带交叉编译工具链等。
三、下载Firefly Linux内核源代码
从Firefly github仓库下载kernel源代码:
代码: 全选
cd ~/UbuntuDev
git clone https://github.com/T-Firefly/firefly-3.14-kernel
四、编译内核
进入内核源码目录:
代码: 全选
cd ~/UbuntuDev/firefly-3.14-kernel/
代码: 全选
export ARCH=arm
代码: 全选
export CROSS_COMPILE=./../toolchain/arm-eabi-4.6/bin/arm-eabi-
代码: 全选
make firefly-rk3288_defconfig
代码: 全选
make -j4 zImage
编译DTB文件。dtb是.dts被DTC编译后的二进制格式的Device Tree描述,可由Linux内核解析。通常在我们为电路板制作NAND、SD启动image时,会为.dtb文件单独留下一个很小的区域以存放之,之后bootloader在引导kernel的过程中,会先读取该.dtb到内存。
代码: 全选
make firefly-rk3288.dtb
代码: 全选
cat arch/arm/boot/zImage arch/arm/boot/dts/firefly-rk3288.dtb > zImage-dtb
mkkrnlimg -a zImage-dtb kernel.img
代码: 全选
make -j8 firefly-rk3288.img
请不要问题我为什么要介绍这种编译方式,因为我是活雷锋。
编译并安装模块,先在kernel目录创建modules_install目录,用于存放编译好的内核模块。
代码: 全选
mkdir modules_install
make INSTALL_MOD_PATH=./modules_install modules_install