Bear這次不介紹RPI的玩法,而是回到最基本的地方
也就是編譯RPI用的核心的教學
為什麼要編譯核心呢?原因有很多,但最重要的就是客製化了
也就是編譯RPI用的核心的教學
為什麼要編譯核心呢?原因有很多,但最重要的就是客製化了
即便如此,Bear還是得說,除非有絕對必要的需求
(如執行特定硬體驅動、只有新版本核心才能執行的硬體、刪除用不到的功能、real-time核心等等)
不然不需要特定自己編一個新的核心,功力不足編出來不一定比較好或穩定
不過,玩玩總可以吧(大誤
(如執行特定硬體驅動、只有新版本核心才能執行的硬體、刪除用不到的功能、real-time核心等等)
不然不需要特定自己編一個新的核心,功力不足編出來不一定比較好或穩定
不過,玩玩總可以吧(大誤
當然,編譯核心不是說編就可以編的
工欲善其事,必先利其器,準備好編譯工具吧
最單純的工具就是手上的Raspberry Pi了
可是,拿它來編核心可能會慢到想哭
這時候,嘿嘿,交叉編譯(cross-compile)的時候到了
工欲善其事,必先利其器,準備好編譯工具吧
最單純的工具就是手上的Raspberry Pi了
可是,拿它來編核心可能會慢到想哭
這時候,嘿嘿,交叉編譯(cross-compile)的時候到了
交叉編譯(Cross-Compile)是什麼?
簡單的說,就是用很快但是CPU架構不同(x86 Intel I7)去打造較慢CPU(ARM)專用的軟體
就是為了快速開發,縮減時間
特別在現在的嵌入式系統(Embedded System)開發時會使用
剩下就不多說,更詳細的定義及說明就請各位自行尋找
既然是不同架構當然有不同的編譯器
用x86的Linux要編ARM的Linux不是想像中的容易
所幸Raspberry Pi有提供現成的編譯器與函式庫
https://github.com/raspberrypi/tools
原始碼就在上面
大致了解後,接下來可以開始進行編譯了
簡單的說,就是用很快但是CPU架構不同(x86 Intel I7)去打造較慢CPU(ARM)專用的軟體
就是為了快速開發,縮減時間
特別在現在的嵌入式系統(Embedded System)開發時會使用
剩下就不多說,更詳細的定義及說明就請各位自行尋找
既然是不同架構當然有不同的編譯器
用x86的Linux要編ARM的Linux不是想像中的容易
所幸Raspberry Pi有提供現成的編譯器與函式庫
https://github.com/raspberrypi/tools
原始碼就在上面
大致了解後,接下來可以開始進行編譯了
可以的話,希望各位先有個Linux(最好是Ubuntu)
如果沒有的話也沒關係
Bear提供為了交叉編譯所創建的virtualbox ova檔
請服用
容量大了點(約3.5G),可能需要滿多的時間
好好去洗個澡、泡個咖啡、睡個覺都可以
如果沒有的話也沒關係
Bear提供為了交叉編譯所創建的virtualbox ova檔
請服用
容量大了點(約3.5G),可能需要滿多的時間
好好去洗個澡、泡個咖啡、睡個覺都可以
這邊先離題一下,教各位如何使用ova檔
其實很容易,但也先得安裝或更新至最新版的virtualbox
virtualbox是開放軟體,還是跨平台的,請放心使用
裝完後啟動如下
其實很容易,但也先得安裝或更新至最新版的virtualbox
virtualbox是開放軟體,還是跨平台的,請放心使用
裝完後啟動如下
選擇"檔案"==>"匯入應用裝置"
匯入完可以依照目前PC硬體等級調整虛擬機的配備
如果想趕快編好可以增加虛擬機的CPU核心數
啟動virtualbox吧
如果想趕快編好可以增加虛擬機的CPU核心數
啟動virtualbox吧
預設的使用者帳號是 pi,密碼也是 pi
沒有設定root的密碼,有需要的可以自行輸入
(下面指令藍色是虛擬機、綠色是RPI)
sudo passwd root
沒有設定root的密碼,有需要的可以自行輸入
(下面指令藍色是虛擬機、綠色是RPI)
sudo passwd root
首先安裝編譯用工具
(如果是用Bear提供的ova檔就不用做下面工作)
sudo apt-get update
sudo apt-get install git vim
sudo apt-get install gcc-arm-linux-gnueabi make ncurses-dev
下載交叉編譯器
cd
git clone git://github.com/raspberrypi/tools.git
工具放在home底下似乎怪怪的
Bear是把它移到/usr下,這邊就看人隨意發揮了
sudo mv ./tools /usr/
(如果是用Bear提供的ova檔就不用做下面工作)
sudo apt-get update
sudo apt-get install git vim
sudo apt-get install gcc-arm-linux-gnueabi make ncurses-dev
下載交叉編譯器
cd
git clone git://github.com/raspberrypi/tools.git
工具放在home底下似乎怪怪的
Bear是把它移到/usr下,這邊就看人隨意發揮了
sudo mv ./tools /usr/
.下載原始碼
(若是用Bear提供的ova檔,開始做事了)
git clone https://github.com/raspberrypi/linux.git
cd linux
git checkout rpi-3.6.y
這邊的rpi-3.6.y是Bear的RPI使用核心版本
如果有興趣換版本可以自行修改
其中master是3.2.0
Bear建議各位選擇目前自己RPI使用的核心來編譯
(可以用 uname -a 來得知)
畢竟新版本的核心必然會增加新功能
增加的新功能除非特別去注意,否則根本不知道如何去配置
反而編出更糟的核心QAQ
(若是用Bear提供的ova檔,開始做事了)
git clone https://github.com/raspberrypi/linux.git
cd linux
git checkout rpi-3.6.y
這邊的rpi-3.6.y是Bear的RPI使用核心版本
如果有興趣換版本可以自行修改
其中master是3.2.0
Bear建議各位選擇目前自己RPI使用的核心來編譯
(可以用 uname -a 來得知)
畢竟新版本的核心必然會增加新功能
增加的新功能除非特別去注意,否則根本不知道如何去配置
反而編出更糟的核心QAQ
編譯前首要取得RPI用的核心編譯配置檔
請在各位的RPI上輸入
(OS必須為Raspbian,其他系統Bear沒用過,不敢保證)
zcat /proc/config.gz > .config
得想辦法從PI上取出來(用samba、FTP、SFTP等方法)
再想辦法放進虛擬機ubuntu上(同上,或是用網路下載)
如果嫌麻煩,或事先練習看看,可以用Bear提供,Raspbian 3.6.11+的核心配置檔
在虛擬機上輸入
cd
wget https://www.dropbox.com/s/kux3co7it7gkm4j/config
mv ./config ./linux/.config
取得配置檔後進行配置檔設定
主要針對原核心沒有的新功能做配置
cd ./linux
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- oldconfig
千萬注意
CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
必須是之前下載tools的絕對路徑
配置完開始編譯
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -j1
其中j1是指用1個CPU核心進行編譯,如果有多核心的話,可以是增加其值
核心模組編譯與安裝
事實上,不是核心的所有功能都需要包含至核心裡面
部分少用或是不需要核心直接處理的功能都可以模組化(編譯時看到的[M]就是指模組化)
新增一個放置模組化的資料夾
mkdir ./mod_install
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/pi/linux_rt/mod_install/ modules
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/pi/linux_rt/mod_install/ modules_install
到這邊總算編好Raspbian官方核心了
接下來取出核心與模組化的檔案
cp ./arch/arm/boot/zImage ~/
cp -r ./mod_install/lib/modules/3.6.11+/ ~/
可以在/home/pi看到3.6.11+跟zImage
把3.6.11+打包壓縮吧
tar -zcvf ./3.6.11+.tar.gz ./3.6.11+/
想辦法把它們(zImage、3.6.11+.tar.gz )從虛擬機弄出來吧
弄出來後,放到RPI上面吧
zImage放到/boot/
並更名為kernel-3.6.11+.img
mv /boot/zImage /boot/kernel-3.6.11+.img
而壓縮檔3.6.11+.tar.gz則解壓縮後放到/lib/modules/
編輯/boot/config.txt
vim /boot/config.txt
新增
kernel=kernel-3.6.11+.img
Esc :wq!存檔,重開機試試是否可以使用新核心,不行就會開不了機
如果真的發生不能開機的話,取下SD卡,放進隨意其他電腦或系統
windows話,只會有一個磁區顯示,那就是/boot/
修改裡面的config.txt檔
把kernel=kernel-3.6.11+.img刪除,存檔就回復原本的狀態了
呼,part 2將會介紹real-time patch跟BFS、BFQ patch的編譯過程!
有興趣的朋友趕快看看吧!
參考來源:http://elinux.org/RPi_Kernel_Compilation
喜歡這篇文章嗎? 趕快加入Takobear粉絲團吧!
請在各位的RPI上輸入
(OS必須為Raspbian,其他系統Bear沒用過,不敢保證)
zcat /proc/config.gz > .config
得想辦法從PI上取出來(用samba、FTP、SFTP等方法)
再想辦法放進虛擬機ubuntu上(同上,或是用網路下載)
如果嫌麻煩,或事先練習看看,可以用Bear提供,Raspbian 3.6.11+的核心配置檔
在虛擬機上輸入
cd
wget https://www.dropbox.com/s/kux3co7it7gkm4j/config
mv ./config ./linux/.config
取得配置檔後進行配置檔設定
主要針對原核心沒有的新功能做配置
cd ./linux
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- oldconfig
千萬注意
CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-
必須是之前下載tools的絕對路徑
配置完開始編譯
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -j1
其中j1是指用1個CPU核心進行編譯,如果有多核心的話,可以是增加其值
核心模組編譯與安裝
事實上,不是核心的所有功能都需要包含至核心裡面
部分少用或是不需要核心直接處理的功能都可以模組化(編譯時看到的[M]就是指模組化)
新增一個放置模組化的資料夾
mkdir ./mod_install
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/pi/linux_rt/mod_install/ modules
make ARCH=arm CROSS_COMPILE=/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/pi/linux_rt/mod_install/ modules_install
到這邊總算編好Raspbian官方核心了
接下來取出核心與模組化的檔案
cp ./arch/arm/boot/zImage ~/
cp -r ./mod_install/lib/modules/3.6.11+/ ~/
可以在/home/pi看到3.6.11+跟zImage
把3.6.11+打包壓縮吧
tar -zcvf ./3.6.11+.tar.gz ./3.6.11+/
想辦法把它們(zImage、3.6.11+.tar.gz )從虛擬機弄出來吧
弄出來後,放到RPI上面吧
zImage放到/boot/
並更名為kernel-3.6.11+.img
mv /boot/zImage /boot/kernel-3.6.11+.img
而壓縮檔3.6.11+.tar.gz則解壓縮後放到/lib/modules/
編輯/boot/config.txt
vim /boot/config.txt
新增
kernel=kernel-3.6.11+.img
Esc :wq!存檔,重開機試試是否可以使用新核心,不行就會開不了機
如果真的發生不能開機的話,取下SD卡,放進隨意其他電腦或系統
windows話,只會有一個磁區顯示,那就是/boot/
修改裡面的config.txt檔
把kernel=kernel-3.6.11+.img刪除,存檔就回復原本的狀態了
呼,part 2將會介紹real-time patch跟BFS、BFQ patch的編譯過程!
有興趣的朋友趕快看看吧!
參考來源:http://elinux.org/RPi_Kernel_Compilation
喜歡這篇文章嗎? 趕快加入Takobear粉絲團吧!