树莓派Raspiberry 编译Linux实时内核PREEMPT-RT 实战
树莓派4B 实时内核(Preempt_RT)的配置和编译
https://blog.csdn.net/zlp_zky/article/details/114994444
基本按照这个blog来操作.
几点问题:
1. 官方raspios 只有4.19.y-rt 是打过补丁的,可以直接下载编译.
其它版本需要自己下载raspi 源码并打补丁.
-----------------------------------------------------------------
获取树莓派内核编译配置文件.config,该文件可从/proc/config.gz中获取,或者通过make生成
方法1:
$ sudo modprobe configs
$ zcat /proc/config.gz > .config
然后基于此 .config文件, 用树莓派的设定 修改它:
# KERNEL=kernel7
# make bcm2837_defconf (针对rpi 3b+)
#KERNEL=kernel7l
# make bcm2711_defconf (针对rpi 4b+)
---------------------------------------------------------------
(2)blog中编译命令
make -j4 zImage modules dtbs
其中 zImage 已经没有了(我的arm64平台上没有了). . . 可以直接编译成 deb的包形式,方便安装.
对应的编译目标为: deb-pkg
如下命令可以放到后台,之后关机睡觉, 第二天早上看是否编译完成
# nohup make -j4 zImage modules dtbs deb-pkg &> ~/maketask.out &
查看编译的命令:
# watch -n 0.5 tail ~/maketask.out -n20
查看后台make是否运行:
# ps -aux | grep make
3. 编译过程中, 会产生一个编译错误,导致编译退出. 建议先修改好源码, 在开始编译, 在关机睡觉~~~否则第二天一场空.
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
————————————————
解决: 采用此贴中的方法一, 并没有注释那行, 而是加上 extern 就好了.
https://blog.csdn.net/weixin_42792088/article/details/121657463
4. 编译完成后, 在源代码同一级目录下产生3个deb包:
linux-headers-4.19.71-rt24-v8_4.19.71-rt24-v8-1_arm64.deb
linux-image-4.19.71-rt24-v8_4.19.71-rt24-v8-1_arm64.deb
linux-libc-dev_4.19.71-rt24-v8-1_arm64.deb
5. 安装本地deb包, 没有yum localinstall xxx 的类似命令, 可使用gdebi代替:
# apt install gdebi-core
# gdebi linux-image-4.19.71-rt24-v8_4.19.71-rt24-v8-1_arm64.deb
6. 安装前是5.10的内核,但是不带实时补丁.
(https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2021-11-08/2021-10-30-raspios-bullseye-arm64-lite.zip)
Linux ProfinetPI 5.10.63-v8+ #1459 SMP PREEMPT Wed Oct 6 16:42:49 BST 2021 aarch64 GNU/Linux
测试实时性:
# apt-get install rt-tests
# cyclictest -t 5 -p 80 -n
新版本参数-n没有了, 改为次数10000, 即: -l 10000, 结果
# cyclictest -t 5 -p 80 -l 10000
WARN: cyclictest was not built with the numa option
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.24 0.17 0.10 1/134 262521
T: 0 (262515) P:80 I:1000 C: 10000 Min: 12 Act: 26 Avg: 22 Max: 178
T: 1 (262516) P:80 I:1500 C: 6669 Min: 11 Act: 29 Avg: 19 Max: 102
T: 2 (262517) P:80 I:2000 C: 5001 Min: 13 Act: 30 Avg: 23 Max: 196
T: 3 (262518) P:80 I:2500 C: 4001 Min: 14 Act: 29 Avg: 23 Max: 104
T: 4 (262519) P:80 I:3000 C: 3334 Min: 14 Act: 29 Avg: 23 Max: 135
7. 安装更改配置文件/boot/config.txt, 以切换新的内核.
$ vi /boot/config.txt 最后一行添加:
kernel=vmlinuz-4.19.71-rt24-v8
之后重启~~
8. 验证是否是刚编译的内核:
# uname -a
Linux ProfinetPI 4.19.71-rt24-v8 #1 SMP PREEMPT RT Wed Jan 26 01:35:13 CST 2022 aarch64 GNU/Linux
再次运行测试:
WARN: cyclictest was not built with the numa option
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.93 0.63 0.27 1/147 741
T: 0 ( 737) P:80 I:1000 C: 10000 Min: 9 Act: 30 Avg: 24 Max: 93
T: 1 ( 738) P:80 I:1500 C: 6673 Min: 9 Act: 30 Avg: 24 Max: 109
T: 2 ( 739) P:80 I:2000 C: 5005 Min: 11 Act: 33 Avg: 24 Max: 101
T: 3 ( 740) P:80 I:2500 C: 4004 Min: 10 Act: 32 Avg: 27 Max: 99
T: 4 ( 741) P:80 I:3000 C: 3336 Min: 11 Act: 29 Avg: 25 Max: 94
Max值好像小了不少. 总体差别不到 . . . . 空载时候估计也不会有啥差别, 等cpu任务繁忙时再测试.
树莓派Raspiberry 编译Linux实时内核PREEMPT-RT 实战的更多相关文章
- centos7编译linux的内核源码
昨天编译了一个linux 内核源码,遇到一些问题, 今天把我遇到的问题和解决方法分享给大家.希望可以帮助到需要的人. 1.检查是否安装了相应的包 我第一次编译的时候只安装的“Development T ...
- 了解Linux实时内核
了解Xenomai过程中,对现阶段的RTOS进行总结如下: 把现阶段的RTOS分成两个阵营: 非Linux阵营:VxWorks,RTEMS Linux阵营 :RT-linux,Preempt-rt,W ...
- Linux课程实践二:编译模块实现内核数据操控
一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...
- 编译Linux内核
下面的实验以 debian7.5 64bit 为例. 获取源码 获取 debian7.5 本身的源码非常简单: sudo apt-get install linux-source https://ww ...
- linux如何编译安装新内核支持NTFS文件系统?(以redhat7.2x64为例)
内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新.新的内核修订了旧内核 ...
- 如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录
最近帮一位上海的朋友搞一块小板,在ubuntu15.04 vivid上已经加载了对应了.ko驱动包 但关键是系统根本就枚举不到该声卡ALC5640,试了OpenSUSE也是一样的结果,看来是内核漏加载 ...
- Centos下编译Linux内核
Linux内核编译是一件简单却费事的事.但是独立的编译linux内核会帮助你很好的理解Linux内核的工作机理. 首先编译linux内核我们需要在当前linux操作系统下安装gcc编译器,因为我是Ce ...
- 编译linux内核时出错
在编译linux内核的时候使用make menuconfig 可能出现下面的错误 *** Unable to find the ncurses libraries or the*** required ...
- 重新编译Linux内核必要性及其准备工作
内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/u ...
随机推荐
- 一文搞懂CDN加速原理
开源Linux 长按二维码加关注~ 一.什么是 CDN CDN的全称是(Content Delivery Network),即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE ...
- CentOS 8及以上版本配置IP的方法,你 get 了吗
接上篇文章讲了 Ubuntu 18及以上版本的配置方法,本文再来讲讲 CentOS 8 及以上版本配置 IP 的方法. Centos/Redhat(8.x) 配置 IP 方法 说明:CentOS 8 ...
- 经过一个多月的等待我有幸成为Spring相关项目的Contributor
给开源项目尤其是Spring这种知名度高的项目贡献代码是比较难的,起码胖哥是这么认为的.有些时候我们的灵感未必契合作者的设计意图,即使你的代码十分优雅. 我曾经给Spring Security提交了一 ...
- 并发编程之volatile与JMM多线程内存模型
一.通过程序看现象 在开始为大家讲解Java 多线程缓存模型之前,我们先看下面的这一段代码.这段代码的逻辑很简单:主线程启动了两个子线程,一个线程1.一个线程2.线程1先执行,sleep睡眠2秒钟之后 ...
- 通过有序线性结构构造AVL树
通过有序线性结构构造AVL树 本博客旨在结局利用有序数组和有序链表构造平衡二叉树(下文使用AVL树代指)问题. 直接通过旋转来构造AVL树似乎是一个不错的选择,但是稍加分析就会发现,这样平白无故做了许 ...
- PHP_SESSION学习小结
PHP Session PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置.Session 变量存储单一用户的信息,并且对于应用程序中的 ...
- Docker部署mysql 5.7
Docker部署mysql 5.7 准备工作 在CentOS或者Linux创建部署目录,用于存放容器的配置和MySQL数据:目的是当重装或者升级容器时,配置文件和数据不会丢失.执行以下命令: a.创建 ...
- 110_Power Pivot特殊结算日期及财年日期
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 前几天看到群里有朋友在搞特殊结算日期,主要不是按照正常日期里的整月,按照比如:上月21号至本月20号作为结算周期 ...
- 简历应该怎么写,HR看一篇简历仅需要5秒吗,简历模板大全
哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 最近有很多小伙伴问奇哥,说奇哥 ...
- 关于『进击的Markdown』:第三弹
关于『进击的Markdown』:第三弹 建议缩放90%食用 我与神明画押,赌这弹markdown又双叒叕拖稿了 %%%Markdown!我的CSDN编辑器崩了呜呜呜 各路英雄豪杰,大家好! 我们要开 ...