因此秉著降低這個門檻的想法,讓初學者能夠順利地先從編譯 Hello.ko 開始一步步建立信心開始。所以我打包了一份 Cross-Compile 好的 Raspberry Pi 官方 Kernel Source Code,放在Google 上面讓人下載,大小大約200MB左右 。網址如下:
https://drive.google.com/a/ittraining.com.tw/file/d/0B4hTYt5ZpXOZVHRDeVpwSnZ1dU0/view
相關文章 編譯Kernel 4.0.y with device tree
下載到 Pi 之後,找個風水好的目錄解壓縮,接下來的步驟就只剩下安裝核心和 module的動作要做了。
要注意的一件事情是,這份 kernel source code 的版本就如同檔名上所示,是3.12.36,然後裡面的核心是給 Pi 用的,不能給最新的 Pi2 用。
(update: 2015/05/07: 增加 Pi2 版本的連結(3.18.12-v7+):
而compile這份 kernel source的時候,用的是 cross-compile gcc 版本是 4.8.3。所以記得先在你的 Pi 系統裡面安裝好 gcc-4.8,然後設定一下,讓系統預設的gcc版本為4.8:
sudo apt-get install gcc-4.8
##安裝完之後設定gcc-4.8為預設gcc
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
當然,安裝核心檔到 /boot/ 底下的時候,記得備份一下你原本的系統,把microSD整張備份下來是最好。至少把原本的 /boot/kernel.img 這個檔備份一下,方便之後如果有需要用的時候。一般來說,我都直接改名字...
sudo mv /boot/kernel.img /boot/kernel.img.backup
1. 安裝核心檔:
編譯好的 source code 目錄底下的 /arch/arm/boot/ 裡面有一個叫 zImage的檔,那個就是編譯好的 kernel image 檔。把它copy到 /boot/ 底下順便改名為 kernel.img
cp <source code 目錄>/arch/arm/boot/zImage /boot/kernel.img
2. 安裝module:
我們先在 source code 目錄的上一層建一個moudles目錄,然後再將已編譯好的一些 kernel moudles 檔安裝在這個目錄裡面。
cd <source code 目錄>
cd ..
mkdir modules
cd <source code 目錄>
make modules_install INSTALL_MOD_PATH=../modules/
之後我們再把這些安裝好的kernel modules 檔copy到 系統資料夾 /lib/ 之中:
cd <source code 目錄>
cd ../modules/
sudo cp -Rf ./firmware /lib/
sudo cp -Rf ./modules /lib/
之後重新開機,如果可以順利開機的話應該就沒什麼問題了。
可以用 uname -a 或是 cat /proc/version 確認一下版本資訊。
要注意的是要到最後還要到source code的目錄底下執行 make modules_prepare 指令才能開始編譯自己寫的那些hello world的 linux kernel module....
cd <source code 目錄>
make modules_prepare
如果執行這行指令出現下面這個錯誤訊息的話,通常是目前你的 gcc 版本不夠新。
#error Your compiler is too buggy; it is known to miscompile kernels
目前有遇到的狀況是...kernel 是用gcc4.8.3編的,但是 Pi 板 Linux 系統上的是 gcc-4.8.2....。
跟據 https://github.com/notro/rpi-source/wiki ,解決方式就是在你的source list 裡面加一個新的來源站,然後去抓新版的gcc,做法如下。
先到目錄 /etc/apt/sources.list.d/ 底下新增檔案 jessie.list :
sudo nano /etc/apt/sources.list.d/jessie.list
然後裡面加一行內容:
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
然後
然後更新套件,並案裝新版gcc
sudo apt-get udpate
sudo apt-get install -y gcc-4.8 g++-4.8
當然如果同時有 gcc-4.8 gcc-4.6 版的話要設4.8版的為預設值。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
沒有留言 :
張貼留言