- 博客(77)
- 资源 (3)
- 收藏
- 关注
原创 Linux-搭建TFTP服务
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
2026-04-20 11:05:52
240
原创 系统移植-STM32MP1_Buildroot根文件系统移植
Buildroot 是一个开源的嵌入式Linux系统构建工具,旨在简化嵌入式系统的开发流程。它通过自动化的方式生成交叉编译工具链、根文件系统、Linux内核镜像以及引导程序,适用于资源受限的平台和快速开发需求。
2026-04-03 11:07:56
444
原创 系统移植-STM32MP1_BusyBox移植
BusyBox是一个集成了大量的Linux命令和工具的软件,像ls、mv、ifconfig等命令BusyBox都会提供。BusyBox就是一个大的工具箱,这个工具箱里面集成了Linux的许多工具和命令。一般下载BusyBox的源码,然后配置BusyBox,选择想要的功能,最后编译即可。
2026-04-02 15:04:29
438
原创 系统移植-STM32MP1_Linux内核移植
STM32MP1编译出来的Linux内核镜像文件为uImage,这是uboot所使用的内核镜像格式,通过在zImage镜像的前面添加0X40个字节的头部来得到uImage,这个需要mkimage工具来完成此工作。Linux驱动的时候都是编译驱动模块,然后在系统里面加载,加载的时候系统会验证模块,有时候会验证出错。内核移植涉及修改内容较多,为避免最后结果不符合预期,建议可以在有效修改后分步骤编译运行,查看结果,可以提高最后结果的正确性。设置开发板拨码开关,设置为000,也就是从USB启动,然后复位开发板。
2026-03-31 20:03:13
463
原创 系统移植-STM32MP1_U-Boot顶层Makefile分析
U-Boot顶层Makefile文件,Makefile是支持嵌套的,也就是顶层Makefile可以调用子目录中的Makefile文件。make用于编译uboot,主要工作就是生成二进制的u-boot.bin文件和其他关于uboot的文化,比如u-boot.stm32等等。README文件描述了uboot的详细信息,包括uboot该如何编译、uboot中各文件夹的含义、相应的命令等等。.u-boot.xxx_cmd是一系列的文件,这些文件都是编译生成的,都是一些命令文件。使用经过编译后的uboot源码目录。
2026-03-30 21:35:07
391
原创 系统移植-STM32MP1_U-Boot移植
这样的移植方式基本是不可能的实现的,这个工作一般是半导体厂商做的,半导体厂商负责将uboot移植到他们的芯片上,因此半导体厂商都会自己做一个开发板,这个开发板就叫做原厂开发板,比如学习STM32的时候听说过的discover开发板就是ST自己做的。正点原子STM32MP157开发板参考的是ST官方的STM32MP157EVK开发板做的硬件,因此在移植uboot的时候就可以将ST官方的STM32MP157EVK开发板为蓝本。,其中有一个uboot的压缩包,内容是本章移植的所有内容源码,含编译文件。
2026-03-30 17:08:18
431
原创 系统移植-STM32MP1_TF-A概述
TF-A是ARM可信任固件,是ARM官方提供的一个固件代码,它提供了统一的接口标准,方便不同的半导体厂商将自家的芯片添加到TF-A里面。ST就是在TF-A官方源码里面添加了STM32MP1系列芯片,通过在源码上打补丁文件,以支持STM32MP1芯片,这个补丁文件就是STM32MP1芯片对应的源码补丁文件。
2026-03-29 19:49:42
467
原创 系统移植-STM32MP1启动详解(BootROM)
由于STM32的IO复用功能,1个串口可能有多个IO可以使用,比如UART4的RX(接收)可以使用PI10、PH14、PA1、PA11、PB2、PB8、PC11、PD0或PD2,一共9个IO可以用作UART4_RX引脚,但是ROM代码里面的UART4_RX引脚肯定只会使用这个9个里面的其中一个,所以板子的串口引脚要和ROM代码里面的一致,否则就无法使用串口启动。boot1、boot2、RPMB这三个分区大小是固定的,用户不能修改,boot1、boot2分区存在的意义就是用于引导系统。
2026-03-29 11:31:59
513
原创 Linux驱动-Regmap子系统
Linux下大部分设备的驱动开发都是操作其内部寄存器,比如I2C/SPI设备的本质都是一样的,通过I2C/SPI接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如STM32MP157的PWM、TIM等外设初始化,最终都是要落到寄存器的设置上。Linux下使用i2c_transfer来读写I2C设备中的寄存器,SPI接口的话使用spi_write/spi_read等。I2C/SPI芯片又非常的多,因此Linux内核里面就会充斥了大量的i2c_transfer这类的冗余代码,再者,代码的复用性也会降低。
2026-03-28 14:06:41
342
原创 Linux驱动-SPI总线驱动
SPI,SPI全称是Serial Perripheral Interface,也就是串行外围设备接口。SPI是Motorola公司推出的一种同步串行接口技术,是一种高速、全双工的同步通信总线,SPI时钟频率相比I2C要高很多,最高可以工作在上百MHz。CS/SS,Slave Select/Chip Select,这个是片选信号线,用于选择需要进行通信的从设备。I2C主机是通过发送从机设备地址来选择需要进行通信的从机设备的,SPI主机不需要发送从机设备,直接将相应的从机设备片选信号拉低即可;
2026-03-28 10:02:52
369
原创 Linux驱动-I2C总线驱动
I2C是一种很常见的同步、串行、低速、近距离通信接口。Linux内核开发者为了让驱动开发工程师在内核中方便的添加自己的I2C设备驱动程序,更容易的在linux下驱动自己的I2C接口硬件,进而引入了I2C总线框架。与Linux下的platform虚拟总线不同的是,I2C是实际的物理总线,所以I2C总线框架也是Linux下总线、设备、驱动模型的产物。I2C是很常见的一种总线协议,I2C是NXP公司设计的,I2C使用两条线在主控制器和从机之间进行数据通信。
2026-03-27 20:29:22
397
原创 Linux驱动-设备树(DTS)下的platform设备驱动
上述设备驱动的分离引出了总线(bus)、驱动(driver)和设备(device)模型,比如I2C、SPI、USB等总线。在SOC中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux提出了platform这个虚拟总线,相应的就有platform_driver和platform_device。platform驱动框架分为总线、设备和驱动,其中总线不需要驱动程序员去管理,这个是Linux内核提供的,在编写驱动的时候只要关注于设备和驱动的具体实现即可。
2026-03-26 18:44:48
377
原创 Linux驱动-中断
每个中断都有一个中断号。在Linux内核中使用一个int变量表示中断号。在Linux内核中要想使用某个中断是需要申请的,request_irq函数用于申请中断,request_irq函数可能会导致睡眠,因此不能在中断上下文或者其他禁止睡眠的代码段中使用request_irq函数。request_irq函数会激活(使能)中断,所以不需要手动去使能中断。request_irq和free_irq////// \brief request_irq 申请中断/// \param irq 要申请中断的中断号。
2026-03-25 21:08:20
394
原创 Linux驱动-并发与竞争
信号量是同步的一种方式。Linux内核也提供了信号量机制,信号量常常用于控制对共享资源的访问。举一个很常见的例子,某个停车场有100个停车位,这100个停车位大家都可以用,对于大家来说这100个停车位就是共享资源。假设现在这个停车场正常运行,你要把车停到这个这个停车场肯定要先看一下现在停了多少车了?还有没有停车位?当前停车数量就是一个信号量,具体的停车数量就是这个信号量值,当这个值到100的时候说明停车场满了。
2026-03-25 15:05:15
330
原创 Linux驱动-pinctrl子系统和gpio子系统
Linux驱动讲究驱动分离与分层,pinctrl和gpio子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。大多数SOC的pin都是支持复用的,比如STM32MP1的PI0既可以作为普通的GPIO使用,也可以作为SPI2的NSS引脚、TIM5的CH4引脚等等。此外还需要配置pin的电气特性,比如上/下拉、速度、驱动能力等等。传统的配置pin的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问题(比如pin功能冲突)。
2026-03-25 11:39:52
381
原创 Linux设备树,DTS、DTB浅析
设备树(Device Tree),描述设备设备树的文件叫做DTS(Device Tree Source),DTS文件采用了树形结构来描述板机设备,也就是开发板信息,比如CPU数量、内存基地址、IIC接口上接了那些设备、SPI 接口上接了那些设备等。在下图片中,树的主干就是系统总线,IIC控制器、SPI控制器等都是接到系统主线的分支上的。通过DTS这个文件描述设备信息是有相关的语法规则的,并且在Linux内核中只有3.x版本以后的才支持设备树。
2026-03-24 23:36:47
399
原创 Linux驱动-字符设备驱动-含测试代码
字符设备是Linux驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如最常见的点灯、按键、 IIC、 SPI、LCD等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在详细的学习字符设备驱动架构之前,先来简单的了解一下Linux下的应用程序是如何调用驱动程序的, Linux应用程序对驱动程序的调用如图所示:在Linux中一切皆为文件,驱动加载成功以后会在/dev目录下生成一个相应的文件,应用程序通过对这个名为/dev/xxx。
2026-03-24 18:31:37
359
原创 Linux C语言线程CPU核绑定详解:pthread_setaffinity_np函数使用指南
减少CPU缓存失效提高内存访问局部性避免线程在不同核间迁移的开销精确控制任务在特定核上的运行本文将详细介绍Linux C语言中使用函数实现线程CPU绑定的方法、验证技巧和实际应用。
2025-11-26 16:02:02
1060
原创 系统可靠性分析:FMEA与FTA方法详解与应用实例
FMEA是一种自底向上的分析方法,通过系统化地识别系统中各组件可能的故障模式,评估这些故障对系统的影响,并优先处理那些风险最高的故障。核心特点预防性:在故障发生前识别潜在问题系统性:覆盖所有关键组件和功能量化评估:通过风险优先数量化风险等级FMEA是一种自顶向下的分析方法,从系统不希望发生的顶层事件开始,通过逻辑推理逐层分解,找出导致顶层事件发生的所有可能原因和组合。核心特点演绎性:从结果推导原因图形化:使用树状结构直观展示故障逻辑定量分析:可计算顶层事件发生概率。
2025-11-19 16:01:17
1359
原创 航空电子全双工交换式以太网(Avionics Full DupleX switched Ethernet,AFDX)
航空电子全双工交换式以太网,AFDX,ARINC664
2025-11-14 16:59:35
951
原创 控制器局域网(Controller Area Network,CAN)
控制器局域网(Controller Area Network,CAN),又称ARINC825协议,CAN是一种有效支持分布式控制和实时控制的串行通信网络,并发展成为串行总线标准协议(ISO 11898)。CAN最早是德国Rober Bosch(博世)公司在20世纪80年代为汽车应用而开发的多主机局域网络,用于汽车的检测和控制。发明之初是为了解决汽车上数量众多的电子设备之间的互连、通信问题,减少电子设备间繁多的信号线。
2025-11-14 14:58:56
1160
原创 DMA传输相比CPU的优势
DMA与CPU的关系是一种高效的专业化分工。DMA通过专用硬件控制器(DMA控制器,DMAC)接管系统总线,直接在内存与外设之间传输数据,无需CPU干预数据搬运过程。,但让CPU去执行大量的、简单的搬运工作则是一种巨大的资源浪费。DMA技术正是为了解决这一问题而诞生的,DMA的核心思想是将CPU从繁重的数据搬运工作中解放出来。若未准备好,CPU持续等待,若准备好,则逐字节/字搬运数据。:CPU发起I/O请求后继续执行其他任务,外设准备好数据时向CPU发送中断信号,CPU暂停当前任务,处理数据传输。
2025-11-13 10:27:04
859
原创 时间触发协议(Time-Triggered Protocol,TTP)
时间触发协议(Time-Triggered Protocol,TTP)是一种面向容错的分布式、高速、双通道总线型实时通信协议,同步传输带宽可达25Mb/s,异步传输带宽5Mb/s。由于TTP能提供分布式和严格确定性的通信服务,并采用冗余结构、错误隔离控制、时钟同步、成员机制和派系避免来保障分布式总线的通信性能,可应用于时间关键(time-critical)和安全关键(safety-critical)系统,如航空分布式控制系统等。
2025-11-11 23:45:00
1699
原创 Clonezilla备份还原Linux操作系统
tuxboot工具和Clonezilla镜像文件下载比较慢,特别是Clonezilla,已经下载好了,需要点击。启动U盘制作完毕后,在启动盘U盘目录中新建一个文件夹,用于存储备份后的Linux镜像文件。不同电脑进入BIOS方式不同,请自行百度搜索如何进入BIOS。不同电脑进入BIOS方式不同,请自行百度搜索如何进入BIOS。启动U盘(32G),备份后的Linux镜像文件也存入本U盘中。为第一选项,保存后重启可正常进入Clonezilla中,为第一选项,保存后重启可正常进入Clonezilla中,
2025-04-04 01:25:26
3621
转载 【转载】Linux 实时补丁 PREEMPT_RT 已并入内核主线 | 编译安装测试
什么是实时操作系统?_什么是实时系统-CSDN博客 天星小苑 于 2016-12-24 17:41:26实时性是指调度的时候,任务响应时间。windows一般是15ms,最大的问题是不能保证。比如平均值是1ms,但是随着系统负载的变化,有时甚至达到100ms,在这工业上是无法使用的。工业上一些应用要求必须有更高的时间精度,比如,一个电力监测系统必须在10ms内运行一次任务对电力运行状况进行监测,一旦时间不准,调度不到该程序运行,则无法保证对电力故障的及时响应。(链接已沉寂)
2025-02-13 23:13:27
820
原创 CentOS-Stream 9更换RT实时内核
上下键”选择项,“回车”进入,“左右键”选择“Select、Exit、Save、Load”按“左”、“右”键,选择“Exit”,一直退出到如下界面。一直“exit”退出配置界面,保存配置按“Yes”按“enter”键,按“上”、“下”键,选择。按“enter”键进入,配置如下图。并按“enter”进入,配置如下图。关闭防火墙并禁止开机启动。按“上”、“下”键,选择。按“上”、“下”键,选择。按“上”、“下”键选择。按“enter”键进入。按"上"、“下”键选择。更新GRUB启动菜单。
2025-02-13 20:41:14
1573
原创 CentOS-Stream 9更换国内(阿里)YUM源
centos-addons.repo 配置文件是 CentOS 系统中用于配置额外软件仓库(repository)的 yum 配置文件。这个文件允许用户添加除了基础仓库之外的额外软件包源,以便安装那些不在基础仓库中的软件包。centos.repo 配置文件是 CentOS 系统中用于配置 yum 软件仓库(repository)的文件。这个文件定义了 yum 从哪些 URL 地址获取软件包。CentOS9操作系统yum源配置文件主要有两个,分别是。
2025-02-13 20:34:20
6790
原创 CentOS 7.9-2207更换实时内核
按“Enter”键,按“上”、“下”键,选择Fully Preemptible Kernel (RT)“上下键”选择项,“回车”进入,“左右键”选择“Select、Exit、Save、Load”按“左”、“右”键,选择“Exit”,一直退出到如下界面。一直“exit”退出配置界面,保存配置按“Yes”按“enter”键进入,配置如下图。按“上”、“下”键,选择。按“上”、“下”键,选择。更新 GRUB 启动菜单。按“上”、“下”键选中。按“上”、“下”键定位。按“enter”键进入。
2025-02-06 16:01:00
1485
原创 Win10系统部署RabbitMQ Server
右键"我的电脑" -> “属性” -> “高级系统设置” -> “高级” -> “环境变量” -> "新建"系统变量。RabbitMQ是使用Erlang语言开发的,因此在安装RabbitMQ时必须安装Erlang。安装程序,选择"以管理员身份运行"。安装过程比较简单,一路Next。,以管理员身份打开cmd。进入解压后的目录下的sbin目录。,出现如下界面,账号和密码均为guest。一路点击"确定"使环境变量设置生效。下载安装包,安装已下载,可以从。系统变量中添加如下内容。
2025-01-22 11:04:27
1111
原创 网关相关知识
网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码:255.255.255.0)和192.168.7.13(子网掩码:255.255.255.0)的两个主机不是同一网段,想要进行互访就得需要网关。网关在传输层上实现不同网段的互连,所以同一网段中的主机互访不需要网关,只有不同网段的主机互访时才需要网关。
2025-01-16 22:14:13
638
基于正点原子STM32MP157开发板U-Boot移植
2026-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅