自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (9)
  • 收藏
  • 关注

原创 嵌入式编程-结构体指针奇地址访问问题

内存对齐是指数据在内存中的存储位置必须是其大小的整数倍。1字节数据(如char)可以存储在任何地址2字节数据(如short)必须存储在偶数地址4字节数据(如int、float)必须存储在4的倍数地址8字节数据(如double、int64_t)必须存储在8的倍数地址结构体指针赋值为奇地址导致程序崩溃的根本原因是内存对齐问题。在嵌入式系统中,由于处理器对内存访问有严格的对齐要求,未对齐的访问会导致硬件异常和程序崩溃。

2026-04-02 09:15:54 342

原创 DH密码交换的原理和示例

DH密钥交换是一种优雅而强大的密码学协议,它解决了在不安全信道上建立共享密钥的问题。其核心在于利用离散对数问题的困难性,使得攻击者无法从公开信息中推导出共享密钥。虽然DH密钥交换本身存在中间人攻击的风险,但通过与数字签名等技术相结合,可以构建更加安全的通信系统。在现代网络安全中,DH密钥交换及其变体(如椭圆曲线Diffie-Hellman,ECDH)被广泛应用于各种安全协议中,为互联网通信提供了基础的安全保障。

2026-04-02 09:15:04 551

原创 RSA加密解密原理和示例

已知n和e,要计算d,需要知道φ(n)要计算φ(n),需要知道p和q从n分解出p和q在计算上是困难的RSA算法的核心数学原理是欧拉定理的推广,确保加密和解密是互逆操作。在实际应用中,必须结合适当的填充方案和密钥管理策略,才能构建安全的加密系统。

2026-03-20 11:28:11 500

原创 TFTP服务端开源代码分析

本文件详细分析TFTP服务端的实现,包括数据结构、层次关系和工作流程。

2026-03-12 13:58:43 321

原创 TFTP客户端开源代码分析

本文件详细分析TFTP客户端的实现,包括数据结构、层次关系和工作流程。

2026-03-12 13:58:08 482

原创 Linux系统I2C子系统概述

Linux I2C子系统提供了一套完整的框架,使得开发者可以方便地编写I2C设备驱动。通过分层架构设计,将硬件细节与设备逻辑分离,提高了代码的可维护性和可移植性。同时,内核提供了丰富的工具和API,方便开发者进行驱动开发和调试。

2026-02-05 13:51:04 506

原创 Linux内核LED子系统概述

/ 注册触发模式// 触发LED事件// 注销触发模式Linux内核LED子系统提供了统一的LED控制框架,支持多种触发模式和硬件平台。通过sysfs接口和内核API,用户可以方便地控制LED设备,实现各种闪烁效果和状态指示。LED子系统的设计遵循了Linux内核的模块化原则,具有良好的可扩展性和兼容性,适用于各种嵌入式系统和工业应用场景。

2026-02-05 11:39:40 530

原创 Linux系统内核io_uring测试程序分析

425# endif426# endif427io_uring 提供了高性能、低延迟的异步 I/O 接口,适用于需要高吞吐量的应用场景。本目录中的测试程序展示了 io_uring 的各种使用方式和特性,为开发者提供了参考实现。通过合理配置和优化,io_uring 可以显著提高应用程序的 I/O 性能,特别是在高并发场景下表现优异。

2026-02-04 13:56:41 1343

原创 Linux内核GPIO工具概述

lsgpio: 列出GPIO信息gpio-hammer: 闪烁GPIO管脚gpio-event-mon: 监控GPIO事件这些GPIO工具提供了从用户空间操作GPIO管脚的便捷方式,展示了Linux GPIO字符设备接口的使用方法。工具之间通过共享实用函数库实现代码复用,提高了可维护性。lsgpio: 用于查看GPIO系统状态: 用于测试GPIO输出功能: 用于监控GPIO输入事件这些工具对于调试和测试GPIO功能非常有用,特别是在嵌入式系统开发中。

2026-02-04 13:54:48 762

原创 Linux内核tools目录概述

提供进程延迟统计工具。

2026-02-03 13:22:16 629

原创 Linux系统SPI测试程序源码分析

发送自定义十六进制数据,适用于简单的功能测试。spidev_test.c是一个功能强大的SPI设备测试工具,它提供了丰富的配置选项,可以满足各种SPI设备的测试需求。通过本文的分析,读者可以深入理解该程序的工作原理和参数配置方法,为SPI设备驱动开发和调试提供有力支持。

2026-02-03 10:03:59 626

原创 Linux系统驱动架构概述

这个架构设计使得Linux能够支持从嵌入式设备到服务器、从简单字符设备到复杂网络设备的广泛硬件平台。

2026-02-02 12:49:42 651

原创 Linux系统LED驱动程序源码分析

/ LED设备信息结构体// LED名称标签int gpio;// LED对应的GPIO编号// 是否低电平有效// 对应sysfs节点的kobject对象// sysfs属性结构体本文对LED驱动程序和设备树文件进行了详细分析,介绍了驱动的实现原理、设备树配置以及使用方法。该驱动采用平台设备驱动框架,支持设备树配置,通过sysfs文件系统提供用户空间接口,实现了对LED的灵活控制。

2026-02-02 12:49:06 423

原创 Linux内核时钟芯片DS3232驱动源码分析

0x000x010x020x020x030x040x050x050x060x070x0B0x0E0x800x040x020x010x0F0x800x040x020x010x110x140xFF236{ }这是设备树匹配表,定义了驱动支持的设备类型。字段指定了设备树中设备节点的compatible属性值,用于匹配硬件设备。宏将该匹配表导出到内核,以便设备树核心能够找到并匹配相应的设备。完整的功能实现:支持时间读写、闹钟设置、温度读取等所有DS3232芯片功能。

2025-12-30 17:02:23 788

原创 Linux内核DS1307驱动源码分析

mcp794xx, // MCP794xx系列// ... 其他型号// DS1307寄存器地址0x000x010x020x030x040x050x060x070x08// NVRAM起始地址// 寄存器位定义0x80// 时钟停止位0x40// 12小时制标志0x20// PM标志0x80// 控制寄存器输出位0x10// 方波使能0x02// 频率选择位10x01。

2025-12-30 10:51:52 702

原创 Linux驱动proc接口示例源码分析

define PROC_NAME "proc_example" // proc文件名// 模块参数,可通过insmod时指定PROC_NAME:定义了将在/proc目录下创建的文件名proc_value:模块参数,默认值为42:宏用于将变量声明为模块参数,格式为name:参数名type:参数类型perm:参数在/sys/module下的权限:为模块参数添加描述信息proc文件系统:提供了用户空间与内核空间的通信接口序列文件(seq_file):内核提供的简化文件内容生成的机制。

2025-12-30 10:50:24 610

原创 Linux驱动sysfs接口示例源码解析

/ 定义字符串缓冲区大小100。

2025-12-29 10:15:00 1217

原创 Linux驱动input子系统示例源码分析

/ 设备结构体// sysfs对象// 设备类// 设备:自定义设备结构体,包含 input_dev 指针和 sysfs 对象simk_class和:用于在 sysfs 中创建设备节点// sysfs属性结构体.attr = {.mode = 0666, // 可读可写},.show = NULL, // 读取函数(暂不实现).store = inputkey_store, // 写入函数// 声明sysfs属性组NULL,

2025-12-26 15:23:04 728

原创 Linux驱动tasklet示例源码分析

256// 全局变量// 互斥锁用于保护共享资源// Tasklet 相关变量// Tasklet 执行计数和CLASS_NAME:定义设备名称和类名称BUF_SIZE:定义缓冲区大小:存储字符设备的主设备号:设备类指针:字符设备结构体message[]和:用于存储从用户空间接收的数据:互斥锁,保护共享资源访问:Tasklet结构体实例:原子变量,记录Tasklet执行次数:记录上次Tasklet执行的时间戳。

2025-12-25 09:29:27 707

原创 Linux驱动工作队列示例源码分析

本示例驱动展示了Linux内核中工作队列的基本使用方法,是学习异步处理机制的良好起点。通过字符设备接口接收用户数据,并在独立的工作队列中异步处理,可以有效避免在设备驱动的关键路径上执行耗时操作。工作队列是Linux内核中处理延迟执行任务的重要机制,特别适用于需要执行I/O操作、复杂计算或其他可能阻塞的任务的场景。正确使用工作队列可以显著提高系统的响应性和稳定性。

2025-12-24 11:33:46 724

原创 Linux驱动内核线程示例源码分析

include <linux/slab.h> /* 用于kzalloc/kfree */这些头文件提供了内核模块开发所需的基本API,包括内核线程管理、进程调度、错误处理、延迟函数和互斥锁等功能。模块信息声明定义了模块的许可、作者、描述和版本信息。明确的退出机制:始终实现检查,并响应停止请求状态管理:在休眠前正确设置线程状态,在退出前恢复为资源保护:使用适当的同步机制保护共享资源错误处理:对所有可能的错误情况进行处理,避免在错误状态下继续运行可配置性:使用模块参数使线程行为可配置。

2025-12-23 14:30:15 917

原创 Linux驱动定时器示例源码分析

int count;timer_data结构:定时器结构体int count:计数器,用于跟踪定时器触发次数:定时器名称,用于日志区分my_data:全局指针,指向动态分配的timer_data实例定义模块的初始化和退出函数20hr_timer:高精度定时器结构体实例interval:定时器间隔时间,类型为ktime_t(纳秒级精度)count:计数器,用于跟踪定时器触发次数MAX_COUNT:最大触发次数宏定义传统定时器。

2025-12-23 11:15:27 503

原创 嵌入式Linux软件中断概述

c// SMP热插拔线程定义.store = &ksoftirqd, // 每CPU线程指针.thread_should_run = ksoftirqd_should_run, // 运行条件.thread_fn = run_ksoftirqd, // 线程函数.thread_comm = “ksoftirqd/%u”, // 线程名称.setup = ksoftirqd_setup, // 设置函数.cleanup = ksoftirqd_cleanup, // 清理函数。

2025-12-22 16:38:00 742

原创 Linux系统74HC595驱动程序解析(基于设备树配置的多设备)

8位串行输入8位并行输出三态输出缓冲级联能力强移位时钟频率可达25MHz主要引脚功能DS (SER):串行数据输入SHCP (SRCLK):移位寄存器时钟STCP (RCLK):存储寄存器时钟OE:输出使能(低电平有效)MR:主复位(低电平有效)Q0-Q7:并行数据输出Q7’:串行数据输出(用于级联)enum{GPIO_NUM_OE = 0, // 输出使能GPIO_NUM_DS, // 串行数据输入GPIO_NUM_SHCP, // 移位寄存器时钟。

2025-12-22 12:41:21 1395

原创 Linux系统PCF8575驱动程序解析

分层设计: 将设备框架与软件模拟I2C驱动分离,提高代码可维护性和可移植性设备树支持: 通过设备树动态配置GPIO引脚,增强驱动灵活性多种接口: 提供字符设备文件和sysfs属性文件两种用户空间接口并发安全: 使用互斥锁保护设备访问,确保并发安全软件模拟I2C实现: 不依赖硬件I2C控制器,可在任何GPIO上实现I2C通信该驱动程序可广泛应用于需要扩展GPIO接口的嵌入式Linux系统,如工业控制、智能家居、物联网设备等场景,通过PCF8575可轻松扩展16个额外的I/O引脚。

2025-12-19 14:49:21 807

原创 Linux系统设备树示例(同一个驱动支持多个设备)

在Linux设备树中,当同一驱动程序需要支持多个相同或类似设备时,可以通过定义多个设备节点来实现。

2025-12-18 10:12:48 466

原创 Linux系统 74HC595 驱动程序解析

分层设计: 将设备框架与硬件控制分离,提高代码可维护性和可移植性设备树支持: 通过设备树动态配置GPIO引脚,增强驱动灵活性多种接口: 提供字符设备文件和sysfs属性文件两种用户空间接口并发安全: 使用互斥锁保护设备访问,确保并发安全可扩展性: 支持级联多个74HC595芯片,扩展更多输出引脚该驱动程序可广泛应用于需要扩展GPIO输出的嵌入式Linux系统,如LED矩阵控制、数码管显示、继电器控制等场景。

2025-12-18 10:08:52 1035

原创 Motorola SD/MMC驱动源码分析

 今天重新看了一下Motorola的SD/MMC驱动源码,并结合以前的分析记录,做一个总结。以E680为例,按照初始化的过程进行分析。模块初始化函数module_init(e680_mmc_init);在函数e680_mmc_init里初始化定时器,定时器的function函数为e680_detect_handler,当卡插入或取出时调用该函数。init_timer(&e680_detection

2008-07-21 12:43:00 1152

原创 移植Motorola开源的SD/MMC驱动程序

移植Motorola开源的SD/MMC驱动程序首先感谢Motorola的开源精神,它告诉其他嵌入式linux的开发人员:你们不是一个人在战斗,不是一个人!好了,言归正传,下面将介绍我的移植过程。内核版本为linux-2.4.21,CPU是PXA255。下载motorola开源的SM/MM驱动程序源码https://opensource.motorola.com/sf/frs/do/listRe

2008-06-05 10:13:00 2021

转载 U-Boot的移植之(四)调试篇:下载U-Boot到目标板进行调试

U-Boot Practically Porting Guide Author: Aaron Wong aaronwong@engineer.com U-Boot的移植之(四)调试篇:下载U-Boot到目标板进行调试 编译完成之后,得到的几个重要文件是: (1) u-boot.bin: 116K,原始二进制文件,用于下载到启动

2008-05-29 10:34:00 693

转载 U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板

U-Boot Practically Porting GuideAuthor: Aaron Wong aaronwong@engineer.com U-Boot的移植之(三)实战篇:移植U-Boot到XSBASE270开发板1. 在U-Boot中添加XSBASE270目标板的定义具体方法可参考第一节,本篇给出部分细节和要点,假定$U-BOOT为源码根目录。

2008-05-29 10:12:00 768

转载 U-Boot的移植之(二)进阶篇:从源代码看系统启动过程

U-Boot Practically Porting GuideAuthor: Aaron Wong aaronwong@engineer.comU-Boot的移植之(二)进阶篇:从源代码看系统启动过程为什么要分析源代码?分析优秀的源代码本身就是一个学习的过程,也是进行深入研究的必经之路。不过在此我们的主要目的并非要研究U-boot或Bootloader技术本身,而仅仅是为了成功的

2008-05-29 10:09:00 643

转载 U-Boot的移植之(一)基础篇:添加新的目标板定义

U-Boot Practically Porting GuideAuthor: Aaron Wong aaronwong@engineer.comU-Boot的移植之(一)基础篇:添加新的目标板定义本文使用最新的U-Boot-1.3.0-rc2。U-Boot本身支持很多开发板,在其源代码中,每个板子都对应一个board/目录下的文件夹(笔者注:这并不确切,因为有的文件夹是供应商

2008-05-29 09:54:00 658

转载 Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区

Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区 参考资料:《Linux内核中的循环缓冲区》作者:西邮 王聪    严重感谢文章作者! 但是(可能是源码版本问题)有些结论并不正确: “而kfifo_init只会接受一个已分配好空间的fifo->buffer,不能和kfifo_free搭配,用kfifo_init分配的kfifo只能用kfree释放。” 阅读源码可以得出这

2008-05-29 09:00:00 581

转载 Linux设备驱动程序学习(3)-并发和竞态

Linux设备驱动程序学习(3)-并发和竞态今天进入《Linux设备驱动程序(第3版)》第五章并发和竞态的学习。 对并发的管理是操作系统编程中核心的问题之一。 并发产生竞态,竞态导致共享数据的非法访问。因为竞态是一种极端低可能性的事件,因此程序员往往会忽视竞态。但是在计算机世界中,百万分之一的事件可能没几秒就会发生,而其结果是灾难性的。 一、并发及其管理竞态通常是作为

2008-05-29 08:58:00 462

转载 Linux设备驱动程序学习(2)-调试技术

Linux设备驱动程序学习(2)-调试技术今天进入《Linux设备驱动程序(第3版)》第四章调试技术的学习。 一、内核中的调试支持在前面已经建议过:学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商通常会禁止发行版内核中的调试功能。为了实现内核调试,我在内核配

2008-05-29 08:56:00 640 1

转载 Linux设备驱动程序学习(1)-字符设备驱动程序

Linux设备驱动程序学习(1)-字符设备驱动程序今天进入《Linux设备驱动程序(第3版)》第三章字符设备驱动程序的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程序编写,来学习Linux设备驱动的基本知识。scull可以为真正的设备驱动程序提供样板。 一、主设备

2008-05-29 08:19:00 515

原创 linux bootp和tftp设置

Linux bootp和tftp设置PC端linux系统为Redhat 9。安装bootp下载bootp-2.4.3-7.i386.rpmrpm -ivh bootp-2.4.3-7.i386.rpm添加配置文件 /etc/bootp     service bootps         {          disable    =no          socket_type    =dg

2008-05-28 14:15:00 1373

原创 crosstool制作arm-linux交叉编译工具链

crosstool制作arm-linux交叉编译工具链今天使用crosstool制作了arm-linux交叉编译工具链,并且成功编译和运行u-boot-1.3.0。通过http://www.kegel.com/crosstool/了解crosstool。要制作的交叉编译工具链版本为3.3.2。具体步骤如下:下载crosstool-0.43.tar.gzmkdir      /home/wxm/

2008-05-26 16:50:00 918

原创 嵌入式Ramdisk

嵌入式Ramdisk首先在内核配置中选择对Ramdisk的支持,一般会在Block devices的选项中。其次在启动参数中设置root=/dev/ram0。然后修改arm/arm/arch-pxa/myboard.c(不同的板子不同)通过函数setup_ramdisk (1, 0, 0, 8192);   setup_initrd (__phys_to_virt(0xa1000000)

2008-05-19 15:37:00 866

Modbus RTU协议模块源码

实现了Modbus RTU协议的从站功能,包括协议解析、功能码处理、寄存器映射和数据收发等核心功能。

2026-04-01

C语言tftp服务端和客户端源码

C语言开发的在Linux平台上的TFTP服务器端和客户端。支持目录列表, 可变块大小,二进制传输模式。单独通信模块,方便移植到其他通信协议。

2026-03-12

轻量级的交互式命令行解析器

一个轻量级的交互式命令行解析器,提供了丰富的功能包括命令解析、TAB自动补全、命令历史记录以及可扩展的命令架构

2026-01-30

Linux驱动proc接口示例源码

Linux驱动proc接口示例源码

2025-12-30

源代码文件编码格式转换器

实现批量文件编码转换,支持'utf-8', 'gbk', 'gb2312', 'big5', 'ascii'

2025-07-18

qt-embedded-3.3.4的tslib补丁

qt-embedded-3.3.4的tslib补丁

2008-05-14

Android启动流程代码分析

详细分析Android系统启动流程,由eoeAndroid社区整理发布。

2012-05-11

Android系统移植技术详解

详细介绍在ubun系统下移植Android系统的过程。

2012-07-23

OV5640应用笔记(MIPI接口)

OV5640自动对焦摄像头应用笔记(MIPI接口)

2012-08-29

KINGSTON EMMC4.41参考设计

KINGSTON EMMC4.41参考设计 包括芯片技术资料、参考电路、初始化流程等。

2012-04-24

Eboot SD FAT

Eboot的SD卡升级源码,在210平台测试过。

2012-06-04

linux-2.4.21 patch

linux-2.4.21的补丁

2008-02-01

linux-2.4.21 pxa patch

嵌入式内核linux-2.4.21的PXA处理器的补丁

2008-02-01

patch-2.6.9-mainstone

linux-2.6.9内核补丁 mainstone开发板

2008-09-26

空空如也

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

TA关注的人

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