最近的实验需要在移动平台上来做,通过调研发现大多数开发板不能进行DVFS,手机和平板又不能随心所欲的修改内核,好在米国的开发板PandaBoard是可以调频的开发板,拿到手的是OMAP4430 双核1G的处理器,下面就简单介绍一下,如何在这个开发板上移植ubuntu和android。
1. 移植ubuntu到pandaboard
Ubuntu的移植比较简单,先将ubuntu安装到SD卡中,然后在编译相关内核,替换掉SD卡中的镜像文件以及驱动就行了,跟在x86上编译内核的流程类似,下面简述一下。
安装ubuntu到pandaboard
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分区与文件系统分区。
接下来介绍,如何运行自己编译的内核
1. 下载专门为omap准备的ubuntu的内核源代码(与上面的匹配或者是内核版本高于上面的,就像在ubuntu 11.04编译高版本的内核一样):
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=""
# fastbootprotocol on passion (Nexus One)
SUBSYSTEM=="usb",ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff",MODE="0600", OWNER=""
….
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天时间,希望各位能比我快的多;
5. 网上已经有人用pandaboard来玩愤怒的小鸟了,支持重力感应,牛人真多啊http://v.ku6.com/show/RtbrEkBr-85lyyjp.html。