HaiPeng([email protected])
最近的實驗需要在移動平台上來做,通過調研發現大多數開發闆不能進行DVFS,手機和平闆又不能随心所欲的修改核心,好在米國的開發闆PandaBoard是可以調頻的開發闆,拿到手的是OMAP4430 雙核1G的處理器,下面就簡單介紹一下,如何在這個開發闆上移植ubuntu和android。
1. 移植ubuntu到pandaboard
Ubuntu的移植比較簡單,先将ubuntu安裝到SD卡中,然後在編譯相關核心,替換掉SD卡中的鏡像檔案以及驅動就行了,跟在x86上編譯核心的流程類似,下面簡述一下。
安裝ubuntu到pandaboard
1. 在http://omappedia.org/wiki/Prebuilt_ubuntu_binaries選擇自己需要的版本,下載下傳二進制鏡像檔案,如11.04-desktop;
2. 使用gunzip解壓鏡像,如gunzip ubuntu-11.04-preinstalled-desktop-armhf+omap4.img.gz;
3. 插入sd卡,要求sd卡是沒有任何檔案系統的(将sd卡插入linux主機,沒有隻有/dev/sdb,沒有/devsdb1)。可以使用linux下的disk utility工具删除sd卡上的檔案系統;
4. 使用dd指令,将ubuntu鏡像拷貝到sd卡中,如ddbs=4M if=ubuntu-11.04-preinstalled-desktop-armhf+omap4.img of=/dev/sdb;
5. 拷貝完成後,将sd卡插入pandaboard,啟動,便開始将ubuntu裝入sd卡中;
6. 裝入完成後,sd卡被分為兩個分區:boot分區與檔案系統分區。
參考:https://wiki.ubuntu.com/ARM/OmapDesktopInstall
接下來介紹,如何運作自己編譯的核心
1. 下載下傳專門為omap準備的ubuntu的核心源代碼(與上面的比對或者是核心版本高于上面的,就像在ubuntu 11.04編譯高版本的核心一樣):
網址:https://launchpad.net/ubuntu/oneiric/+source/linux-ti-omap4/;
2. 安裝交叉編譯工具:
apt-get install gcc-arm-linux-gnueabi
apt-get install uboot-mkimage
3. 修改Makefile
ARCH=arm
CROSS_COMPILE=arm-linux-gnueabi-
4. 使用預設的config檔案:
cp ./arch/arm/configs/omap4_defconfig.config
5. 自行配置:
make menuconfig
6. 編譯核心和子產品
make uImage –j 4
make modules
7. 挂載sd卡的boot分區,以及rootfs分區
mount /dev/sdb1 /media/boot/
mount /dev/sdb2 /media/rootfs/
8. 拷貝uImage到挂載點(先将之前的uImage備份一下)
mv /media/boot/uImage/media/boot/uImage.bak
cp ./arch/arm/boot/uImage/media/boot/
9. 安裝子產品到sd卡中
export INSTALL_MOD_PATH=/media/rootfs
cd ../ubuntu-natty
make modules_install
10. 解除安裝/dev/sdb1,并将sd卡插入pandaboard中。
2. 移植android到pandaboard
android到pandaboard的移植麻煩一點,從網上下載下傳的已經編譯好的鏡像檔案燒寫到SD卡上,發現進入android後很卡,根本沒法使用,還是一步步從android的源碼開始編譯吧。
1. 配置編譯android源碼的主機環境
android必須在64位的機器上編譯,我使用的作業系統是ubuntu 11.04。然後根據http://source.android.com/source/initializing.html安裝必要的軟體包:
sudo apt-getinstall git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-devlib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-devlib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodospython-markdown \
libxml2-utils xsltproc
然後配置usb的通路控制,不然ubuntu無法識别pandaboard開發闆,我使用的是root使用者是以username被替換成了root:
# adbprotocol on passion (Nexus One)
SUBSYSTEM=="usb",ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12",MODE="0600", OWNER="<root>"
# fastbootprotocol on passion (Nexus One)
SUBSYSTEM=="usb",ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff",MODE="0600", OWNER="<root>"
….
Jdk的安裝參見http://hi.baidu.com/designhouse/item/0dbece7c4f6af0376e29f6c1。
2. 準備一塊大的空閑分區
要求必須大于30G(僅僅同步一個分支),100G是最好的(同步整個android源碼),不然會報磁盤空間不足的錯誤。
3. 下載下傳android源碼
這個工作最好是在睡覺的時候下載下傳,因為實在是太慢了。這個可以參見http://source.android.com/source/downloading.html,該網頁預設源碼代碼放在根分區的WORKING_DIRECTORY,自己根據自己的實際情況修改一下就行。我的磁盤隻有30G的空餘,是以隻初始化同步一個分支,我使用的是最新的android 4.04(repo init -u https://android.googlesource.com/platform/manifest-b android-4.0.4_r1)
4. 下載下傳pandaboard對應的驅動
網址:https://developers.google.com/android/nexus/drivers?hl=zh-CN,下載下傳完解壓,然後執行解壓後的腳本,最後将生成的verdor目錄拷貝到android源代碼的根目錄下面,預設就是那個WORKING_DIRECTORY目錄下面。
5. 編譯android核心源碼
在android源碼根目錄下面執行
sourcebuild/envsetup.sh
lunch full_panda-eng
make –j 4
這期間有可能還會出錯,google吧!
6. 編譯完成後,将相關檔案燒寫到sd卡中
這個可以參見 http://fosiao.com/content/build-android-4-pandaboard。
其他注意事項:
1. 錯誤網上一般都能找到答案,有一個是需要換一下HDMI的插口的(pandaboard有兩個HDMI接口,我用的是遠離網卡的那個,但是ubuntu使用離網卡近的那個);
2. 通過pandaboard的序列槽來使用linux指令是沒有root權限的,要root使用權限需要用adb shell。adb shell在第6步少寫sd卡的時候已經用過了,使用root,先adb root,然後adb shell就行了;
3. 我使用android已經編譯好的鏡像啟動pandaboard花了一天時間(實驗證明發現隻有http://releases.linaro.org/12.01/android/leb-panda/用起來還行,而且是采用有三個檔案的那種方法,單純的鏡像也是不行的),下載下傳android源碼花了一天時間,編譯android源碼花了一天時間,總共花了3天時間,希望各位能比我快的多;
4. 要使用自己編譯的核心,參加http://blog.chinaunix.net/uid-495571-id-3071261.html,目前個人還用不着,等用找了在将這一塊補充上;
5. 網上已經有人用pandaboard來玩憤怒的小鳥了,支援重力感應,牛人真多啊http://v.ku6.com/show/RtbrEkBr-85lyyjp.html。