- 博客(12)
- 收藏
- 关注
原创 V4L2 的 ioctl 调用流程
通过追踪,我们可以看到 Linux 内核中 VFS 层、V4L2 框架层、主机驱动与子设备分离架构,以及总线模型的经典配合。这种高度抽象的设计虽然增加了代码的调用深度,但换来的是极佳的代码复用性和系统稳定性。
2026-03-24 17:20:26
359
原创 Linux模块化编程基础
驱动模块传参允许在加载模块时动态传递参数,例如配置串口的波特率,从而避免重新编译模块,提高调试效率。核心宏:参数说明:实验代码 ():加载示例:1.2 内核模块符号导出内核模块之间是相互独立的,一个模块无法直接访问另一个模块的函数或变量。通过符号导出,可以将模块中的函数或变量导出到公共内核符号表中,供其他模块使用。导出宏:实验代码:导出模块 (math.c):使用模块 (hello.c):Makefile (同时编译两个模块):1.3 内核模块详细加载/卸载过程KO文件格式: 内
2026-03-23 13:42:38
551
原创 T113S3系统移植(基于T113S3 TinaSDK5.0V1.2)
通过上述四个核心阶段的深度拆解与实战,我们完成了一块基于 T113-S3 芯片的新主板从“点亮”到“完全可用”的全链路移植闭环。向下扎根(底层破冰):理清了 SPI NAND 的启动逻辑,精准配置了 U-Boot 与 Linux Kernel 的软硬件交接点(FEX 与 DTS),并成功完成了 FL7707 MIPI 屏幕等非标外设的驱动级移植与时序同步。向上生长(系统重构):通过果断剥离 OpenWrt 黑盒的procd,换用线性可控的框架,彻底接管了系统的启动生命周期。
2026-03-19 16:09:28
797
原创 全志 Tina Linux 开发:ADB 权限问题与 gpio-keys 按键调试
学会利用dmesgudevadm和下的节点去探听底层的真实声音,所有的 BUG 最终都会无处遁形。
2026-03-18 11:32:12
351
原创 文件持久化和OSAL接口封装架构
OSAL 是操作系统抽象层(Operating System Abstract Layer)的缩写。在嵌入式开发中,系统可能会面临跨平台的需求。例如,当前项目在 Linux 系统下运行,创建线程使用的是。但如果将来项目需要移植到 FreeRTOS 上,它的任务创建函数变成了。如果没有抽象层,我们就需要全局搜索并修改所有调用了的业务代码,不仅工作量大而且极易引入 Bug。因此,我们通过搭建 OSAL 层,让应用层统一调用类似的抽象接口。更换系统时,只需重写这个接口的底层实现即可,实现完美解耦。
2026-03-17 10:39:03
491
原创 进程间通信IPC
Ctrl+CSIGUSR1信号量初始值作用sem_writer1相当于“令牌”。Writer 拿到令牌后写入,写完不归还给自己,而是给 Reader。sem_reader0相当于“通知”。当其 > 0 时,Reader 知道数据准备好了,读完后把“令牌”还给 Writer。**掌握这些底层机制,不仅是为了编写更高效的代码,更是为了在面对复杂的系统架构设计时,能够从容不迫地选择出那把最合适的“钥匙”。**希望这篇指南能成为你 Linux 编程之路上的垫脚石。
2026-03-10 16:26:39
457
原创 Linux 内核与驱动调试指南
优秀的驱动开发工程师不仅需要具备扎实的内核源码阅读能力,更需要建立体系化的排错思维。从printk的日志流分析,到devmem与i2c-tools的底层硬件验证,再到Ftrace与Crash的纵深剖析,灵活组合并运用上述调试工具链,将显著提升嵌入式 Linux 平台的系统开发与维护效率。
2026-03-08 21:44:52
575
原创 为什么不能在Linux消息队列中传指针?深入理解IPC、浅拷贝与虚拟内存
摘要: Linux进程间通信(IPC)中直接传递带指针的结构体会导致段错误。这是因为消息队列只进行浅拷贝,复制指针值而非指向的数据。而不同进程的虚拟内存空间隔离,使得接收方无法访问发送方的指针地址。解决方案是:1) 改用固定大小数组替代指针;2) 传递文件描述符而非内存指针;3) 使用共享内存配合同步机制。开发者必须理解操作系统的虚拟内存机制,避免跨进程传递无效内存地址。
2026-03-05 00:10:15
511
原创 深入理解Linux进程间通信:普通文件与流文件的底层读写差异
Linux系统中,普通文件和流文件(如管道)在进程间通信时存在关键差异。当父子进程通过fork()共享同一个文件描述符时,它们会共享底层文件表项中的文件偏移量(f_pos),导致父进程写入后子进程必须使用lseek重置偏移量才能读取数据。而非亲属进程独立打开同一文件时,内核会创建不同的文件表项,各自维护独立的偏移量,因此不需要lseek操作。理解这种底层机制对开发可靠的多进程应用至关重要,特别是在处理进程间通信和状态同步时。
2026-03-04 23:35:01
525
原创 VSCode + SSH 构建 Linux 远程 C 语言开发环境
通过上面三个简单的例子,我们可以看到:在 VSCode 远程环境中,从多文件管理、到底层 API 的智能补全,再到集成 AI 助手自动生成代码,整个开发体验得到了质的飞跃。Linux C 语言开发中,有大量重复性的结构体定义或模板代码,现在完全可以交给 AI 来完成。
2026-03-03 22:03:19
431
原创 GCC 交叉编译与链接技术笔记
不是的,如果代码在其他系统上运行,且没有相应的库时,解决办法就是使用静态库。程序只有经过编译才能够运行,虽然ARM 板性能越来越强,可以认为 ARM 板就相当于一台 PC,但它的性能再强也强不过 PC 机,在对上万个文件工程同时编译的话用arm可太浪费时间了,所以更多时候我们是在 PC 机上开发、编译程序,再把这个程序下载到 ARM 板上去运行。在链接阶段中,所有对应于源程序的.o文件,“-l”选项指定的库文件,无法识别的文件名(包括指定的“.o”目标文件和“.a”库文件)按命令行中的顺序传递给链接器。
2026-03-02 21:40:54
575
原创 ARMv7 架构的简单介绍
IMX6UL 使用 Cortex-A7 架构,简单介绍一下 Cortex-A7 架构的基础知识,如运行模式、切换模式、寄存器组等Cortex-A7 架构的运行模式有 9 种,分别为 User、Sys(System)、FIQ、IRQ、ABT(Abort)、SVC(Supervisor)、UND(Undef)、MON(Monitor)、Hyp 模式。除了 User 模式属于非特权模式,其它 8 种处理器模式都是特权模式,运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。
2026-03-02 21:03:23
676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅