通常ARM開發板廠商會提供已編譯好的Linux映像供用戶使用。我手上的MarS Board的廠商提供了Ubuntu映像,只是版本有點老,文件系統也比較大。之前我已經移植了較新的Linux內核,現在我想按自己的想法定制Linux文件系統。Freescale官方提供的BSP是基於yocto project的,可以使用bitbake、hob等工具來定制Linux映像,甚至可以加入包管理、桌面等功能來自制完整的發行版。BSP里已經包括sabre和wandboard等config和recipes。但是沒有marsboard的。我就參考其他板子來加入對marsboard的支持。
首先下載Freescale的官方BSP:(我使用的是master分支,也可以使用比較穩定的dylan分支)
$ mkdir fsl-community-bsp $ cd fsl-community-bsp $ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master $ repo sync
設置環境和工具路徑:
$ ./setup-environment build
修改下build/conf/local.conf文件:
#表示接受Freescale的軟件使用條款 ACCEPT_FSL_EULA = "1" #申明可以包括非GPL的軟件 LICENSE_FLAGS_WHITELIST +="commercial"
現在已經可以使用bitbake生成Linux映像了。BSP里自帶了一些現成的配置,比如:
$ bitbake fsl-image-gui
這個image已經預先配置了很多包,並且帶有一個叫做Sato的X圖形界面,有很多演示程序。如果想要最簡單的系統也可以選擇core-image-minimal, core-image-basic之類的。
#@TYPE: Machine #@NAME: MarS Board #@SOC: i.MX6Q #@DESCRIPTION: Machine configuration for MarS Board include conf/machine/include/imx-base.inc include conf/machine/include/tune-cortexa9.inc SOC_FAMILY = "mx6:mx6q:marsboard" PREFERRED_PROVIDER_virtual/kernel = "linux-marsboard" KERNEL_IMAGETYPE = "uImage" UBOOT_SUFFIX = "bin" UBOOT_PADDING = "2" PREFERRED_PROVIDER_u-boot = "u-boot-imx" UBOOT_MACHINE = "mx6qsabresd" SERIAL_CONSOLE = "115200 ttymxc1" MACHINE_FEATURES += " alsa irda wifi bluetooth usbgadget usbhost"
其中linux-marsboard是自定義內核。
# Adapted from linux-imx.inc, copyright (C) 2013 O.S. Systems Software LTDA # Released under the MIT license (see COPYING.MIT for the terms) require recipes-kernel/linux/linux-imx.inc DESCRIPTION = "Linux kernel for MarS Board" SRC_URI = "git://github.com/silmerusse/linux-imx.git;branch=silmerusse file://defconfig" #SRC_URI = "git:///home/silmerusse/marsboard/linux-imx;protocol=file;branch=silmerusse file://defconfig" LOCALVERSION = "_silmerusse" SRCREV = "${AUTOREV}" COMPATIBLE_MACHINE = "(marsboard)"
這里SRC_URI是內核源代碼的位置。可以用我放在github上的marsboard 3.0.35內核repo(尚未移植觸摸屏驅動),也可以用其他的內核源代碼路徑。defconfig是內核配置文件(就是.config改個名字),放在fsl-community-bsp/sources/meta-fsl-arm-extra/recipes-kernel/linux/linux-marsboard-3.0.35目錄下。
這樣在hob的Machine下拉框里就有marsboard的選項。在下面的base image下拉框里可以選擇fsl-image-gui。你也可以自行編輯image要包括的包列表,根據需要添加新的包。不過感覺這個功能不是很好用,一出點什么狀況,就會退到最前面一步,重新選machine,選image,選package,費時費力,還有很多bug,需要點耐心。
include recipes-fsl/images/fsl-image-gui.bb IMAGE_INSTALL += " packagegroup-fonts-truetype \ vivante-gpu-sdk \ rsync \ wget \ git \ gst-ffmpeg \ ttf-bitstream-vesa \ ttf-dejavu \ ttf-wqy-zenhei \ bigbuckbunny-1080p \ vim \ autoconf \ automake \ " export IMAGE_BASENAME = "marsboard-silmerusse"
接下去就是build packages, build image 一切順利的話就會生成Linux系統image。格式是可以在hob的高級選項里設置的。把系統image展開成rootfs。如果沒有build內核的話,可以加入原來的內核。
如果選的是fsl-image-gui,開機會自動進入sato圖形界面。
到目前為止,我是把一些recipes和配置文件直接放到了Freescale BSP的工作目錄中來支持MarS Board,可以工作但不大好維護。於是決定創建自己的layer來進行定制。這個新的layer命名為meta-robomind,主要包括了 MarS Board的機器配置, 定制的3.0.35 Linux內核recipe, 以及在Poky基礎上定制的distro - Robomind。
此layer代碼現在托管在github,可以clone到BSP工作目錄下。
$ cd fsl-community-bsp $ git clone https://github.com/silmerusse/meta-robomind.git
在開始烘培image前,首先設置下環境:
$ source setup-environment build
編輯conf/local.conf 確保變量MACHINE設置為'marsboard' 以及DISTRO設置為'robomind'。
MACHINE = 'marsboard' DISTRO = 'robomind'
編輯conf/bblayers.conf 確保必要的BBLAYERS中包括了必要的layers。通常添加meta-robomind就可以了。如果要用到其他的recipes和包需要酌情添加更多layers,實際上可以meta-openembedded下的都加進去。
現在到了烘培時間:
$ bitbake <image_name>
第一次運行的時候會花幾小時,一切順利的話發行版映像就生成了。
目前我定義了以下images:
robomind-image-gui
- 文件系統壓縮包約200MB。基於Freescale Community BSP master分支,版本比較新。
- Linux內核版本為3.0.35,但是vivante gpu內核驅動是從3.5.7 backport的。加入rtl8192cu無線網卡驅動,但尚未移植觸摸屏驅動,目前只適合用於桌面系統。
- GPU用戶驅動版本是gpu-viv-bin-mx6q-3.5.7-1.0.0-alpha.2的X11版本,與內核驅動配套。(未使用wayland版本,因為我發現3.5.7的wayland庫鏈接起來有問題。)支持dri。運行測試程序通過,應該是支持3D加速的。但是與GLX不兼容,從日志上看GLX使用的是mesa的軟加速。Freescale的說法是此問題可以忽略,見:https://community.freescale.com/thread/303290
- Xorg server版本已升級到1.14。
- 默認桌面是xfce,包括各種插件。開機即自動啟動。
- 包管理系統使用rpm。
- GPU測試程序在/opt下,為節省空間可以刪除。
- 測試用gplay全屏播放1080p H264視頻流暢。backend仍是gstreamer0.10。插件都沒有移植到1.0+。
發行版映像下載地址: http://pan.baidu.com/share/link?shareid=4118869078&uk=738567732 (僅供測試和參考)
robomind-image-core
- 沒有包括x11系統和xfce
發行版映像下載地址:http://pan.baidu.com/share/link?shareid=4123433495&uk=738567732 (僅供測試和參考)