通常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分支)

  1. $ mkdir fsl-community-bsp
  2. $ cd fsl-community-bsp
  3. $ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master
  4. $ repo sync

设置环境和工具路径:

  1. $ ./setup-environment build

修改下build/conf/local.conf文件:

  1. #表示接受Freescale的软件使用条款
  2. ACCEPT_FSL_EULA = ""
  3. #申明可以包括非GPL的软件
  4. LICENSE_FLAGS_WHITELIST +="commercial"

现在已经可以使用bitbake生成Linux映像了。BSP里自带了一些现成的配置,比如:

  1. $ 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文件:
  1. #@TYPE: Machine
  2. #@NAME: MarS Board
  3. #@SOC: i.MX6Q
  4. #@DESCRIPTION: Machine configuration for MarS Board
  5.  
  6. include conf/machine/include/imx-base.inc
  7. include conf/machine/include/tune-cortexa9.inc
  8.  
  9. SOC_FAMILY = "mx6:mx6q:marsboard"
  10.  
  11. PREFERRED_PROVIDER_virtual/kernel = "linux-marsboard"
  12. KERNEL_IMAGETYPE = "uImage"
  13.  
  14. UBOOT_SUFFIX = "bin"
  15. UBOOT_PADDING = ""
  16. PREFERRED_PROVIDER_u-boot = "u-boot-imx"
  17. UBOOT_MACHINE = "mx6qsabresd"
  18.  
  19. SERIAL_CONSOLE = "115200 ttymxc1"
  20.  
  21. 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:
  1. # Adapted from linux-imx.inc, copyright (C) O.S. Systems Software LTDA
  2. # Released under the MIT license (see COPYING.MIT for the terms)
  3. require recipes-kernel/linux/linux-imx.inc
  4. DESCRIPTION = "Linux kernel for MarS Board"
  5. SRC_URI = "git://github.com/silmerusse/linux-imx.git;branch=silmerusse file://defconfig"
  6. #SRC_URI = "git:///home/silmerusse/marsboard/linux-imx;protocol=file;branch=silmerusse file://defconfig"
  7. LOCALVERSION = "_silmerusse"
  8. SRCREV = "${AUTOREV}"
  9. 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里面就可以了。
例如:
  1. include recipes-fsl/images/fsl-image-gui.bb
  2. IMAGE_INSTALL += " packagegroup-fonts-truetype \
  3. vivante-gpu-sdk \
  4. rsync \
  5. wget \
  6. git \
  7. gst-ffmpeg \
  8. ttf-bitstream-vesa \
  9. ttf-dejavu \
  10. ttf-wqy-zenhei \
  11. bigbuckbunny-1080p \
  12. vim \
  13. autoconf \
  14. automake \
  15. "
  16. 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工作目录下。

  1. $ cd fsl-community-bsp
  2. $ git clone https://github.com/silmerusse/meta-robomind.git

在开始烘培image前,首先设置下环境:

  1. $ source setup-environment build

编辑conf/local.conf 确保变量MACHINE设置为'marsboard' 以及DISTRO设置为'robomind'。

  1. MACHINE = 'marsboard'
  2. DISTRO = 'robomind'

编辑conf/bblayers.conf 确保必要的BBLAYERS中包括了必要的layers。通常添加meta-robomind就可以了。如果要用到其他的recipes和包需要酌情添加更多layers,实际上可以meta-openembedded下的都加进去。

现在到了烘培时间:

  1. $ 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 (仅供测试和参考)

自制Linux映像和发行版Robomind的更多相关文章

  1. Linux 小知识翻译 - 「Linux」和「发行版」之间的关系

    「Linux」本来指的仅仅是内核.5年之前大多都是这么认为的,但是最近不这么说了. 最近一般都说「Linux」是个 OS,这里的OS,不仅仅是内核,而是指电脑的整体环境(除了内核,还包括一些外围的软件 ...

  2. Linux简介和各发行版介绍

    一.Linux 简介 Linux 内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在大学上学时出于个人爱好而编写的. Linux 是一套免费使用和自由传播的类 Unix 操作系统,是 ...

  3. 使用U盘安装Linux最美桌面发行版Elementary OS 及常用开发环境配置(JDK,Redis,MySQL,Docker,IDEA,STS)

    前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...

  4. Arch Linux pacman 与其他发行版操作比较

    原文:https://wiki.archlinux.org/index.php/Pacman/Rosettahttps://old-en.opensuse.org/Software_Managemen ...

  5. 十大广泛使用的Linux发行版

    回到上世纪90年代,Mandrake Linux还是唯一的Linux发行版:而今天,Linux发行版的数量变得数不胜数.本文为大家整理出了十大广泛使用的Linux发行版,希望能帮助大家在选择合适的Li ...

  6. 盘点十大最流行的Linux服务器发行版

    随着Linux不断发展,Linux所支持的文件系统类型也在迅速扩充.很多的数据中心服务器上都运行着Linux,可以节省大量的许可证费用及维护费用.但伴随着Linux新版本的发行,其中每一个不同版本的L ...

  7. 十大流行Linux发行版

    [2013年5月13日 51CTO外电头条]Linux是功能强大的常用操作系统之一,目前它在计算机操作系统领域的发展速度越来越快.它提供了出色的性能和速度.Linux用起来非常稳定而可靠.它还提供了几 ...

  8. 最佳 Linux 发行版汇总

    Linux入门UbuntuUbuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统.他是世界上最流行的发行版之一,每次发行,它都有提升.最新发行版为桌面.移动及其桌面 ...

  9. 全球最受欢迎的十大Linux发行版(图)

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

随机推荐

  1. PHP获取当前日期和时间格式化方法

    使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i:s");?> 显示的格式: 年-月-日 小时:分钟:妙 相关时间 ...

  2. CSS3制作旋转导航

    慕课网学习CSS3时,遇到个习题,觉得有必要总结学习下:CSS3制作旋转导航 慕课网习题地址:http://www.imooc.com/code/1883 示例及源码地址:http://codepen ...

  3. js 空正则匹配任意一个位置

    看一个正则 这里明显,起到匹配作用的是 | 后的,可 | 后什么都没有,原理不知道,也没有搜到文献,只有在 Reg101 上是这样解释的, 所以得出结论: js 中,空正则匹配任意一个位置. 不过,这 ...

  4. c# winform 应用程序根据条件阻止窗口关闭

    //添加窗口关闭事件委托 在窗口关闭事件中处理 private void TestForm_FormClosing(object sender, FormClosingEventArgs e) { s ...

  5. jQuery table tr隔行变色,鼠标移入移出变色,鼠标点击变色

    .trover { background: #f9f9f9; } .trclick { background: #c4e8f5; } .treven{ background:#CCFFCC; } .t ...

  6. 简单安装与配置mysql数据库(绿色版)

    目录 绿色版下载 mysql绿色版(5.7版本的安装与配置) 绿色版下载: mysql官网下载地址:https://www.oracle.com/index.html mysql绿色版(5.7版本的安 ...

  7. JQueryiframe页面操作父页面中的元素与方法(实例讲解)

    1)在iframe中查找父页面元素的方法:$('#id', window.parent.document) 2)在iframe中调用父页面中定义的方法和变量:parent.methodparent.v ...

  8. requests和bs4

    requests模块,仿造浏览器发送Http请求bs4主要对html或xml格式字符串解析成对象,使用find/find_all查找 text/attrs 爬取汽车之家 爬取汽车之家的资讯信息,它没有 ...

  9. Again Array Queries---Lightoj1100(循环暴力)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1100 题意是给你n个数,q个询问,每次求出 a 到 b(从0开始)最小差值: 直接暴力 ...

  10. Android中TextView设置最大长度,超出显示省略号

    今天在项目中碰到一个问题,在一个页面的顶部的标题栏显示公司的名字,但由于公司名称较长,显示不开,影响美观.故在网上查阅资料,在此做个小的总结. TextView中有个ellipsize属性,作用是当文 ...