imx8烧写Linux系统,RT-Linux在IMX8上的使用

2023-11-12

By Toradex胡珊逢

Real-time Linux 是指在普通 Linux 内核打上 PREEMPT_RT补丁后使内核满足实时要求。下面我们将使用 Apalis iMX8QM 介绍如何开启 Linux 5.4 的实时功能。

首先需要下载适用于 Apalis iMX8QM 模块的最新 Linux 内核源码。

git clone -b toradex_5.4-2.1.x-imx     git://git.toradex.cn/linux-toradex.git

在源码根目录下打开 Makefile 文件查看内核版本,这里我们看到是5.4.47。

$ head Makefile

# SPDX-License-Identifier: GPL-2.0

VERSION = 5

PATCHLEVEL = 4

SUBLEVEL = 47

EXTRAVERSION =

NAME = Kleptomaniac Octopus

下载对应版本的 PREEMPT_RT补丁,解压后放到源码根目录下。

执行下面命令为 5.4.47 内核打上补丁。

$ patch -p1     < patch-5.4.47-rt28.patch

根据这里的说明完成内核以及驱动模块编译。

$ make     defconfig

$ make     menuconfig

开启 > General setup > [*] Configure standard kernel features。

在 > General setup > reemption Model 中选择 Fully Preemptible Kernel (Real-Time)

a5632be90bb4

为了获得更好的实时性能,我们将关闭显示功能以及部分音频功能。在 > Device Drivers > Graphics support 中取消相关显示接口。

a5632be90bb4

在 > Device Drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC audio support > SoC Audio for Freescale CPUs 中取消 AUDIO TO HDMI TX module support 和 XCVR 支持。

a5632be90bb4

保存配置后退出,开始编译内核。

$ make     Image.gz 2>&1 | tee build.log

$ make -j3     modules

$ mkdir     modules

$ export     INSTALL_MOD_PATH=modules

$ make     modules_install

在 arch/arm64/boot 和 modules/lib/modules 目录分别是内核文件 Image.gz 和驱动模块。将其复制到 Apalis iMX8QM 模块的 /media/mmcblk0p1 和 /lib/modules/。然后执行重启命令。

root@apalis-imx8:~# sync

root@apalis-imx8:~# reboot

启动后可以查看目前运行的内核配置情况。

root@apalis-imx8:~#     zcat /proc/config.gz |grep PREEMPT                                                                                                                        CONFIG_HAVE_PREEMPT_LAZY=y                                                                                                                                                    CONFIG_PREEMPT_LAZY=y                                                                                                                                                         #     CONFIG_PREEMPT_NONE is not set                                                                                                                                              # CONFIG_PREEMPT_VOLUNTARY is not set                                                                                                                                         # CONFIG_PREEMPT is not set                                                                                                                                                   CONFIG_PREEMPT_RT=y                                                                                                                                                           CONFIG_PREEMPT_COUNT=y                                                                                                                                                    CONFIG_PREEMPTION=y                                                                                                                                                           CONFIG_PREEMPT_RCU=y                                                                                                                                                          CONFIG_PREEMPT_NOTIFIERS=y

将 Apalis iMX8QM 上的两个 A72 和 四个 A53 核心的时钟都设置到最高。

root@apalis-imx8:~# echo performance >     /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor

root@apalis-imx8:~# echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

root@apalis-imx8:~# cpufreq-info |grep current

current policy: frequency should be within 600 MHz and 1.20 GHz.

current CPU frequency is 1.20 GHz (asserted by call to hardware).

current policy: frequency should be within 600 MHz and 1.20 GHz.

current CPU frequency is 1.20 GHz (asserted by call to hardware).

current policy: frequency should be within 600 MHz and 1.20 GHz.

current CPU frequency is 1.20 GHz (asserted by call to hardware).

current     policy: frequency should be within 600 MHz and 1.20 GHz.

current CPU frequency is 1.20 GHz (asserted by call to hardware).

current policy: frequency should be within 600 MHz and 1.60 GHz.

current CPU frequency is 1.60 GHz (asserted by call to hardware).

current policy: frequency should be within 600 MHz and 1.60 GHz.

current CPU frequency is 1.60 GHz (asserted by call to hardware).

执行 cyclictest 工具查看内核实时性能。

root@apalis-imx8:~# cyclictest -n m -S -p 99     --policy=fifo -i 431 -H 300

# /dev/cpu_dma_latency set to 0us

policy: fifo: loadavg: 0.42 0.31 0.13 2/399     834

T: 0 (      829) P:99 I:431 C:  59963     Min:      6 Act:    8 Avg:    9 Max:      24

T: 1 (      830) P:99 I:431 C:  59962     Min:      5 Act:    5 Avg:    6 Max:      26

T: 2 (      831) P:99 I:431 C:  59962     Min:      5 Act:    7 Avg:    6 Max:      20

T: 3 (      832) P:99 I:431 C:  59962     Min:      5 Act:    6 Avg:    6 Max:      21

T: 4 (      833) P:99 I:431 C:  59962     Min:      4 Act:    5 Avg:    6 Max:      20

T: 3 (      832) P:99 I:431 C:  60517     Min:      5 Act:    7 Avg:    6 Max:      21

T: 4 (      833) P:99 I:431 C:  60517     Min:      4 Act:    7 Avg:    6 Max:      17

T: 5 (      834) P:99 I:431 C:  60517     Min:      3 Act:    5 Avg:    4 Max:      12

下面链接是我们提供的包含实时内核的 BSP,可用于评估和测试。

总结

使用 Toradex Linux BSP 可以很方便集成 PREEMPT-RT 补丁,实现 real-time Linux。为了获得更好的实时性能,除了调整 Linux 内核配置,还需要关注文件系统,通常一个精简的文件系统,由于加载的应用软件或者驱动较少,可以避免占用 CPU 资源。在类似 Apalis iMX8 这种异构多核架构的处理器上会有额外的 Cortex-M4 核心,其可以运行 FreeRTOS提供硬实时能力。具体使用方法可以参考文末链接。

参考:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

imx8烧写Linux系统,RT-Linux在IMX8上的使用 的相关文章

  • 类的成员函数

    类的成员函数 1 拷贝构造函数 1 1 定义 1 2 特征 1 3 implementation 2 赋值运算符重载 2 1 定义 2 2 特征 2 3 implementation 1 拷贝构造函数 1 1 定义 构造函数 特殊的成员函数
  • 怎么在gitLab代码拉到本地

    怎么在gitLab代码拉到本地 新手从gitLab下载代码到本地 首先在本地上面创建一个空文件 然后在cmd里边输入 命令 1 cd C Users l Desktop 帝测科技 dou 创建的空文件路径 2 git clone http
  • amd 虚拟化怎么开_虚拟化技术 - CPU虚拟化

    物理机器是由CPU 内存和I O设备等一组资源构成的实体 虚拟机也一样 由虚拟CPU 虚拟内存和虚拟I O设备等组成 VMM VM Monitor 按照与传统OS并发执行用户进程的相似方式 仲裁对所有共享资源的访问 前面的文章对虚拟化技术进
  • windows下:“activate” is not a conda command

    问题描述 在windows下安装了anaconda并安装虚拟环境后 打开Anaconda Prompt窗口 执行 conda activate virtual env 时出现以下错误 CommandNotFoundError Command
  • 神州路由器DHCPv6中继服务配置

    配置如下 R1 Router gt ena Router conf R1 config ipv6 unicast routing R1 config int g0 1 R1 config g0 1 ipv6 add 2001 1 2 64
  • 在WPF中将数据从数据库导出到Excel的快速解决方案

    Spire XLS一种专业且功能强大的Excel API 使开发人员 程序员可以使用其应用程序操作Excel文件 没有Microsoft Automation Spire XLS可使编程变得更加简单 免费下载 本文将介绍一种将数据从数据库导
  • python增删改查界面_必看!!!python列表( 增 删 改 查),超详细讲解!!

    列表类型特有方法 不同的类型有自己不同的操作方法 对列表的操作有增删改查四种操作 1 增加操作 方法描述append追加 在列表的尾部加入指定的元素 extend将指定序列的元素依次追加到列表的尾部 合并 不会去重复内容 insert将指定
  • 身份证性别判断

    性别判断 param value return 1 女 2 男 public String execute String value value value trim if value length 15 if Integer parseI
  • 加速度计和陀螺仪指南

    本帖翻译自IMU 加速度计和陀螺仪设备 在嵌入式应用中使用的指南 这篇文章主要介绍加速度计和陀螺仪的数学模型和基本算法 以及如何融合这两者 侧重算法 思想的讨论 介绍 本指南旨在向兴趣者介绍惯性MEMS 微机电系统 传感器 特别是加速度计和
  • ReentrantLock详解

    一 AQS 1 AbstractQueuedSynchronizer AbstractQueuedSynchronizer简称AQS 是一个用于构建锁和相关同步器的框架 它依赖于FIFO的等待队列实现 见AbstractQueuedSync
  • FS技术总结

    技术总结 1 单机FIO测试 1 1 配置FS环境 1 2 配置 Linux NVMe over Fabrics 主机 1 3 FIO通过配置文件运行 1 4 双机 双fio测试 1 5 fio测试 2 优化代码 2 1 程序运行细节 3
  • 【JavaEE】多线程CAS中的aba问题是什么?

    博主简介 想进大厂的打工人 博主主页 xyk 所属专栏 JavaEE初阶 什么是CAS问题 CAS 全称Compare and swap 字面意思 比较并交换 CAS中的aba问题是什么 请看本文讲解 目录 文章目录 一 CAS是什么 二
  • Qt 串口调试助手16进制收发显示

    就不废话了 直接贴源码 如果你看懂我的源码的画 我认为90 的概率能解决你16进制显示问题 注意 注意 注意 qt低版本可能不提供arr hex 这个函数 源码 QString str ui gt lineEdit gt text 从QLi
  • C++函数中返回引用和返回值的区别

    一 主要讨论下面两个函数的区别 int at return m data int at return m data 上面两个函数 第一个返回值是int的引用int 第二个返回值是int 二者的区别是什么呢 我们先用一个语句 const in
  • ElasticSearch 单机、集群安装

    文章目录 ElasticSearch 基本概念 安装启动 集群配置 快速启动一个集群节点实例 集群的状态 ElasticSearch 基本概念 索引 含有相同属性的文档集合 类型 索引可以定义一个或多个类型 文档必须属于一个类型 文档 文档
  • vue自定义tree树组件

    组件内容
  • java类和对象及python中的类似实现

    一 java类和对象 首先 我们简单说一下类和对象的理解 所有男的这相当于一个 类 而某个具体的人就是一个 对象 类 当做对象的模板 对象 根据类创建 在java中 使用关键词new创建新对象 java中定义一个类 public class
  • Node常用命令

    1 Node 使用淘宝镜像 npm install g mirror config china registry http registry npm taobao org 查询当前镜像 npm config get registry npm
  • [CVPR-21] Robust and Accurate Object Detection via Adversarial Learning

    代码 https github com google automl tree master efficientdet Det AdvProp md 目录 摘要 引言 方法 AdvProp Det AdvProp 实验 质量实验 消融实验 摘

随机推荐

  • Python每日一练第5天——将一组数尽可能均匀地分成两堆,使两个堆中的数的和尽可能相等

    每日一练 做题 麦克叔叔去世了 他在遗嘱中给他的两个孙子阿贝和鲍勃留下了一堆珍贵的口袋妖怪卡片 遗嘱中唯一的方向是 尽可能均匀地分配纸牌的价值 作为Mike遗嘱的执行人 你已经为每一张口袋妖怪卡片定价 以获得准确的货币价值 你要决定如何将口
  • 【软件工程】之结构化设计

    结构化设计思考题如下 一 软件结构图 1 主要元素 2 形态特征指标 3 优化准则 1 模块独立性准则 2 软件结构的形态特征准则 3 模块的大小准则 4 模块控制域与作用域的准则 5 模块的接口准则 二 数据流模型 1 类型 1 变换流
  • QT中的信号与槽连接关系

    对于QT的信号与槽 进行一个信号连接两个槽 QT中connect的连接类型 AutoConnection在单线程中 按照默认的循序去触发相应的槽函数 DirectConnection在单线程中 对应的slot函数会被立刻调用 优先级高于主线
  • Angular开发(十四)-利用angular的http转发、即代理http 请求,处理项目中请求跨域的问题

    虽然angular的http请求中提供了jsonp处理跨域问题 但是不常用 我们web服务器端可能会选择别的方式处理 web服务器端使用nginx进行反向代理处理 使用nodejs中node http proxy解决本地开发ajax跨域问题
  • Com Surrogate

    昨晚 偶然间发现自己只要打开AVI格式的视频 电脑右下角的任务栏就会跳出一个小图标 并且COM Surrogate停止工作 问题事件名称 BEX 应用程序名 DllHost exe 应用程序版本 6 1 7600 16385 应用程序时间戳
  • How do I integrate my application with CXF

    http cxf apache org docs how do i integrate my application with cxf html Transports CXF支持 HTTP JMS Local等传输方式 Bindings C
  • Java文字转语音

    注意 只能在windows上使用 import com jacob activeX ActiveXComponent import com jacob com Dispatch import com jacob com Variant 文字
  • mongodb二进制操作

    https mongodb github io mongo cxx driver api legacy 1 0 4 bsonmisc 8h source html https github com waitman mongo cxx dri
  • 搜索引擎工作原理

    点击上方关注 前端技术江湖 一起学习 天天进步 作者 君额上似可跑马 https segmentfault com a 1190000019830311 搜索引擎的工作过程大体可以分为三个阶段 1 对网页进行抓取建库 搜索引擎蜘蛛通过抓取页
  • GDCM: 图像片段分割器(gdcm::ImageFragmentSplitter)的测试程序

    GDCM 图像片段分割器 gdcm ImageFragmentSplitter 的测试程序 include
  • Scala学习笔记(三)——类和对象

    3 1 类 字段和方法 类和字段与java类似 方法推荐尽量避免使用返回语句 尤其是多条返回语句 代之可以把每个方法当作是创建返回值的表达式 如下 3 2 分号推断 除非以下情况的一种成立 否则行尾被认为有分号 1 由一个不能合法作为语句结
  • 算法图解笔记(附PDF下载地址)

    算法图解笔记 分治策略 散列函数 广度优先搜索 狄克斯特拉算法 动态规划 算法图解 pdf版 链接 https pan baidu com s 1FJvija2NNmhOSpd7D3yE g 提取码 bwcm 分治策略 分治策略 分而治之
  • sqli-labs第三关

    初始页面 url入手 给个参数 id 1 回显正常 当我们给的参数是 id 1 时报错 说明他是字符型注入 原本的SQL语句加上我们给的就成了 id 1 回显报错 而且报错还多了一个括号 猜想SQL语句是这样的 select from us
  • 率先拿下512节点测试,华为GaussDB表示“很轻松”

    近日 在中国信息通信研究院和数据中心联盟发起的分布式分析型数据库测试中 华为GaussDB分析型数据库率先通过512节点集群规模能力评测 与此同时 中国某世界级银行也完成了采用华为GaussDB分布式分析型数据库对国外顶级数据仓库产品的完全
  • 每日风险投资速递(7月18日,14个互联网动态事件)

    1 传闻 阿里 魅族 传阿里9亿美元收购魅族40 股份 魅族副总裁李楠 魅族和阿里的确在酝酿合作 但融资消息并不属实 点评 顺藤摸瓜 2 动态 拍拍网 京东旗下拍拍网上线运营 对外公布在流量分发 用户分享 平台规则等多方面举措 其中PC店铺
  • 在MDK5中,warning:  #550-D: variable "d" was set but never used 的理解以及解释

    1 warning 550 D variable d was set but never used描述 变量 d 定义但从未使用 或者是 虽然这个变量你使用了 但编译器认为变量d所在的语句没有意义 编译器把它优化了 解决 仔细衡量所定义的变
  • 想跳槽涨薪的必看!2021年你与字节跳动只差这份笔记,大厂内部资料

    说白了 哪一个行业不是吃青春饭呢 无论哪个行业 大部分的从业人员都是在拿青春赌明天 而且很残忍的一个事实是 没有人的工作是不可取代的 如果你辞职 老板极力挽留 那就说明 你是那帮取代你的候选人当中最便宜的 市场在逐渐成熟 程序员的前景确实灰
  • java获取当前路径的方法

    参考网址 https www cnblogs com franson 2016 p 5728280 html 面临问题 需要在linux系统中run jar文件 运行过程包括文件IO 由于txt文件在windows系统中和在linux中路径
  • 0-1背包问题由二维数组转换为一维数组的理解

    对于0 1背包问题的话 可以使用一维数组来表示 我们要知道每一行的数据其实是依赖于上一行的数据 并不依赖于本行的数据 所以无论正序或者逆序更新一行的数据都不会需要本行的数据 但是为什么用一维数组更新时就要用逆序呢 其实是因为用一维数组更新时
  • imx8烧写Linux系统,RT-Linux在IMX8上的使用

    By Toradex胡珊逢 Real time Linux 是指在普通 Linux 内核打上 PREEMPT RT补丁后使内核满足实时要求 下面我们将使用 Apalis iMX8QM 介绍如何开启 Linux 5 4 的实时功能 首先需要下