自制Linux映像和發行版Robomind


通常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之類的。

 

如果想進一步定制系統的話,可以使用有圖形界面的hob來配置。在build目錄下打hob啟動圖形界面。選擇Machine。默認是imx6qsabresd。制作完Linux系統后把內核替換成Marsboard的應該也可以。如果想把marsboard內核集成進BSP,可以在fsl-community-bsp/sources/meta-fsl-arm-extra/conf/machine下新建一個marsboard.conf文件:
#@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是自定義內核。

 

在fsl-community-bsp/sources/meta-fsl-arm-extra/recipes-kernel/linux下新建linux-marsboard_3.0.35.bb:
# 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,需要點耐心。

 

一個比較好的辦法是為marsboard建立一個base image。我的方法是在fsl-community-bsp/sources/meta-fsl-demos/recipes-fsl/images下新建marsboard-silmerusse.bb 把想加入的包的名字直接添加到這個recipe里面就可以了。
例如:
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 (僅供測試和參考)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM