现在的位置: 首页 > 综合 > 正文

Beagleboard上运行ARM/MeeGo的整理

2013年02月03日 ⁄ 综合 ⁄ 共 10097字 ⁄ 字号 评论关闭

 

简介

测试版本
      创建镜像的过程已经在Ubuntu 10.04测试过, 其他Linux版本可能会有些操作上的不同.有些人在Ubuntu 9.04和Ubuntu 9.10测试但都失败了,所以如果你想最大可能的成功,奉劝大家还是使用Ubuntu 10.04,当然如果你已经在其他Ubuntu版本或linux发行版本上成功完成了这些工作,请将你觉得可能帮助其他人的信息添加到本页中。

  • Debian Lenny (你将需要通过Sid安装和编译一些软件包.)

      这个工作正在进行中. 如果你觉得这个介绍不完整或者缺少一些重要的内容, 那么你可以自由的编辑这个页面或者在irc.freenode.net网站的#meego-arm交流组里寻求一些帮助.
已完成与将要做的内容介绍
      请记住一点MeeGo是一项正在进行中的工作. 一些已经完成的事情有可能被重新推翻,也有可能就算你严格按照这个介绍来执行每步操作也无法完成安装. 每件事情都在进行中,TI演示可能是比较稳定的了,但是MeeGo UI自身却仍在不时地被推倒重建.
进行中:

  • 系统引导进入命令提示界面
  • X服务启动
  • 在xterm/twm中使用鼠标,键盘和触屏工作
  • SGX/GLES 加载
  • TI 3D演示应用运行
  • QT演示应用运行
  • MeeGo手持设备UX工作在带触屏的设备上
  • MeeGo车载UX工作在带鼠标或者触屏的设备上
  • GUI稳定运行
  • 音频播放
  • 已知情况: 只能在Ubuntu 10.04上工作

将要做的:

  • 不带触屏的情况下,在MeeGo HX上使鼠标的光标可见.
  • 例如通过减少内存使用等方式提高整体的使用性能
  • 确认是否可在其他发行版本上工作

支持的Beagleboard版本
      RevARevB板子只有128MB RAM,这不足以运行手持设备UX, 算上swap能够引导UX,但也只是仅仅能用. 车载系统UX大概可以运行的好一些,因为看起来它需要的内存更少一些测试的板子的版本: B7
      在这个阶段RevC板子是最好的选择.它的硬件能完全被linux内核支持并且255M RAM能够流畅的运行UX. 测试板子版本: C4
      XM RevA引导进入手持设备UX,运行速度和反应都很快. 目前的内核不能完全支持这个板子(CPU只能运行在大约500Mhz,音频设备不能正常工作等等). 测试板子版本: XM-A2

预备知识

      这个文档假设你之前已经使用过beagleboard这个板子并且知道如何去格式化内存卡来引导系统之类的.
如果你是使用Beagleboard的新手,你想学习一些基础知识,请查看一下资源:

Beagleboard安装文件一般由以下三部分组成:

  • 一个rootfs镜像或者目录树
  • 一个内核镜像 (uImage)
  • 一系列内核模块

      rootfs和内核模块放在内存卡的第二个分区中,同时在MeeGo中它将是新的ext3格式的. 内核放在第一个分区中,这个分区为FAT格式,并且在分区中将包含MLO和u-boot.bin.
      请使用至少2GB的内存卡来进行以下的实验.引导分区大概只要几M(10MB就已经足够).剩下的部分请格式化为ext3格式.
      如果你更喜欢通过nand引导xloaderu-boot的话,你可能还需要更新他们.一个很便捷的进行这个操作的方法请参见这里.
准备SGX/GLES库
      beagleboard使用SGX驱动来进行3D图形加速. 脚本文件:Create sgx package.sh (下载后使用小写重命名)能被用来卸载和整合这些驱动(原始版本下载链接这里).
      自从SGX驱动被TI部分闭源之后,你就不得不注册和下载Graphics_SDK_setuplinux_4_00_00_01.bin这个文件,具体下载页面TI's GFX SDK download page.
      将两个文件放到同一个目录下,然后运行这个脚本:

  1. ./create_sgx_package.sh

这个脚本将提取出文件,你只要通过它下载和编译出合适的包. 其中一个叫GFX_4_00_00_01_libs.tar.gz的文件,在你编译rootfs的时候需要用到它.
      另外一个通过脚本生成的文件叫做GFX_Linux_SDK.tar.gz. 这个文件中包含各种各样的示例代码和3D演示程序,你可以在这之后看一看.
编译rootfs
      rootfs是通过MeeGo ARM软件源中的可用二进制包整合而成的. 用来整合rootfs的工具叫做(MeeGo image creator).
      根据Image_Creation#From_Development_Git_Tree的介绍使用git安装最新版本,旧版本有可能不能使用.
      当使用ubuntu 10.04时,你需要使用qemu-kvm-extras-static包安装qemu. 如果你已经安装了一个scratchbox程序, 它会和qemu-kvm-extras-static产生冲突. 在安装完那个包之后,scratchbox arm将再也无法使用. 但是只要你移除这个包同时重启scratchbox的服务,scratchbox就会又恢复正常的.
      kickstart文件我们将使用的是经过微调的n900版本.n900版本下载地址 这里.
      下载文件Handset-armv7l-beagle.ks生成手持设备UX或者下载文件Ivi-armv7l-beagle.ks 生成车载系统UX. 不幸的是这个wiki会将一个文件名的首字母转换成大写. 所以你不得不将文件 Handset-armv7l-beagle.ks(或者Ivi-armv7l-beagle.ks)重命名为 handset-armv7l-beagle.ks(或者ivi-armv7l-beagle.ks). 再次确认下之前生成的GFX_4_00_00_01_libs.tar.gz是否在当前的目录下,kickstart文件将会用它来为镜像添加3D加速的支持.
      然后输入以下命令(如果你用的是车载系统的kickstart,请将手持设备的内容替换为车载系统的)

  1. sudo mic-image-creator --run-mode=0 --cache=mycachedir --format=loop --arch=armv7l --release=daily  --compress-disk-image=none --config=handset-armv7l-beagle.ks

以上命令是用来在你的当前目录下编译生成rootfs镜像文件.这将会花费你很长的时间同时还会下载几百M的东西到你的硬盘上.
然后, 整个文件系统将被做成如下的一个系统镜像

  1. ./daily/handset/images/meego-handset-armv7l-beagle/meego-handset-armv7l-beagle-daily.img

生成的镜像可以经由回送地址(loopback)被加载,然后整个内容会被拷贝到一张SD卡上.

  1. mkdir ./imagesudo mount -o loop ./daily/handset/images/meego-handset-armv7l-beagle/meego-handset-armv7l-beagle-daily.img ./imagesudo rsync -aHx --progress --delete ./image/* /media/<your cards root partition>

这个操作将会把所有东西拷贝到卡上,而不仅仅是内核和内核模块.
编译内核和内核模块
      编译内核和内核模块,你需要为ARM平台进行交叉编译. 通过安装 Codesourcery ARM toolchain你将获得一个最近的ARM编译工具链.
下载那个包,解压到任意一个地方,接着将这个解压的路径加到系统的PATH环境变量中然后编译内核.

下载和编译内核

      一旦编译器和连接器被下载,你就可以开始下载和编译内核了.一个简单的获取内核的途径是使用Beagleboard kernel scripts. 确认你的系统中安装有bazaar源码管理工具(bzr),然后输入以下命令:

  1. bzr branch lp:~beagleboard-kernel/+junk/2.6-stable

对于beagleboard XM来说,你需要一个最新的开发内核.使用下列的命令来下载编译这个内核的工具:

  1. bzr branch lp:~beagleboard-kernel/+junk/2.6.35-devel

在结果目录中拷贝system.sh文件.仿照system.sh调整指定编译器的那一行.如果你的用户名是"test"并且你使用的是codesourcery编译器,那么这行命令大概看起来就像这样:

  1. CC=/home/test/arm-2010q1/bin/arm-none-linux-gnueabi-

如果你使用的是2.6.35-devel这个版本,那么你也将不得不启用git命令行并且在你的当前path中设置LINUX_GIT变量指向一个2.6-stable目录.你可以注释You can comment the git line once you've successfully pulled the kernel.
      备注:一个比较明智的做法是将时间的变化命名到你的编译器的实际路径中以示区分,例如arm-2009q1而现在的是arm-2010q1等等.
一旦你编辑完成system.sh文件,cd进入内核目录(以2.6-stable为例)并运行build_kernel.sh脚本;

  1. ./build_kernel.sh

这个脚本将会下载和编译内核.
定制内核配置文件
      在上一个脚本执行时,在屏幕中将显示内核配置界面.你可以按两次ESC键来退出界面然后继续编译缺省配置的内核.
      然而,你应该会想要定制你的内核.

减少预留的视频内存

      特别是当你试图在RevB版本的板子上使用你的内核时,你应该知道你的屏幕是800x600或者更低,然而你可以通过减少视频的RAM缓存来保证有12MB的RAM.具体选项如下:

  1. Device Drivers ---> Graphics Support ---> OMAP2/3 Display Subsystem support (EXPERIMENTAL)  ---> VRAM size (MB)

设置为2MB.
      注意如果必须调整boot.cmd或者boot.scr的设置的话要特别小心.如果你的boot.cmd包含一些显存设置的话,你需要去调整它以映射你新的视频RAM的大小(别超过了!).在我的设置中,我使用了如下的命令行:

  1. vram '2M omapfb.vram=0:2M,1:0M,2:0M'

这样就将整个2M的空间放到了第一个视频缓存中,而第二个和第三个缓存不予分配.
      如果你的boot.cmd中不包含任何的视频内存相关的内容,那也是可以的.
其他内核版本
      如果你试图使用(2.6-)内核去编译一个不同的版本,请更新你获取到的脚本,如下:

  1. bzr up -r tag:<tagname>

你能看到一个如下所示的所有可用标签的列表:

  1. $ bzr tags[...]2.6.33.3-x1          782.6.33.3-x2          822.6.33.4-x3          842.6.33.5-x3          852.6.33.x-end         852.6.34-x1            902.6.34.1-x2          96$

(标签名与内核发布或补丁的级别相一致)
安装内核和模块
编译生成的内核镜像位于"deploy"目录下.拷贝内核和模块到你的存储卡中:

  1. cp deploy/2.6.34.1-x2.uImage /media/<your cards boot partition>/uImagetar xvfz /home/test/2.6-stable/2.6.34.1-x2-modules.tar.gz -C /media/<your cards root partition>

运行MeeGo手持设备UX
      这个存储卡可以引导进入命令提示界面,然后MeeGo手持设备UX将会出现在屏幕上.如果一切工作都符合你的预期,那么你可以在这里停住了. 接下来的部分有可能有助于挑选出一些东西来,如果某些不能正常工作.
运行普通的X应用程序
      手持设备UX不能被用来启动普通的X应用程序或者由TI提供的3D演示.使用一个像twm一样经典的窗口管理器替代UX的图形界面这是有必要的.
      为了防止手持设备UX启动并为了使用twm来替代, 注释掉存储卡/etc/sysconfig/uxlaunch文件中的最后一行并且添加一行来启动twm窗口管理器和xterm,如下:

  1. #session=/usr/bin/mcompositorsession=/usr/bin/twm-session

在你的存储卡上引导进入twm窗口管理器和xterm.这时鼠标和键盘将会显得很有用.它们俩都将被毫无约束的使用.

通过控制台启动X程序
如果你有键盘和鼠标,你可以跳过这一部分.但是如果你没有这些而又想从控制台启动X程序,你需要以root的身份先登录,然后提升meego这个账户为root用户,因为root用户不能进入属于meego用户的屏幕 :

  1. [root@localhost ~]# su meego[meego@localhost root]$ export DISPLAY=:0[meego@localhost root]$ xeyes

运行TI演示
如果你想要运行TI的demos,你可以拷贝GFX_Linux_SDK.tar.gz文件的内容,也可以通过create_sgx_package.sh脚本生成在你的存储卡的/home/meego目录下.
通过meego用户(使用xterm或者查看之前的部分)解压OGV.tar.gz, OGLES.tar.gzOGLES2.tar.gz三个TI demos中的任意一个.所有这些都包含有X11二进制文件的路径,例如,OGLES/SDKPackage/Binaries/CommonX11/Demos就包含有可执行的二进制文件.
相当的有趣哦!
备注: 当启动一个demo时出现错误信息"PVRShell: Unable to create surface."可能预示着缺少配置文件/etc/powervr.ini.如果是这样的话,如下所示使用vi命令创建这个文件

  1. vi /etc/powervr.ini

设置内容为

  1. [default]WindowSystem=libpvrPVR2D_LINUXFBWSEGL.so

有其他版本的libpvr<XXX>.so可用,选择哪一个版本取决于安装时的选择.按照这里描述的步骤,可以很好的解决启动的问题.

启用SWAP内存
原始beagleboard的revA和revB版本有128MB RAM.这对于复杂的应用程序来说是不够的,我们需要加入swap空间.甚至对于拥有256M RAM的较新版revC板子上同时运行几个应用程序时也有可能产生内存不足的情况. 因此这些板子需要添加swap内存. beagleboard xm有512MB RAM可以在未开启swap的情况下运行的很好,但是加上swap也没有什么坏处.
注释,N900使用256MB RAM和768KB swap分区, 所以Rev C beagleboard如果要创建的话,可以大概地比较一下.
首先,我们要添加swap分区到存储卡上. gparted是一个分区不错的工具.你将不得不减小存储卡上root分区的大小.我是在存储卡的后面空出了 500MB,然后在上面创建了一个swap分区.

  1. [root@localhost ~]# fdisk /dev/mmcblk0Command (m for help): pDisk /dev/mmcblk0: 4005 MB, 4005560320 bytes255 heads, 63 sectors/track, 486 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesDisk identifier: 0x0001efd7        Device Boot      Start         End      Blocks   Id  System/dev/mmcblk0p1   *           1           6       48163+   c  W95 FAT32 (LBA)/dev/mmcblk0p2               7         421     3333487+  83  Linux/dev/mmcblk0p3             422         486      522112+  82  Linux swap / Solaris

通过这种方式,MeeGo就会自动配置分区.

Qt演示
你可以运行qtdemo应用程序,它将给你一些简单的全屏GUI来启动demo.或者你也可以手动的启动位于/usr/lib/qt4/demos下的demo程序.他们中的一些程序需要很多的内存,所以安装swap内存是必须的.
启动MeeGo手持设备UX 由于PVR在启动时会被启用并且拥有了足够的虚拟内存,现在你可以重新启用/etc/sysconfig/uxlaunch路径下的MeeGo窗口管理器mcompositor.
在这一点上,我犯了一个愚蠢的错误:我仍然将TI 3D演示程序存储在/home/meego下.完整的MeeGo UX将会启用tracker来扫描/home/meego下的多媒体文件.大约有1GB左右的文件来自3D demos,这将使tracker在后台运行时一直占用100% CPU. 为了避免发生这种情况,你需要确认/home/meego目录下的文件不会比示例图片文件多太多.我将包含3D示例程序的目录移到了/root目录下,但是它也有可能被移动到/home/meego的隐藏文件夹里(以.开头的文件夹).
现在重启电脑并且耐心等待.几分钟后你就可以看到MeeGo的UX了.

 

 

不幸的是目前还没有光标,但是在带触屏的情况下,这个UI还是可用的.当然,beagleboards的128MB内存还是不够用的并且在设备保持swap的情况下反应也是相当迟钝.
外围硬件设备
在这个装置上我已经测试了各种不同的外围设备,大部分设备都可以解决使用问题.

定制视频设定

你可以像通常一样通过内核命令行修改u-boot从而改变视频的设定.当前的MeeGo手持设备UX在设备上主要是使用800x480的屏幕分辨率.这个不能被标准内核的模式数据库所支持,需要进行一些简单的调整.
而且,一些显示器(比如我的)需要非常特别的显示时序.
以下的patch是添加和我的显示器(Toshiba LTA070B220F)的显示时序一样的800x480分辨率模式到内核模式数据库中.
如果你想要使用这个模式,只要下载文件 800x480.patch,然后将他置于内核编译目录的补丁目录(./patches)中,接着添加如下命令行在patch.sh的最后部分:

  1. #dsp# add local 800x480 patchecho "Switch default display to 800x480"patch -s -p1 < ${DIR}/patches/800x480.patchecho "patch.sh ran successful"

这样就可以将一个800x480分辨率的视频模式添加到模式数据库中,如果你没有什么特殊的模式要求,这应该是一个比较好的方法.MeeGo的手持设备和平板的UX差不多都可以使用这个分辨率,总之,这样使用是行得通的.
为了使用这个分辨率,你需要在内核命令行(例如,在boot.cmd/boot.scr)中指定如'800x480-16@60'这样.
另一个达到修改这个分辨率的目的的方法是停止u-boot(在等待引导期间点击触屏),然后设置'dvimode'环境变量为'800x480-16@60'.从此以后,你都要在u-boot提示符界面中输入一下命令:

  1. OMAP3 beagleboard.org # set dvimode 800x480-16@60OMAP3 beagleboard.org # saveenv

相同地,这有可能减少在引导开始时的等待给变量'bootdelay'设置一个新值的时间.
USB hubs, 麦和键盘
这些已经可以使用,无需配置.
蓝牙键盘
我的CSR蓝牙适配器在工具箱上可以使用.Hcitool可以很好地扫描到设备,通过hidd方式连接到蓝牙HID设备.这些都已经使用一个蓝牙键盘测试过了.

触屏

我的7英寸egalax触摸屏可以近乎完美得在工具箱上使用.它只是稍微有一点校准偏差.
最新的硬件抽象层驱动xorg可以给出输入配置文件来解决这个问题. 将下列的内容放到root分区中的/etc/X11/xorg.conf.d/50-input-touch.conf文件里,以调节触屏到很好的状况:

  1. Section "InputClass"        Identifier "evdev touchscreen catchall"        MatchIsTouchscreen "on"        MatchDevicePath "/dev/input/event*"        Driver "evdev"        Option "Calibration" "80 1918 133 1863"EndSection

这个配置会自动应用到所有在/dev/input/event*中存在映射的触屏设备.你可能不得不调整校准的值以适应你的设备.
当前的kickstart文件自动包含这个文件.如果你没有触摸屏,这个就用不到了.
以太网
一个D-Link DUB-E100以太网适配器工作在工具箱中,通过DHCP获得一个IP地址.在这个网络连接中,我可以确认zypper和包管理工具也可以使用."zypper up"命令成功得更新了一些包.
beagleboard XM的板载以太网卡(一个基于USB设备的SMSC95xx)也可以再工具箱中工作.

无线局域网
使用一个基于USB适配器的Ralink RT2501可以检测并扫描到网络.但是它不能通过DHCP提供一个地址.

音频

音频不能在beagleboard XM上使用.
音频在beagleboard revA, revB和revC上可以工作得很好, 但是它缺省的是无声的.通过alsamixer工具可以将它启动. Alsamixer生成一些设定的控制台图形,但是不会为我展示连续的图像.我不得不使用xterm通过以太网登录的方式实现对alsamixer的实际控制.
你需要使用meego(而不是root)这个用户名登录并且启动alsamixer. 你将看到一个简单的音量条.这是脉冲音频设定.如果它是静音的状态(在音量条的底部有'MM'的标示),你需要取消静音(按‘M’键).这时'MM'将会变成绿色的'00'.当然,如果能的话,你也可以使用光标增加音量到最大,
然后按'F6'键切换到omap3beagle设置.这是硬件的配置.你需要取消静音,然后至少按照以下条目增大音量:

  1. DAC1 AnalogDAC1 Digital CourseDAC1 Digital FineHeadsetHeadsetL Mixer AudioL1HeadsetR Mixer AudioR1

输入以下命令将给你一段听得见的输出在耳机中:

  1. aplay /usr/share/sounds/alsa/Rear_Center.wav

如果你听不到任何东西,可能需要通过alsamixer去调整omap3beagle设置.幸运的是这些设定在系统重启的时候将会自动地保存.你只需要调整一次就可以了.
制作快照
对你看到的东西满意吗?想要分享它吗?那就制作一个屏幕截图吧!这个不需要任何特定的软件.只要拷贝framebuffer的内容到一些文件中:

  1. cp /dev/fb0 screenshot.raw

如果你是在16bits/pixel下使用800x480的显示尺寸,那么最后的文件将有一个精确地大小770048 bytes (800x480x2).
在你的主机上使用ffmpeg将它转换成一些标准的图片格式比如png:

  1. ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 800x480 -i screenshot.raw -f image2 -vcodec png screenshot.png

 

wiki原文:http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch

抱歉!评论已关闭.