- 博客(20)
- 收藏
- 关注
原创 JPEG库
本文介绍了JPEG图像压缩标准及libjpeg库的应用开发。JPEG是ISO制定的静态图像压缩国际标准,采用有损压缩技术去除人眼不敏感的高频信息,实现高压缩比。libjpeg是开源的C语言库,提供JPEG编解码功能。文章详细讲解了libjpeg库的交叉编译移植过程,包括源码下载、配置参数说明、编译安装步骤以及开发板部署方法。重点阐述了JPEG解码流程:创建解码对象、设置数据源、读取头信息、配置参数、执行解码、读取像素数据及资源释放。
2025-12-15 08:00:00
1255
原创 fb子系统
本文介绍了Linux内核中的Framebuffer(FB)子系统,它通过统一接口屏蔽不同显示设备的硬件差异。FB子系统在内核虚拟空间划分显存,屏幕控制器从中读取数据并显示。文章详细解析了FB子系统的工作原理、执行流程和核心数据结构(fb_info、fb_var_screeninfo等),并提供了多种应用示例代码:包括通过mmap映射显存、使用ioctl获取屏幕参数、显示单色背景以及BMP图片。特别说明了BMP图片显示时需要处理数据存储方向(从下往上)的问题,并给出了修正方法。最后还介绍了终端光标控制的命令。
2025-12-14 08:00:00
888
原创 Linux I2C子系统
I2C总线是一种常用的串行通信协议,由SDA(数据线)和SCL(时钟线)构成,通过上拉电阻保持高电平空闲状态。它具有多主从设备特性,支持7位/10位地址,传输速率可达100kbit/s至3.4Mbit/s。Linux内核将I2C子系统分为三层:设备驱动层、核心层和适配器驱动层,采用模块化设计提高移植性。关键数据结构包括i2c_driver(驱动方法)、i2c_client(设备信息)、i2c_adapter(总线适配器)等。
2025-12-13 08:00:00
1479
原创 Linux平台设备驱动模型
本文介绍了Linux内核中的平台设备驱动模型。主要内容包括: Linux 2.6内核引入的总线设备分类标准,以及平台总线(platform bus)的概念。平台总线是一种虚拟总线,用于管理SOC系统中的独立外设控制器。 平台驱动模型的分层结构,将驱动分为平台设备(platform_device)和平台驱动(platform_driver)两部分,提高了代码的可移植性和通用性。
2025-12-12 08:00:00
964
原创 Linux--设备树
本文介绍了Linux设备树的基本概念与应用。设备树(DTS)是描述硬件资源的文本文件,采用树状结构组织节点和属性,解决了传统平台总线模型下硬件描述代码冗余的问题。文章详细讲解了设备树的编译流程(DTS→DTB)、基本语法规则(根节点、子节点、属性定义)以及常用属性(reg、compatible等)的用法。特别说明了设备树如何通过compatible属性与驱动匹配,以及aliases、chosen等特殊节点的作用。
2025-12-11 08:00:00
1207
原创 Linux-input子系统
本文详细介绍了Linux内核中的输入子系统框架,包括其三层架构设计(事件处理层、核心层和设备驱动层)和关键数据结构。重点讲解了输入设备驱动开发流程:通过input_allocate_device分配设备结构体,设置支持的事件类型(EV_KEY/EV_REL/EV_ABS等)和具体子事件(按键值/坐标轴),使用input_register_device完成注册。
2025-12-10 08:00:00
1139
原创 Linux驱动--等待队列
文章系统介绍了Linux系统中的阻塞/非阻塞I/O机制与等待队列实现。阐述了Linux五种进程状态及其转换条件,重点分析了TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE两种休眠状态的区别。详细讲解了等待队列机制,包括数据结构定义(wait_queue_head_t)、核心API(wait_event/wake_up等)及使用场景,并提供了静态/动态初始化队列的方法。
2025-12-09 08:00:00
1490
原创 Linux内核工作队列
Linux内核工作队列机制详解 摘要:本文系统介绍了Linux内核中的工作队列机制。工作队列是一种将任务延后执行的机制,可用于中断底半部处理,支持休眠操作。文章详细阐述了工作队列的三种关键数据结构(work_struct、workqueue_struct、cpu_workqueue_struct)及其相互关系,对比了共享工作队列和自定义工作队列的优缺点。
2025-12-08 08:00:00
962
原创 Linux内核tasklet机制
本文介绍了Linux内核中的tasklet机制及其在中断处理中的应用。tasklet是一种特殊的软中断,用于实现中断处理的底半部,具有在SMP系统上不会并发执行的特性。文章详细阐述了tasklet的数据结构tasklet_struct及其成员功能,包括状态管理、绑定函数和参数传递等。同时提供了tasklet的API使用方法,包括静态/动态初始化、调度控制等关键操作。
2025-12-07 08:00:00
1360
原创 Linux内核定时器
本文介绍了Linux内核定时器的核心特性和应用方法。主要内容包括:1)定时器特征:基于系统心跳节拍、支持多段定时但精度不高;2)核心数据结构timer_list及其成员解析;3)时间转换函数和定时器操作API(初始化、注册、注销等);4)实际应用示例,重点展示了如何利用定时器实现按键消抖功能,通过中断触发定时器并在回调函数中检测稳定状态,有效解决了机械抖动问题。文中提供了完整的驱动代码实现方案,包括定时器初始化、中断处理和状态读取等关键环节。
2025-12-06 08:00:00
1441
原创 Linux设备驱动-中断编程
本文介绍了Linux中断机制在Cortex-M4架构开发中的应用特点。主要内容包括:1) Linux中断处理采用顶半部/底半部机制,顶半部处理紧急操作,底半部执行耗时任务;2) 详细解析了中断共享机制及内核API函数(request_irq、free_irq等)的使用方法;3) 针对RK3399平台,说明设备树配置中断的方式;4) 提供了按键驱动的实现示例,包含中断注册、处理函数编写及用户空间交互。
2025-12-05 08:00:00
1250
原创 字符设备驱动标准unlocked_ioctl接口
本文介绍了Linux内核中unlocked_ioctl接口的功能与实现。该接口用于设备参数配置和查询,与数据传输操作分离,从Linux 3.0开始由ioctl更名而来但功能不变。文章详细说明了ioctl系统调用的使用方法,包括命令定义、参数传递和错误处理。重点阐述了unlocked_ioctl驱动实现方法,包括命令编码规则(31-30位方向、29-16位数据大小、15-8位魔数、7-0位编号)、标准命令合成宏(_IO、_IOR、_IOW、_IOWR)及其分解方法。
2025-12-04 08:00:00
1050
原创 Linux内核gpiolib
Linux内核GPIO接口操作详解 Linux内核通过gpiolib提供了标准化的GPIO操作接口,开发者无需直接操作寄存器。
2025-12-03 08:00:00
1158
原创 Linux字符设备标准读写接口
本文介绍了Linux系统中物理地址与虚拟地址转换机制,重点分析了RK3399芯片的GPIO控制方法。主要内容包括:1) Linux内存管理机制,通过ioremap实现物理地址到虚拟地址的映射;2) RK3399的GPIO模块架构,包括5组控制器及其寄存器操作;3) 用户空间与内核空间数据交换的安全方法;4) 完整的LED驱动实现示例,涵盖字符设备接口、GPIO控制逻辑及用户态交互。文章通过NanoPC-T4开发板的LED控制案例。
2025-12-02 08:00:00
919
原创 Linux字符设备驱动模型
本文系统介绍了Linux设备驱动的核心概念与编程模型。主要内容包括:1)Linux空间划分与系统调用机制;2)设备分类(字符/块/网络设备)及文件描述符原理;3)三种字符设备驱动模型(杂项设备、早期经典模型和Linux2.6标准模型)的实现方法;4)自动创建设备节点技术。重点剖析了设备驱动的文件操作方法实现、设备号管理机制,并通过代码示例演示了各类驱动模型的注册/注销流程。文章详细对比了不同驱动模型的特征差异,为Linux设备驱动开发提供了全面的技术参考。
2025-12-01 08:00:00
1011
原创 Linux内核模块开发编程
本文系统介绍了Linux内核模块的开发方法。主要内容包括:1) 内核模块的基本概念和优势,如动态加载、减小内核体积等;2) 模块开发的核心要素,包括加载/卸载函数、许可证声明、参数传递和符号导出;3) 模块编译的Makefile模板和独立编译方法;4) 内核专用printk函数的日志级别机制;5) 多种模块编程形式,包括单文件模块、模块间依赖、多文件模块等。文章通过示例代码详细展示了模块开发的具体实现,包括模块初始化、参数传递、函数导出等关键技术点,为Linux内核模块开发提供了实用参考。
2025-11-30 08:00:00
430
原创 根文件系统制作和NFS挂载
本文详细介绍了基于BusyBox构建嵌入式Linux根文件系统的完整流程。主要内容包括:1) BusyBox源码获取与配置,重点说明中文支持、共享库编译、交叉编译器设置等关键配置项;2) BusyBox编译安装过程,包括权限设置和动态库处理;3) 根文件系统目录结构创建,包括设备节点、配置文件(fstab/inittab/rcS等)的编写;4) 生成rootfs.img镜像文件的自动化脚本实现;5) NFS网络文件系统的配置与挂载方法,包括Ubuntu服务端设置和开发板客户端挂接。
2025-11-29 08:00:00
1437
原创 Linux内核裁剪、添加驱动菜单
Linux内核作为开源操作系统核心,具有多用户、多任务、跨平台等特性。本文介绍了内核发展历程、源码获取方式及目录结构,重点讲解了ARM64架构下的内核配置与编译方法,包括交叉编译器设置、模块机制支持、文件系统配置等关键步骤。同时详细说明了内核裁剪、NFS根文件系统支持、本地化设置等实用技巧,最后提供了编译依赖库安装及烧写流程,为嵌入式Linux开发提供系统指导。
2025-11-27 21:00:00
1070
原创 U-Boot编译及烧写
U-Boot(通用引导加载器)是嵌入式系统中常用的一种Bootloader。关于操作系统运行位置的问题:操作系统通常存储在硬盘等非易失性存储介质中,但在实际运行时需要被加载到内存中执行。以U盘安装系统为例,这一加载过程正是由Bootloader完成的。作为系统启动的关键组件,Bootloader主要承担以下初始化工作:关闭看门狗定时器和内存管理单元(MMU)、配置系统时钟和DDR时序、初始化堆栈空间、重新启用MMU,最后将操作系统内核加载到内存并启动执行。
2025-11-26 21:00:00
1477
原创 RK3399开发环境及配置工具使用
本节介绍了如何将主机上的固件文件,通过Type-C数据线,烧录到开发板的eMMC中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
2025-11-25 21:15:05
1457
Rockchip-RK3399TRM-V1.4-Part1-20170408.pdf【嵌入式系统】基于RK3399芯片的技术参考手册:系统架构与外设控制寄存器配置指南
2025-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅