在ubuntu上编译树莓派的kernel.img

网上真是坑B多。都没试过 一顿照抄。真是服


我的树莓派是树莓派B

ubuntu是14.04 x64 4G RAM 8core

1下载kernel源码

git clone https://github.com/raspberrypi/linux.git

2下载交叉编译工具

git clone https://github.com/raspberrypi/tools




我下载的内核版本是 rpi-4.1.y.tar.gz


tar -xf rpi-4.1.y.tar.gz
 cd linux-rpi-4.1.y/
make mrproper 第一次不需要清理。但是每次重新编译以前最好先执行这个命令清理一下


可能缺少的一些库 安装一下
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5


内核需要的配置文件。如果配置不当。编译过程中各种问题。
我们直接从运行的树莓派中获取这个config文件
拷贝树莓派 /proc/config.gz 到linux-rpi-4.1.y目录下
如果树莓派中/proc目录里面没有config.gz
那么先运行 sudo modprobe configs
这样/proc/config.gz就存在了
解压到.config里面
zcat config.gz >.config
配置编译的变量 主要是编译器路径。
也就是前面https://github.com/raspberrypi/tools下载的目录里面的东西
ARCH=arm
export ARCH
CCPREFIX=/home/XXXX/RPi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-
export CCPREFIX


开始编译 j8根据你的核心来。
CROSS_COMPILE=${CCPREFIX} make -j8


编译完毕后会在arch/arm/boot目录下生成zImage这些
这个还不是kernel.img
还需要tools/mkimage目录里面的mkknlimg (需要perl)
进入这个目录执行
./mkknlimg /home/xxxxxx/RPi/rpikernel/linux-rpi-4.1.y/arch/arm/boot/zImage kernel_new.img
会在当前目录生成kernel_new.img
这个是就是可以放到SD卡里面 去的kernelimg了


为了更好研究 我把SD fat分区里面不要的都删除了
只留下了
bcm2708-rpi-b.dtb(这个是根据你的板子要留下来的)
bootcode.bin
cmdline.txt
config.txt
kernel.img(原来的)
start.elf




============
为了让树莓派加载我们的kernel_new.img
拷贝kernel_new.img到fat分区
修改config.txt
在最后面添加一行
kernel=kernel_new.img
然后 启动 就是我们的kernel了


原来的kernel.img就做个备份吧

但是我编译出来 无法识别WIFI。应该是modules模块没有安装好。这个到时候再解决。


你可能感兴趣的:(在ubuntu上编译树莓派的kernel.img)