嵌入式linux镜像,使用Openembedded定制嵌入式Linux镜像

关键词:ARM,Linux,Openembedded

作者:ByToradex秦海

摘要:嵌入式设备采用Embedded Linux操作系统进行开发已经越来越成为主流,但是如何将开发完成的Linux uboot/kernel配置,以及应用程序整合到Embedded Linux镜像中以便在量产的时候更方便的更新到嵌入式设备中可能是很多嵌入式开发者面临的挑战之一,而本文就以在Embedded Linux中使用比较广泛的Yocto project 为例,基于Openembedded开发框架定制 Embedded Linux镜像。

1). 简介

嵌入式设备采用Embedded Linux操作系统进行开发已经越来越成为主流,但是如何将开发完成的Linux uboot/kernel配置,以及应用程序整合到EmbeddedLinux镜像中以便在量产的时候更方便的更新到嵌入式设备中可能是很多嵌入式开发者面临的挑战之一,而本文就以在Embedded Linux中使用比较广泛的Yocto project为例,基于Openembedded开发框架定制 Embedded Linux镜像。

本文所演示的平台来自于Toradex Colibri iMX6嵌入式平台,这个平台是基于NXP iMX6系列ARM处理器,核心为Cortex-A9。同时Toradex也提供了一个完整的Ycoto project兼容的基于Openembedded发布的Embedded Linux,这样就无需完全从头开始配置自己的layer,只需要修改添加需要的部分即可。

2). 准备

a). ColibriiMX6 ARM核心版配合ColibriEva Board 载板,用于测试编译好的image。

b). 配置Openembedded开发环境,请参考这里说明,本文测试使用LinuxImage2.7分支环境。

c). 参考这里说明下载Linux V2.7内核和uboot源代码,用于产生相应的patch文件。

c). 本文演示的定制Embedded Linux镜像主要添加修改以下内容,下面会按照这个内容逐一说明:

./ 修改uboot默认环境变量,适配演示使用的 LVDS 液晶屏

./ 修改Linux Kernel增加一个设备驱动;同时修改Linux device tree文件,增加两个串口配置

./ 将演示Qt应用程序集成到image,并配置为开机自动启动

3). 创建定制Embedded Linux 相关配置Layer

a). 在配置下载好的OpenEmbedded环境Layer目录下,创建存放本次定制image相关文件资料的Layer – meta-toradex-custom.

b). 在meta-toradex-custom目录下创建 conf 目录,并创建Layer配置文件 layer.conf ,这个文件内容可以参考meta-toradex-nxp/conf/layer.conf 文件进行修改,主要是layer名字和优先级以及依赖部分需要注意,修改好的文件请见如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/conf/layer.conf

c). 在 conf 目录下创建 machine 目录,并创建 machine 配置文件 colibri-imx6-custom.conf , 文件内容同样参考meta-toradex-nxp/conf/machine/colibri-imx6.conf 修改,本文因没有修改devicetree名字,因此没有修改次文件,内容如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/conf/machine/colibri-imx6-custom.conf

4). OpenEmbedded下Uboot修改示例

a). 因为演示使用的LVDS液晶屏分辨率为1024x768,这里将uboot显示环境变量默认值修改为对应分辨率

b). 首先进入下载的uboot源代码对 include/configs/colibri_imx6.h 文件进行修改,产生的patch文件如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-bsp/u-boot/files/colibri_imx6_uboot_custom.patch

c). 在 meta-toradex-customlayer目录下创建 recipes-bsp/u-boot目录,并对 u-boot-toradex_2016.11.bb 文件进行append,增加上面生成的patch内容,如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-bsp/u-boot/u-boot-toradex_2016.11.bbappend

5). OpenEmbedded下Linux kernel 和 device tree 修改示例

a). 对Linux kernel进行重新config,增加了如下RTL8152 USBEthernet Adapter驱动

--------------------------------

→ Device Drivers → Network device support → USB NetworkAdapters

  Realtek RTL8152/RTL8153 Based USBEthernet Adapters

--------------------------------

生成的新的defconfig文件如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/files/defconfig

b). 对 arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts文件进行修改,增加UART4 和 UART5 连个串口支持,关于Colibri iMX6串口详细说明请参考这里,修改后的 patch 文件0001-custom-devicetree.patch 请见如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/files/0001-custom-devicetree.patch

c). 在 meta-toradex-customlayer目录下创建 recipes-kernel/linux目录,并对 linux-toradex_4.1-2.0.x.bb 文件进行append,将上面生成的 defconfig 和 0001-custom-devicetree.patch增加进去,如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/linux-toradex_4.1-2.0.x.bbappend

然后再创建 files 目录,将defconfig 和 0001-custom-devicetree.patch 两个文件复制进去。

另外,关于如何生成kernel patch,也可以参考下面文章:

https://www.toradex.cn/blog/patching-kernel-in-openembedded

6). OpenEmbedded下部署Qt应用示例

a). 本文所使用的Qt 应用demo说明请参考下面文章:

http://blog.sina.com.cn/s/blog_d733e5170102wyay.html

b). 配置Qt开机自启动需要下面两个文件

./ Qt 程序执行脚本,这里使用linuxfb进行显示

https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo.sh

./ Systemd 启动配置 .service文件

https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo_launch.service

c). 在 meta-toradex-customlayer目录下创建 recipes-qt/qtdemo目录,并创建如下 qtdemo_0.1.bb 文件用于从Qt 应用的git地址下载应用并编译部署

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-qt/qtdemo/qtdemo_0.1.bb

关于这个bb文件的详细说明,可以参考下面文档:

https://www.toradex.cn/blog/building-custom-embedded-linux-distributions

7). OpenEmbedded下设置自定义image镜像编译

a). 在 meta-toradex-customlayer目录下创建 recipes-images/images目录,将下面三个文件从 meta-toradex-demos/recipes-images/images 复制过来

--------------------------------

angstrom-qt5-x11-image.bb

tdx-extra.inc

tdx-image-fstype.inc

--------------------------------

Angstrom-qt5-x11-image.bb 文件就是生成image的bb文件,可以不做修改,也可以根据需要添加修改package设定,本文修改了angstrom-qt5-x11-image.bb文件,将默认需要编译的Qt demo smarthome 程序去掉了,如下:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-images/images/angstrom-qt5-x11-image.bb

b). 在images目录下继续创建 files/colibri-imx6-custom 目录,将 u pdate.sh 文件从 meta-toradex-demos/recipes-images/images/files/colibri-imx6 复制过来。然后因为 machine 名字变为colibri-imx6-custom 了,因此要对应修改,修改内容如这里:

https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-images/images/update.sh.patch

c). 在colibri-imx6-custom目录下继续创建 imx_flash 目录,将 meta-toradex-demos/recipes-images/images/files/colibri-imx6/files/imx_flash目录下的文件复制过来。

d). 在colibri-imx6-custom目录下继续创建 colibri-imx6-custom_bin 目录,将meta-toradex-demos/recipes-images/images/files/colibri-imx6/files/colibri-imx6_bin目录下的所有文件复制过来。

e). 至此,meta-toradex-customlayer 的所有修改都已经完成,下面我们进入 OpenEmbedded编译环境下 build/conf 目录, 对下面两个文件进行修改:

./ bblayers.conf – 增加了meta-toradex-custom layer进来,如下:

https://github.com/simonqin09/openembedded_demo/blob/master/bblayers.conf

./ local.conf – 将默认的machine 修改为colibri-imx6-custom, 同时增加了一些包如 tslib 和 linuxfb,如下:

https://github.com/simonqin09/openembedded_demo/blob/master/local.conf

f). 在 build目录下执行下面命令进行编译,编译成功后,可以在deploy/images/colibri-imx6-custom 目录下找到编译好的 image 压缩包。

--------------------------------

$ bitbake –k angstrom-qt5-x11-image

--------------------------------

8). 在Colibri imx6模块上面更新image并测试

a). 将上述生成好的image文件colibri-imx6-custom_Qt5-X11-Image_2.7b3-xxxxxxxx.tar.bz2 按照这里的说明更新到 Colibri iMX6 模块上面去。

b). QT GPIO 应用使用的管脚为SODIMM PIN 127,这里在 Colibri Evaluation Board 上面将 X10 SODIMM 127 和 X21 LED1 相连,用于测试GPIO电平情况。

c). image 更新好后,我们可以逐项去测试上面每一个配置

./ uboot

如下可见默认环境变量的修改已经生效

--------------------------------

# env default –a

# printenv

vidargs=video=mxcfb0:dev=lcd,1024x768M@60,if=RGB666video=mxcfb1:off fbmem=8M

--------------------------------

./ kernel config 修改

如下可见kernel增加的驱动也已经编译进去了

--------------------------------

root@colibri-imx6-custom:~# zcat/proc/config.gz |grep RTL8152

CONFIG_USB_RTL8152=y

--------------------------------

./ device tree 修改

如下可见,除了默认的ttymxc0-2设备,还多了ttymxc3和ttymxc4

--------------------------------

root@colibri-imx6-custom:~# ls/dev/ttymxc*

/dev/ttymxc0  /dev/ttymxc1  /dev/ttymxc2  /dev/ttymxc3  /dev/ttymxc4

--------------------------------

./ Qt 程序自启动以及控制GPIO情况

如下图片

6c60d617fe19c00e9b908b735a78601c.png

还有一起启动过程的视频如下:

http://v.youku.com/v_show/id_XMzE3MDY4NDkyNA==.html

9). 总结

本文只是简单演示了利用 OpenEmbedded 可以非常方便的生成定制化 Embedded Linux,另外配合git,还可以很好的实现不同版本的管理。但是 OpenEmbedded 架构本身也是比较复杂的,要想灵活使用还需要对其做一些深入的学习才能得心应手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...

不少用户在Linux系统中安装GBK或GB2312的时候遇到了乱码问题,这主要是系统默认语言是uft8所导致,对于该问题可用五种方法进行解决,接下来是小编为大家收集的Linux安装GBK/GB2312程序显示乱码的五种解决方法,希望能帮到大家。Linux…

linux 设备驱动总结,linux设备驱动归纳总结(三):3面向对象思想和lseek

linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现一、结构体structfile和struct inode在之前写的函数,全部是定义了一些零散的全局变量。有没有办法整合成到一个结构体当中?这样的话,看起来和用起来都比较方便。接…

idea junit 测试看不到控制台报错信息_高手都这么给 Spring MVC 做单元测试!

本章节主要讲解以下两部分内容:1、Mock 测试简介2、测试用例演示一、Mock 测试简介1、什么是 mock 测试在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个「虚拟的对象」来创建以便测试的测试方法,就是 「mock 测试」在…

windows查询每个线程占用的内存_C#多线程

一、基本概念1、进程首先打开任务管理器,查看当前运行的进程:从任务管理器里面可以看到当前所有正在运行的进程。那么究竟什么是进程呢?进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所…

linux 录屏软件 按键,linux下常用的截图、录屏工具

linux下常用的截图、录屏工具(2010-01-05 10:47:21)由于和老公一起做一个百度俱乐部的小项目,在编写测试文档时要使用截图、录屏的小工具,于是展开搜索什么工具比较好使。录屏:在linux下常用的录屏工具有5种,可以baidu或者google下…

实体类blob类型_Mysql的数据类型和JPA的实体类

​MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型Int,4字节,(-2147483648,2147483647), (0,4294967295)BIGINT,8 字节,(-9223372036854775808,92…

python升级版本命令_如何在python中安装和配置kivy库

kivy是python的UI开发工具包,主要关注用户界面显示效果,可以在Android、IOS、Linux、OS X和Windows上运行。如果python开发中使用kivy,需要安装和配置相关文件和依赖模块。1、在电脑左下角打开开始菜单,输入cmd打开终端窗口在电脑…

linux系统如何安装bt5,BT5硬盘安装(多系统linux + win + BT5)

BT5硬盘安装(多系统linux win BT5)实际上,Win BT5的安装不是很困难,但据我所知我也有两种: 1如官方说明中所述,工具unetbootin,运行unetbootin,在“ CD映像”中,选择BT5的ISO,在“类型”中选…

android主板读取vga线数据_智锐通掘金新基建上新系列之3.5quot; 与ATX工业主板图鉴...

4月份,工信部正式公布了《工业互联网体系架构(版本2.0)》!5G、大数据、人工智能、区块链、边缘计算等新技术加速融入并不断拓宽工业互联网的内涵与赋能潜力。新一代信息技术为驱动的数字浪潮正在深刻重塑经济社会各个领域的当前,智锐通科技聚…

Python 爬虫之下载视频(五)

爬取第三方网站视频 文章目录 爬取第三方网站视频前言一、基本情况二、基本思路三、代码编写四、注意事项(ffmpeg)总结 前言 国内主流的视频平台有点难。。。就暂且记录一些三方视频平台的爬取吧。比如下面这个: 一、基本情况 这次爬取的方…

c语言json映射,GitHub - xujun621/cson: 基于C语言的json数据映射解析库

CSON基于cJSON,运行于C语言平台的json-struct模型解析工具简介CSON是一个简单的cJSON的二次封装,相比于使用原生cJSON一层一层解析的方式,CSON采用模型映射的方式,使用模型将结构体的特征进行描述,然后根据模型,将json…

cad渐变线怎么画_怎么画压力线和支撑线

支撑线与压力线的基本画法画法:将两个或两个以上的相对低点连成一条直线即得到支撑线将两个或两个以上的相对高点连成一条直线即得到压力线用法:1.支撑线和压力线的作用支撑线又称为抵抗线。当股价跌到某个价位附近时,股价停止下跌&#xff0…

c语言为什么要建项目,一个C语言小项目为什么都说牛逼

原标题:一个C语言小项目为什么都说牛逼意在鼓励C语言学者。更有兴趣,学习更富有创业和乐趣!推荐加学习交流群:658807522 可以在一起学习交流,既是参赛选手,又是学者,也可以先学习再参赛&#xf…

单片机c语言 oxfe,AVR单片机入门及C语言高效设计实践(五)

ATMEAGl6L的中断系统什么是“中断”?顾名思义中断就是中断某一工作过程去处理一些与本工作过程无关或间接相关或临时发生的事件,处理完后,则继续原工作过程。比如:你在看书,电话响了,你在书上做个记号后去接电话&…

android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

Vector矢量图在Android项目中的利用愈来愈广泛,但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦,首先能支持的SVG规范较少,其次操作流程麻烦。而另外一种方式就是通过http://inloop.github.io/svg2android…

android微信朋友圈相册背景,Android 仿微信朋友圈图片拖拽返回

目前的app的动画效果是越来越炫了,很多主流app的图片预览返回都有类似功能,比较常见的是ios自带相册,微信朋友圈等等。自己项目中也有类似功能,最近整理了一下这个功能的代码,做个笔记记录,有兴趣的朋友可以…

erp采购总监个人总结_《用友 ERP 培训教程:财务核算/供应链管理/物料需求计划》ERP概述 : ERP基础知识...

第1章 ERP概述本章重点_- _ERP概要_- _ERP实施成功的必要条件_- _ERP几个重要的名词解释用友ERP-U8(V8 .72)简介及功能按钮说明1.1 ERP基础知识1.1.1 ERP基本概念ERP(Enterprise Resources Planning)中文叫做企业资源规划&…

soc 设计soc设计 uml实务手册_企业内训“软件需求设计建模方法学全程实例剖析”训练方案(2020年)...

※训练介绍※利润需求-设计。软件开发中,需求是解决“系统怎样好卖”的问题,设计是解决“降低开发成本”的问题。要迈向“低成本制造好卖的产品”的境界,并非喊喊口号就能达到。口号:我们只做最重要的需求,尽快把系统推…

鸿蒙分布式通讯子系统,【鸿蒙】分布式通信子系统--让华为手机发现Hi3861开发板...

目录:工具步骤运行结果工具:1. 华为手机,需要有多设备协同功能。在设置->更多连接->多设备协同,查看是否有多设备协同功能,此功能使用的就是coap协议。2. Hi3861开发板步骤:1. 修改源码,…

winform 统计大量数据重复的元素个数_DAY10——推断统计之概率与概率分布:常见的离散型概率分布...

「数学期望——某件事情大量发生之后的平均结果」----------------分割又分割----------------------昨天文章排版出了问题,今天重新排版。数据的三个统计维度:集中程度、离散程度、分布情况。集中程度:期望离散程度:方差、标准差…