在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模組沒有安裝好。這個到時候再解決。