- 博客(671)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 RK3568(使用buildroot添加软件包)
本文介绍了如何在Buildroot中创建自定义软件包。主要内容包括:1)在package目录下新建myapp文件夹;2)编写Config.in文件定义配置选项;3)创建myapp.mk文件指定构建规则;4)可选地添加myapp.hash文件进行源码校验。最后需要在package/Config.in中添加引用,即可通过make menuconfig启用该软件包。通过这种方法,开发者可以方便地将本地或远程的应用程序集成到Buildroot构建系统中。
2025-09-14 14:43:36
665
原创 RK3568编写自启动脚本
本文介绍了Linux嵌入式系统中自启动脚本的编写方法。自启动脚本通常存放在/etc/init.d/目录下,以S/K开头的数字编号控制启动/停止顺序。脚本包含Shebang、Init信息和case语句三部分,用于处理start/stop/restart命令。文章提供了/mnt/EasyLoggerLinuxDemo程序的自启动脚本示例,说明如何后台运行、停止程序及设置权限,并介绍通过update-rc.d命令注册开机自启。这种方法可实现程序开机自动启动、后台运行和统一管理。
2025-09-14 11:06:47
572
原创 RK3568 PWM驱动代码分析
RK3568 PWM驱动分析摘要 本文详细分析了Rockchip RK3568的PWM驱动实现,包括设备树配置与驱动源码的对应关系。设备树节点定义了寄存器地址、时钟、中断等硬件资源,驱动通过compatible匹配不同芯片版本(如pwm_data_v2)。核心数据结构rockchip_pwm_chip包含PWM控制器信息,驱动初始化时会映射寄存器、获取时钟并注册到PWM子系统。关键函数rockchip_pwm_config()和rockchip_pwm_apply()负责配置周期/占空比和使能控制,通过读写
2025-09-14 10:25:17
838
原创 RK3568 PWM子系统
Linux PWM子系统采用三层架构设计:硬件驱动层实现具体控制器操作(需填充pwm_ops结构体);框架层通过pwm_chip抽象控制器,管理所有PWM通道;消费者层通过统一API调用PWM功能。核心机制是驱动实现硬件差异(pwm_ops),框架提供统一接口(pwm_chip),上层应用只需关注PWM参数(周期/占空比/极性)。设备树绑定后,消费者通过pwm_config()等标准接口操作,框架将其转发至底层驱动完成寄存器配置,实现硬件无关的PWM控制。
2025-09-14 10:15:27
862
原创 RK3568 PWM驱动基础知识
本文介绍了RK3568芯片的PWM驱动基础知识。首先概述PWM在LED调光、电机调速等场景的应用,并解释其核心原理包括频率、占空比等关键参数。接着详细分析RK3568的PWM驱动支持,包括内核子系统和设备树配置,重点解析了PWM15节点的寄存器地址、中断号、时钟等硬件资源描述。最后说明PWM使用流程,从设备树配置到用户空间调用,帮助开发者快速实现对外设的精确控制。RK3568的PWM功能结合Linux子系统,为嵌入式开发提供了灵活的控制方案。
2025-09-14 10:01:58
613
原创 RK3568设备树文件之间的关系
它可以理解为“芯片的通用模板”,任何基于 RK3568 的开发板设备树,最终都会包含它。这个文件就是“某个厂商某个板子的具体硬件描述”,对应 datasheet 里的原理图。它相当于“参考板级配置”,不同厂商做自己的板子时,一般会基于它再做修改。最终合并后,编译生成的。
2025-09-14 09:51:05
615
原创 openssl使用SM2进行数据加密和数据解密
本文介绍了在Linux环境下使用OpenSSL实现SM2算法的完整流程。首先需要安装libssl-dev依赖并确认OpenSSL版本(1.1.1或3.0+)。C语言示例代码演示了如何生成SM2密钥对,使用公钥加密明文,再用私钥解密恢复明文,其中SM3作为默认哈希函数。编译时需链接crypto库,运行后会输出密钥生成成功、密文长度和解密结果。总结指出关键函数:EVP_PKEY_keygen()生成密钥对、SM2_encrypt()加密和SM2_decrypt()解密,推荐使用SM2+SM3+SM4的国密算法组
2025-08-31 15:34:34
1059
原创 SM2国密加密算法
SM2 = 国密椭圆曲线密码标准,包括签名、加密、密钥交换。安全性基于椭圆曲线离散对数问题 (ECDLP)。与 ECDSA / ECIES 不同之处在于:固定曲线参数、引入用户标识、配合 SM3。电子签名、电子政务、金融安全、TLS 国密套件、区块链。
2025-08-31 15:25:55
580
原创 MD5算法
MD5是一种128位的消息摘要算法,用于数据完整性校验、数字签名和口令保护等场景。它具有输入任意长度、输出固定长度、单向性和计算速度快的特点,但存在碰撞攻击风险,已不再适用于安全场景。在Linux下可通过OpenSSL库调用MD5 API,示例代码展示了如何计算字符串和文件的MD5值。当前推荐使用更安全的SHA-256或SM3算法替代MD5。
2025-08-31 15:20:18
457
原创 【百宝箱开放平台】上线啦!AI应用开发者看过来,10亿Tokens免费领~
通过提供OpenAPI、前后端SDK(Python、Java、Nodejs),以及可一键在Web页嵌入智能体对话界面的WebSDK等服务,助力用户在自己的业务流程中快速集成智能体对话、大模型效果盲测等多种AI应用场景,助力业务拥抱AI。平台支持智能体对话、大模型效果盲测等多种 AI 场景,帮助用户快速将 AI 融入业务流程,加速业务智能化升级。🎁 立即行动:访问平台官网 https://www.tbox.cn/open/open-introduce,注册即享开发资源与Token优惠,加速您的AI应用落地!
2025-08-11 10:09:01
314
原创 uinput
Linux的uinput机制允许用户空间程序创建虚拟输入设备,模拟键盘、鼠标等物理设备的输入行为。通过/dev/uinput接口,程序可以设置设备属性、发送输入事件并同步到内核。典型应用包括自动化测试、游戏控制、远程桌面等场景。使用时需加载uinput模块、处理权限问题,并注意同步事件通知内核。该机制通过input_event结构传递事件,最终由内核处理为真实输入,为系统级输入仿真提供了灵活的用户态解决方案。
2025-07-27 20:15:37
428
原创 input_handler和input_dev详解
摘要: Linux输入子系统采用分层架构,由input_dev(设备驱动层)、input_handler(协议驱动层)和input_handle(连接桥梁)构成。设备驱动通过input_dev注册硬件(如触摸屏、键盘),设置支持的事件类型;协议驱动通过input_handler提供用户空间接口(如/dev/input/eventX)。当两者匹配成功后,input_handle建立绑定关系,实现事件传递。核心流程为:驱动注册设备→协议处理器匹配→创建事件节点→用户程序读取输入。该设计实现了输入设备的统一抽象与
2025-07-27 09:53:05
934
原创 OTG原理讲解
摘要:USB OTG(On-The-Go)是USB 2.0的重要功能,允许设备在主机和从机间动态切换,实现设备间的直接通信。其核心机制是通过ID引脚电平判断角色:Micro-USB中接地为Host,悬空为Device;USB-C则通过CC引脚协商。电路设计需处理ID引脚连接和VBUS电源控制,MCU根据ID状态配置USB控制器模式。典型应用包括手机连接U盘、键盘等外设,极大扩展了移动设备的连接能力。
2025-07-26 20:20:02
1290
原创 USB驱动(URB)
本文介绍了Linux内核中USB驱动开发的核心概念URB(USB Request Block)。URB是主机与USB设备间传输数据的抽象结构体,包含目标设备、端点信息、数据缓冲区等关键字段。文章详细解析了URB的生命周期(分配、填充、提交、回调、释放)、四种传输类型(控制、批量、中断、等时)及其应用场景,并提供了鼠标设备的中断传输示例代码。最后强调了URB使用注意事项,包括DMA缓冲区分配、错误处理和资源释放等。URB作为USB驱动与内核通信的桥梁,是构建稳定USB驱动程序的基础。
2025-07-25 10:29:18
363
原创 UDP通信是否需要使用bind,connect,send等函数
本文系统讲解了UDP通信中connect、bind、send等函数的使用场景。bind函数用于绑定本地地址,接收端通常需要调用,而发送端一般不需要;connect函数在UDP中并非必须,但能简化固定对端通信并提升安全性;send/recv需配合connect使用,sendto/recvfrom则适用于多对多通信。文章通过对比表格和代码示例说明各函数区别,建议根据通信需求选择:固定对端用connect+send/recv,灵活通信用sendto/recvfrom。最终强调UDP的"connect&q
2025-07-23 17:03:32
517
原创 C++中的虚继承
虚继承是为了解决多重继承中基类子对象被重复继承的问题,确保只有一份共享的基类子对象。概念描述虚继承为了解决菱形继承中基类重复的问题实现效果所有派生类共享一份虚基类子对象语法构造函数只有最底层派生类负责构造虚基类。
2025-07-23 14:44:33
450
原创 UDP中的单播,多播,广播(代码实现)
本文介绍了UDP三种通信方式的实现方法:单播(Unicast)通过指定目标IP和端口发送数据;广播(Broadcast)需要设置SO_BROADCAST选项向子网广播地址发送;多播(Multicast)通过多播组地址(224-239)发送,接收方需用IP_ADD_MEMBERSHIP加入组播。三种方式发送均使用sendto,接收都需bind端口,但广播和多播需要额外设置选项。
2025-07-20 16:16:00
409
原创 UDP中的单播,多播,广播
本文介绍了UDP协议的三种通信方式:单播、广播和多播。单播是一对一通信,使用单播地址,适用于点对点传输;广播是一对多通信,向子网内所有主机发送数据,适用于局域网服务发现;多播则是一对多通信,只发送给加入指定多播组的主机,可跨子网传输,适用于视频直播等场景。文章对比了三者的特点、地址类型、通信范围和网络开销,并提供了C语言代码示例。IPv6已取消广播仅保留单播和多播,多播需要网络设备支持IGMP/MLD协议。
2025-07-20 16:13:58
604
原创 FTP实现断点续传
本文介绍了一个使用C语言实现支持断点续传的FTP上传客户端方案。该方案基于标准FTP协议,不依赖第三方库,通过SIZE、REST和STOR命令实现断点续传功能。关键实现包括:采用被动(PASV)模式建立数据连接,分离控制连接与数据连接,通过SIZE获取远程文件大小确定续传偏移量,使用REST设置续传点,最后用STOR完成剩余数据上传。文中提供了完整的C代码实现,包含FTP客户端结构体、命令发送、响应解析、登录认证、文件大小查询和断点续传上传等核心功能模块,可有效应对网络中断导致的上传失败问题,提高大文件传输
2025-07-20 09:28:40
1002
原创 TCP断点续传
摘要: 本文详细解析TCP断点续传原理,并通过C语言实现秒级续传功能。断点续传通过记录文件偏移位置,避免网络中断后重复传输已完成部分。文章提供完整的客户端和服务端代码,客户端发送文件名和初始偏移,服务端返回已接收长度并定位续传起点,支持多线程并发处理。此外,还提出优化方向如协议标准化、完整性校验等,帮助开发者构建更健壮的文件传输系统。核心逻辑清晰,适合技术博客或公众号分享。
2025-07-20 09:20:21
652
原创 input子系统
Linux Input子系统是内核中用于管理各类输入设备的统一框架。它采用三层架构:驱动层负责硬件交互,核心层提供注册和事件上报接口,处理层通过/dev/input节点向用户空间提供访问。主要数据结构包括input_dev(设备描述)、input_event(事件封装)和input_handler(事件处理模块)。驱动开发涉及设备分配、属性设置、注册和事件上报流程,用户空间可通过读取设备文件获取事件。系统还支持虚拟输入设备(uinput)和提供多种调试工具,广泛应用于嵌入式设备、触摸屏、游戏手柄等场景,实现
2025-07-15 10:57:12
708
原创 libusb的同步和异步
本文介绍了 libusb 库中的同步与异步 USB 传输机制。同步传输简单易用但会阻塞线程,适合简单应用;异步传输非阻塞且性能更高,但编程复杂度较大,适合高速数据传输场景。文章详细讲解了两种传输方式的操作流程、关键函数和示例代码,并对比了它们的特性差异。最后总结了常见错误排查方法和使用建议,推荐从同步传输入门,逐步过渡到异步实现,同时强调了异步模式下必须正确处理事件的重要性。
2025-07-13 16:51:45
482
原创 使用libusb读取鼠标数据
本文介绍了使用libusb库读取USB鼠标数据的方法。主要内容包括:通过libusb_init初始化USB通信,获取设备列表并查找符合HID鼠标协议的设备(bInterfaceClass=3,bInterfaceProtocol=2);找到中断传输端点后,使用libusb_open打开设备并声明接口;最后通过libusb_interrupt_transfer循环读取鼠标数据包(通常每8ms发送一次),解析其中的按键状态和位移信息。文章提供了完整的代码框架,实现不依赖内核驱动直接与USB设备通信的功能。
2025-07-13 14:42:51
391
原创 理解 USB 的配置信息与接口信息:深入 libusb 的描述符结构
本文深入解析了USB设备的配置(Configuration)与接口(Interface)概念及其在libusb库中的数据结构。USB配置代表设备的一种工作模式,包含多个接口;每个接口描述设备的一项功能,如HID或音频接口,并可具有多个备选设置。libusb提供了三个关键结构体:libusb_config_descriptor表示配置信息,libusb_interface管理接口及其备选设置,libusb_interface_descriptor描述具体接口特性。文章还展示了通过libusb获取和打印接口信息
2025-07-13 14:34:56
830
原创 HID协议
HID(人机接口设备)协议是一种标准化的通信协议,用于规范计算机与鼠标、键盘等交互设备的数据传输。该协议通过描述符系统定义设备功能,核心是Report Descriptor,它规定了数据的组织格式。HID设备使用Input、Output和Feature三种报告类型进行双向通信,采用USB中断传输确保实时性。其优势包括免驱支持、跨平台兼容性和高度可配置性,适用于从标准外设到自定义设备的开发。相比CDC和MSC协议,HID在实时交互场景中更具优势,是嵌入式设备开发的理想选择。
2025-07-12 10:48:57
583
原创 libusb库关键函数讲解
本文介绍了一个基于libusb库的USB设备通信程序,主要用于连接特定VID/PID的USB设备(如鼠标或HID设备)并读取中断数据。程序流程包括:初始化libusb、打开目标设备、解除内核驱动绑定、声明接口控制权、获取设备描述符和配置信息、创建线程进行中断数据传输。关键函数详解了libusb_init()、libusb_open_device_with_vid_pid()、libusb_interrupt_transfer()等API的参数、返回值和使用方法。最后说明了完整的释放资源流程。该程序适用于需要
2025-07-06 16:31:51
766
原创 RK3568移植libusb库
libusb是一个开源、跨平台的USB 设备访问库,允许在用户空间中直接访问 USB 设备,无需编写内核驱动。它支持等多个平台,广泛应用于嵌入式开发、设备调试、USB 通信程序开发等领域。libusb是一个简洁高效的用户态 USB 编程接口,让开发者无需编写驱动就能实现 USB 通信,是嵌入式与桌面应用中控制 USB 设备的重要工具。
2025-07-06 10:34:04
1096
原创 STM32中实现shell控制台(命令解析实现)
本文介绍了一个轻量级嵌入式Shell命令系统的实现方案。该系统通过命令表结构存储注册命令,提供命令注册、查找和执行功能。核心模块包括:初始化函数cmd_init()、命令注册cmd_register()、命令查找cmd_find()和命令执行cmd_execute()。该系统采用统一接口设计,支持参数解析和命令扩展,具有结构清晰、资源占用少的特点,适用于嵌入式设备的人机交互和调试场景。示例展示了echo命令的执行流程,验证了系统的可行性。
2025-07-05 21:17:13
549
原创 STM32中实现shell控制台(shell窗口输入实现)
本文介绍了基于STM32平台的串口Shell控制台实现方案。该Shell包含命令输入缓冲与解析、光标控制、历史记录管理等核心功能模块,通过串口中断接收字符并实时处理。系统支持ANSI转义序列实现命令行编辑、历史命令切换等功能,采用环形缓冲区存储历史命令。关键函数包括shell_input_char()处理字符输入、shell_refresh_line()刷新命令行显示、shell_handle_enter()执行命令等。该方案具有异步接收、支持RTOS/裸机环境、可扩展命令接口等特点,适用于嵌入式系统调试,
2025-07-05 21:15:26
1224
原创 ZMODEM 接收端实现源码解析:以 rz 示例为例
摘要: 本文解析了一个基于C语言的ZMODEM协议接收端实现示例(模拟rz命令),适用于串口文件传输场景。程序通过文件接口抽象串口通信,实现了ZMODEM核心功能,包括帧头解析(ZRQINIT、ZFILE等)、数据块接收、CRC校验、断点续传及异常处理。重点剖析了协议状态机流程,如初始化响应、文件创建、数据写入及错误重传机制(ZRPOS)。该实现可作为嵌入式系统(如STM32)移植参考,建议替换串口驱动和存储接口以适应裸机环境。ZMODEM的流式传输和容错特性使其在固件升级等工业场景中具有实用价值。
2025-07-05 16:14:20
1069
原创 ZMODEM 协议简介
ZMODEM是一种高效可靠的串口文件传输协议,由Chuck Forsberg于1986年开发,支持批量文件传输、断点续传、流式传输和CRC校验。相比X/YMODEM,ZMODEM具有自动接收、连续发送和错误恢复等优势。其工作流程包括初始化、文件头发送、数据帧传输和结束确认,每帧包含头标志、类型、参数、数据和校验。ZMODEM广泛应用于嵌入式开发,如固件升级和文件传输,可通过lrzsz、XShell等工具实现。在STM32等嵌入式系统中移植ZMODEM需实现串口缓冲、协议解析和CRC校验等功能。
2025-07-05 15:54:16
705
原创 多线程 vs 异步
观点说明多线程 + 锁机制 是结构清晰、适合控制流程的传统方案,但易出错、扩展困难发布订阅模型 更具现代性、可扩展性强,适合模块化、大系统、高并发场景在资源有限的设备上,传统方案更安全可控;而在复杂业务和高性能平台上,异步架构更胜一筹工程的本质是权衡,选择适合场景的技术,远比盲目追求“先进架构”重要。如果你在开发过程中也面临“线程同步 vs 异步触发”的抉择,不妨根据你的项目规模、平台能力和团队经验来综合考虑。两种方式都有其生存空间,没有绝对的优劣,只有最合适的选择。
2025-07-03 10:44:07
794
原创 Linux 中发送邮件功能详解
本文介绍了在Linux系统中实现邮件发送功能的多种方法。首先讲解了邮件发送的基本原理是通过SMTP协议传输邮件。然后详细介绍了四种常用工具:mail命令简单易用,适合纯文本发送;sendmail功能强大但配置复杂;ssmtp轻量适合外部SMTP服务器;Python脚本则最为灵活。文章还提供了每种工具的具体使用示例和配置步骤,并建议根据实际需求选择合适方案。最后总结指出,掌握这些工具可以满足从简单通知到自动化程序的各种邮件发送需求。全文内容实用,操作性强,适合Linux用户学习邮件发送功能。
2025-06-29 09:33:17
716
原创 在 RT-Thread 中实现 Shell 控制台的设计与源码剖析
RT-Thread中的Finsh Shell是一个功能完备的命令行交互模块,支持脚本解析、历史命令和自动补全等功能。其核心架构包括shell线程、命令解析器和符号表注册机制。当用户输入命令时,Shell会通过串口接收字符,解析为AST并编译为虚拟机指令执行。Finsh采用动态注册方式管理命令,开发者可通过宏导出新增命令。此外,模块还提供历史记录、自动补全和用户认证等可选功能。Finsh Shell具有资源占用低、交互性强、扩展性好等特点,是嵌入式系统调试和管理的实用工具。
2025-06-28 21:06:00
792
原创 在单片机中如何实现一个shell控制台
本文系统介绍了在单片机中实现Shell控制台交互系统的原理与设计方法。Shell控制台作为串口命令行界面,包含输入系统、命令解析器、执行器和注册表四大核心模块,需重点关注输入完整性、命令扩展性、安全性和资源适配等设计要点。文章详细阐述了从字符接收到命令执行的完整交互流程,并提出了命令补全、历史记录等进阶功能方向。总体而言,嵌入式Shell的本质是将用户输入的字符串转化为可执行的函数调用,实现高效的人机交互和设备控制。
2025-06-28 21:03:25
1025
原创 多网卡与网关配置关系详解:是否能共用、如何分配、如何避免冲突
场景推荐配置方式单一默认出网通道只设一个默认网关多网段连接不同网络每个网段设对应网关,设置 metric 优先级双出口线路负载或容灾使用策略路由,按来源 IP 分流嵌入式或简易设备避免多个接口使用相同网关需控制 Socket 出口接口使用 SO_BINDTODEVICE 或策略路由多个网卡技术上可以共用网关,但条件苛刻,风险大。默认网关建议只配置一条,或使用 metric 和策略路由细化控制。策略路由是多出口环境下的标准方案。
2025-06-24 21:50:58
1170
原创 网络编程中的网关
网关本质上是一个连接两个不同网络的设备,它负责在两个网络之间转发数据。最常见的例子就是家庭或公司中的路由器,它连接了内网(如 192.168.1.x)和外网(如互联网)。在 TCP/IP 网络中,我们常说的“网关”通常是指默认网关(Default Gateway),用于将数据发送到不同子网或外部网络。核心要点说明网关是跨子网通信的关键中转站是将数据发往外部网络的“跳板”默认网关必须设置正确否则数据出不去多网卡环境需设置路由优先级避免冲突和路径错误Socket 可通过接口绑定控制出口。
2025-06-24 21:50:02
912
原创 RK3568音频设备使用
框架,支持多种音频接口(I2S、SPDIF、HDMI、USB Audio),并通过设备树、驱动与外设(如 Codec)结合。的 API 进行音频播放和录音,见上面你提到的 C 示例中使用。注意:驱动是否支持该 codec,要确认内核启用了。在 RK3568 平台上,音频设备的使用通常基于。的完整指南,适合移植和开发。
2025-06-22 10:53:05
1219
原创 RK3568移植lvgl后触摸屏无响应问题解决
摘要: LVGL移植后界面显示正常但触摸无响应?本文提供系统性排查方案: 1️⃣ 硬件排查:确认/dev/input/eventX设备存在且hexdump能捕获触摸事件; 2️⃣ 驱动配置:检查LVGL代码中设备路径是否匹配实际设备(如event0或event2); 3️⃣ 软件逻辑: 验证evdev_init()是否成功打开设备; 确保lv_indev_drv_register正确注册输入设备; 主循环中定期调用lv_timer_handler()处理事件; 4️⃣ 数据校验:在evdev_read()中
2025-06-22 10:04:52
912
原创 RK3568使用LVGL(rga的作用)
摘要: 在RK3568平台上,结合LVGL轻量级GUI库和RGA(Raster Graphic Accelerator)硬件加速模块,可显著提升图形界面性能。RGA支持图像缩放、旋转、格式转换等操作,降低CPU负担,适用于高帧率UI渲染。实现时需通过librga库调用RGA接口(如c_RkRgaBlit),在LVGL的flush_cb回调中完成显存加速写入。关键步骤包括初始化RGA、配置LVGL显示驱动、编译链接librga,并确保内核驱动和内存对齐要求。此方案适用于工业屏、车载仪表等高性能场景。
2025-06-21 11:18:04
1216
Cmake 3.27版本
2023-07-16
SG90舵机使用手册pdf
2023-06-13
STM32F407智能小车学习代码
2023-06-13
基于STM32智能小车
2022-12-17
智能指针的类型方法及使用方法
2023-03-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人