自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 repo使用介绍

repo工具提供了有效的多仓库管理方案,适合大型项目和协同开发。根据项目规模和需求,可以选择本地脚本、CI/CD 集成、Docker、远程服务器、或云服务等不同的部署方式,从而在灵活性、自动化、和环境一致性之间找到平衡。

2025-02-10 09:46:15 3481

原创 交叉编译工具链命名规则、以及如何生成交叉编译工具链步骤

交叉编译工具链的生成是嵌入式开发的重要环节。通过了解命名规则可以更清晰地配置和使用不同的目标架构工具链。在生成工具链时,推荐使用Buildroot或等工具来自动化流程,以便快速生成适合需求的工具链。手动构建工具链虽然灵活性高,但需要深刻理解每个步骤的依赖关系。

2024-11-04 10:04:48 2652

原创 ntp交叉编译 ntpdate时间同步

一般板子上都有ntpdate工具,可以直接使用。有出错的或者不能用的需要移植。芯片:imx8mp交叉编译工具链:aarch64-linux-gnuntp版本:ntp-4.2.8p5.tar.gzopenssl版本:openssl-1.0.1f.tar.gz (不建议使用其他版本,很多版本编译过不去)libevent版本:libevent-2.1.12-stable.tar.gz。

2024-11-02 13:01:39 1860

原创 Linux驱动开发 阻塞和非阻塞IO详细介绍

在 Linux 驱动开发中,阻塞(blocking)和非阻塞(non-blocking)I/O 是非常重要的概念,它们直接影响设备的性能、响应速度和系统的并发处理能力。

2024-11-01 10:09:00 1117

原创 Linux驱动开发 异步通知实现详解

信号(signal)使用 POSIX 信号机制,设备可以向进程发送信号,通知某个事件发生。常用的信号包括SIGIO(用于异步 I/O 通知)、SIGUSR1SIGUSR2等。信号适用于简单的通知模型,例如设备可用、读写完成等。poll和select通过poll和select系统调用,用户进程可以监视文件描述符的状态变化,如可读、可写等。设备可以通过改变文件状态来通知用户进程 I/O 操作已经完成。适合需要监视多个文件描述符的情况,如网络服务器的实现。异步 I/O(AIO)使用。

2024-10-31 09:34:55 1393

原创 Linux驱动开发 如何在设备树中描述中断信息

通常,中断控制器会在设备树中单独定义,以管理系统中的中断源。

2024-10-30 09:43:53 1118

原创 Linux驱动开发 中断上下文机制详解 中断上下文API使用详解

用于注册中断处理程序,绑定指定的中断号和处理函数。它是上半部的核心 API。irq: 要注册的中断号。handler: 上半部中断处理函数,类型为。flags: 中断的触发方式(如等)。name: 中断处理程序的名称,用于调试。dev: 设备指针,通常是设备的私有数据。返回值0 表示成功,负数表示错误。示例if (ret) {return ret;return 0;上半部使用通过注册中断处理程序,迅速处理硬件相关事务,并尽可能简短。上半部不能睡眠,也不能调用可能导致睡眠的函数。

2024-10-29 09:38:58 1178

原创 Linux驱动开发 Linux内核中断机制介绍

Linux 内核的中断机制提供了一种高效的异步处理机制,允许外部设备与内核进行快速交互。通过硬中断和软中断的分离,内核在保证实时性的同时,降低了中断处理程序对系统性能的影响。通过共享中断、中断负载均衡等机制,内核提供了灵活的中断管理能力,适应了多种不同的硬件平台。

2024-10-28 09:25:25 1029

原创 Linux驱动开发 内核时间管理 内核定时器使用 以及 从 应用层通过ioctl接口控制内核定时器

可以使用结构体定义定时器,并通过初始化。// 1 秒后调用首先,需要定义一个唯一的 ioctl 命令,以便用户空间应用程序能够通过该命令与内核模块进行交互。_IOW# define IOCTL_SET_TIMER _IOW('t' , 1 , int) // 设置定时器的周期 # define IOCTL_STOP_TIMER _IO('t' , 2) // 停止定时器。

2024-10-24 09:44:51 1945

原创 Linux驱动开发 pinctrl子系统和gpio子系统使用

在 Linux 内核中,和是与引脚控制和 GPIO 管理密切相关的两个子系统。它们主要用于嵌入式系统中,帮助驱动程序或应用程序与硬件的引脚和 GPIO 进行交互。这两个子系统常见于 SoC(System on Chip)平台上,用于处理引脚复用、多功能引脚配置、GPIO 方向设置和电平控制等任务。

2024-10-20 07:30:10 888

原创 Linux驱动开发 OF函数操作、pinctrl函数操作、gpio函数操作 介绍

在 Linux 驱动开发中,OF(Open Firmware)函数用于解析设备树(Device Tree)的信息。设备树是一种硬件描述机制,能够为驱动程序提供有关设备配置的信息。通过 OF 函数,驱动程序可以从设备树中获取相关的配置信息,如设备寄存器、GPIO 引脚、时钟等资源。这些都是通过设备树描述的信息,驱动程序通过 OF 函数获取并使用这些资源。子系统负责引脚的复用功能配置和电气特性(如上拉、下拉、驱动强度)的管理。通过这种方式,可以实现对 GPIO 引脚复用和电气特性的动态控制与管理。

2024-10-19 19:59:16 1018

原创 Linux驱动开发 platform设备注册详解

设备树注册:常用于嵌入式系统,通过设备树描述硬件资源,驱动通过compatible字段与设备匹配。资源管理。

2024-10-18 09:28:26 1101

原创 Linux驱动开发 platfrom架构驱动介绍

Linux 驱动的 platform 架构主要用于嵌入式设备中,它是 Linux 内核设备模型的一部分,旨在简化设备驱动的开发。Platform 设备和 platform 驱动架构提供了一种通用的方法来处理嵌入式系统中没有总线的设备。这种架构的关键在于将硬件和驱动程序分离,通过平台设备模型定义设备和驱动之间的接口。

2024-10-17 06:37:29 1693

原创 Linux驱动开发 私有数据以及goto对于错误的处理方法

私有数据通常是一个包含设备配置、资源等内容的结构体。

2024-10-16 09:23:58 972

原创 Linux驱动开发并发与竞争 信号量使用 互斥体(Mutex)使用

如果信号量的值为 0,调用获取操作的进程会被阻塞,直到信号量的值大于 0。在 Linux 驱动开发中,信号量是一种重要的同步机制,用于控制对共享资源的访问,防止并发访问造成的数据不一致或竞争条件。是一种常用的同步机制,用于保护共享资源,防止多个进程或线程同时访问临界区,从而避免数据不一致或竞争条件的发生。:信号量的值只能是 0 或 1,类似于互斥锁(mutex),确保同一时间只有一个进程可以访问临界区。:释放信号量,增加信号量的值并唤醒等待信号量的进程。尝试获取互斥体,如果无法获取则立即返回,不会阻塞。

2024-10-15 09:34:52 1370

原创 Linux驱动开发 自旋锁如何使用

在 Linux 驱动开发中,自旋锁(Spinlock)是一种常见的锁机制,主要用于在多处理器环境中防止数据竞争(race condition)。它是一种忙等待锁,适合在不允许进程睡眠的情况下进行短时间的临界区保护。下面将详细介绍自旋锁的工作原理、使用场景、API 详解以及注意事项。

2024-10-14 09:36:57 1290

原创 Linu网络设备驱动开发详解

网络设备是指计算机系统中用于连接和通讯的硬件部件,如网卡、调制解调器等。在 Linux 中,网络设备通过网络驱动程序与操作系统交互。在 Linux 网络设备开发中,使用多个 API 来管理和操作网络硬件。

2024-09-29 11:18:32 1038

原创 Linux 块设备开发学习

用途:注册一个块设备主设备号。使用:int major;// 0 表示动态分配设备号用途:注销已经注册的块设备主设备号。使用块设备开发是一个复杂但重要的任务,涉及到系统的存储管理。掌握相关知识和技术,可以有效地实现和优化块设备驱动,提高系统的性能和稳定性。

2024-09-28 11:17:27 1621

原创 Linux字符设备驱动开发

通过上述步骤可以开发一个简单的字符设备驱动程序。字符设备驱动的核心是通过结构体实现的操作函数,包括openreadwrite和release等。在用户空间编写简单的测试程序,使用open()read()write()系统调用与字符设备进行交互,从而验证驱动程序的正确性。

2024-09-27 11:04:15 884

原创 GDB调试使用方法

通过以上步骤,展示了如何使用 GDB 进行详细的调试,包括设置断点、查看变量值、修改变量、逐步执行程序和查看调用栈等操作。GDB 是 Linux 下开发调试的重要工具,熟练掌握后可以极大提高代码调试效率。

2024-09-26 10:54:16 669

原创 shell编程教程以及shell模板

Shell 脚本是由命令组成的文本文件,按照顺序执行,可以包含变量、条件判断、循环、函数等逻辑。Shell 脚本支持多种不同的 Shell,如bashshzsh等,其中bash是最常见的 Shell 环境。

2024-09-24 10:31:55 1146

原创 Makefile教程,以及Makefile程序编译模板

Makefile入门

2024-09-23 14:19:27 1735

原创 Linux编程之posix标准中文件操作API和内存管理API的使用办法

对文件进行操作和查询。它展示了从打开文件、写入数据、读取数据、获取文件状态到关闭文件的完整流程。在 Linux 环境下,你可以通过简单的编译和运行步骤测试这些 API 的实际使用效果。文件操作API用于与文件系统交互,如打开文件、读取数据、写入数据等。常见的文件操作API包括。函数分配了 1 KB 的内存,写入了一些数据,然后打印出来,最后解除内存映射。的文件,写入一段文本,然后读取并显示该文本,最后打印文件的大小。内存管理API主要用于动态内存分配和管理,常见的API包括。

2024-09-14 11:35:39 1142

原创 Linux编程之posix标准中线程管理API使用

POSIX标准中的线程管理API(POSIX线程,也称为pthreads)提供了一套用于创建、管理、同步和终止线程的接口。这些接口是多线程编程的核心工具,确保线程之间的正确协作和同步。

2024-09-13 10:49:23 1519

原创 Linux编程之posix标准中的进程管理API使用

在 Linux 编程中,POSIX 标准提供了丰富的进程管理函数,进程管理不仅是操作系统的核心功能之一,也是编写高效、稳定、安全应用程序的基础。

2024-09-12 15:19:15 580

原创 Linux编程之socket入门教程 socket通讯原理

在Linux网络编程中,**套接字(Socket)**是进程间通信的基础,用来在网络上不同主机间进行数据的发送和接收。套接字作为一种抽象的接口,它屏蔽了底层网络协议的复杂性,使得开发者可以专注于数据的传输。以下将详细介绍Linux网络编程中的Socket,及其相关操作和函数。

2024-09-11 11:16:36 1848

原创 Linux编程之进程间通讯 pipe管道入门 pipe例程

在 Linux 系统中,管道是一种用于进程间通信(IPC)的机制,它允许一个进程将数据输出到另一个进程的输入。管道有两种主要类型:匿名管道和命名管道(FIFO)。下面详细介绍pipe系统调用及其相关函数的使用方法,并提供示例、编译命令和输出结果。此外,我们将对比管道与其他 IPC 方法(如 Boost 库中的实现方式)。

2024-09-10 11:11:46 652

原创 I/O复用之 epoll使用详解 Linux编程

epoll提供了一种高效的 I/O 事件管理方式,适用于处理大量并发连接。通过合理使用epoll_ctlepoll_wait,以及选择合适的触发模式,可以在高并发场景下大幅提高程序的性能和可扩展性。

2024-09-09 14:00:52 1198

原创 posix timer定时器使用

POSIX定时器是基于POSIX标准(可移植操作系统接口)的一种定时器机制,主要用于在Unix-like系统中进行高精度的时间管理。POSIX定时器可以设置为在指定时间点或间隔时间后触发某个事件。它们通常用于需要高精度时间控制的应用,比如实时系统、定时任务等。POSIX定时器通常触发进程级别的信号。当定时器到期时,它会向进程发送一个信号,进程可以通过设置信号处理程序来处理该信号。虽然信号处理程序运行在进程的上下文中,但在信号处理程序中可以启动线程来执行特定任务。

2024-09-06 16:23:12 996

原创 数据结构之 队列入门 队列例程 队列例程分析

队列是一种基础的数据结构,广泛用于各种编程问题。它遵循先进先出(FIFO,First In First Out)原则,即最早插入的元素最早被移除。

2024-08-23 10:18:53 918

原创 数据结构链表入门指南 链表基本代码实现以及测试步骤

链表是一种数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。动态大小:链表的大小可以根据需要动态调整,不像数组那样需要事先定义固定大小。节点连接:每个节点通过指针连接到下一个节点,从而形成一个链状结构。灵活插入和删除:在链表中插入和删除节点通常比数组更高效,因为这些操作不需要移动其他元素。链表是一种灵活且高效的动态数据结构,适用于需要频繁插入和删除操作的应用场景。尽管它的内存开销和访问速度可能不如数组,但它的动态特性和高效的插入/删除操作使其在某些情况下非常有用。

2024-08-22 13:56:02 633

原创 二叉树入门学习 优势对比 以及 完全二叉树c++代码的实现

二叉树是一种常见的数据结构,它是一种树形结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。节点(Node):二叉树的基本单元,包含一个值以及指向左右子节点的引用。根节点(Root):树的顶端节点,没有父节点。叶子节点(Leaf):没有子节点的节点。子节点(Children):一个节点的直接下一级节点,包括左子节点和右子节点。父节点(Parent):一个节点的直接上一级节点。子树(Subtree):以某个节点为根节点的子树结构。

2024-08-21 16:47:06 930

原创 数据结构之 红黑树入门教程、红黑树代码示例

插入:在红黑树中插入节点与在普通二叉查找树中插入类似,但插入后需要通过重新着色和旋转来恢复红黑树的平衡性。插入操作保证了红黑树的高度不会变得过高。删除:删除节点后的树可能会违反红黑树的性质,因此删除操作通常需要进行多次旋转和重新着色,以恢复树的平衡性。查找:红黑树的查找操作与普通二叉查找树相同,通过比较键值,沿树路径查找目标节点。

2024-08-20 12:25:42 1038

原创 一文读懂PID、PID入门教程、串级pid 并级 pid例程以及分析

PID控制器是一种广泛应用于工业过程控制的经典控制算法。PID代表比例(Proportional)、积分(Integral)和微分(Derivative),这些术语描述了控制器如何根据系统的误差信号生成控制信号,以达到期望的系统输出。通过详细的PID、并级PID和串级PID的介绍和程序示例,你可以根据具体控制对象的复杂性、精度要求、动态响应要求等选择适合的控制方法。并级PID适用于单回路简单控制,而串级PID适合复杂系统的精确控制。调试过程中通过反复调整增益参数,最终达到理想的系统性能。

2024-08-19 15:12:01 3050 2

原创 BOOST c++库学习常用的Boost库函数及其示例 Boost库详细教程 Boost库综合示例和教程

以下是一些常用 Boost 库的详细功能介绍,包括具体函数的用法、示例代码及输出结果,以及与其他实现方式的对比优势。

2024-08-18 17:36:25 2395

原创 BOOST c++库学习 之 Smart Ptr库智能指针库入门实战指南 以及 使用boost.smartptr库以及使用普通指针且不释放内存的对比例程(需要实际运行,然后观察电脑内存的变化)

自动内存管理库通过引用计数、作用域管理等机制,实现了动态内存的自动管理。智能指针可以在超出作用域或不再需要时自动释放内存,避免手动管理可能引发的错误。Boost库中的智能指针提供了相较于普通指针更安全、更高效的内存管理方案。它们自动化的内存管理、生命周期控制、线程安全特性等显著减少了内存泄漏、悬挂指针、循环引用等常见问题,使得C++开发更加健壮和高效。因此,推荐在C++编程中尽量使用智能指针代替普通指针,特别是在管理动态分配的资源时。

2024-08-18 15:48:10 699

原创 BOOST c++库学习 之 lockfree库入门实战指南 以及 使用lockfree库时对比普通队列、栈的测试例子

库的无锁队列在高并发环境中提供了显著的性能优势。通过减少锁竞争和上下文切换,无锁队列能够实现更高的吞吐量、更低的延迟和更好的扩展性。这使得它在处理高并发问题时比普通队列更具优势。通过对比测试结果,可以看出无锁队列在实际应用中能够显著提高系统的性能。

2024-08-16 11:30:49 2174

原创 BOOST c++库学习 之 boost.mpi库入门实战指南 以及 使用 boost.mpi库实现进程间通讯(同步与异步的对比)的简单例程

Boost.MPI 提供了一系列简洁的 API,用于实现点对点通信、集体通信和异步通信等功能。: 初始化和管理 MPI 环境。: 表示一个通信通道,包含了所有进程的上下文。send/recv: 实现进程间的同步发送和接收操作。: 提供集体通信功能,如广播数据、收集数据。: 用于异步通信,使进程可以在等待通信完成时继续其他操作。

2024-08-15 12:29:54 1485

原创 BOOST c++库学习 之 interprocess入门实战指南 以及使用interprocess库实现简单进程间通讯功能的服务端、客户端测试 (共享内存)

共享内存管理接口这些接口允许创建、管理和访问共享内存。功能: 用于创建、打开和管理共享内存对象。关键函数: 打开或创建共享内存对象。: 设置共享内存的大小。: 删除共享内存对象。功能: 将共享内存对象映射到进程的地址空间中,便于访问共享内存中的数据。关键函数: 构造一个映射区域。: 获取映射区域的起始地址。get_size(): 获取映射区域的大小。allocator功能: 提供分配器,用于在共享内存中分配对象。通常与托管内存段一起使用。关键函数: 分配内存块。: 释放内存块。

2024-08-14 15:07:43 2700

原创 BOOST c++库学习 之 函数对象、高阶函数入门实战指南 包含boost.bind、boost.ref、boost.function、boost.lambda介绍以及测试例程

通用函数对象包装器,支持多种类型的可调用对象。Boost.Bind: 提供函数与参数绑定功能,生成新的函数对象。: 允许内联匿名函数,简化 STL 算法中的操作。: 扩展的功能,支持更复杂的表达式。: 将成员函数指针包装成可调用对象,用于函数传递和回调。这些工具为 C++ 开发者提供了强大的函数对象操作能力,特别是在函数式编程和回调机制中。

2024-08-13 13:47:22 457

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除