zoukankan      html  css  js  c++  java
  • 自制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 (仅供测试和参考)

  • 相关阅读:
    Cocos2d JS 之消灭星星(二) 工具类开发
    Cocos2d JS 之消灭星星(三) 进入游戏过渡场景
    Cocos2d JS 之本地存储(localStorage)
    Cocos2d JS 之消灭星星(—) 游戏初始化场景的建立
    小程序的1024KB
    小程序来了(下篇)
    小程序来了(上篇)
    那些年,让我们一起着迷的Spring
    小程序之信息触手可及
    史诗手册!微信小程序新手自学入门宝典!
  • 原文地址:https://www.cnblogs.com/silmerusse/p/3305319.html
Copyright © 2011-2022 走看看