
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
当一个新硬件接入 Linux 系统时,内核是如何识别并管理它的?驱动工程师又该如何将硬件操作封装成应用可调用的接口?本文将从 “一切皆文件” 的设计思想出发,先梳理 Linux 设备分类与内核架构,再深入字符设备的源码实现,最终带你走完从裸机到应用层的完整驱动开发链路,揭开 Linux 驱动的神秘面纱。
内核空间布局了解,用户空间在分配内存的本质是规划虚拟空间,在第一次实际使用时候才会落实到物理内存

说明了宏内核、微内核的优缺点,并提到Linux的折中处理策略

不过注意:这是我们裁剪出来的最小Linux内核源码目录,我们写代码、编译通常是在Ubuntu系统下执行的,只不过由于Ubuntu中不好查看系统源码,所以我们先在Linux-mini中简单看了看,具体的代码编写也不会放在Linux-min目录下进行,而是在Ubuntu中写代码、交叉编译后传输给QEMU中的Linux执行。注意:这里一定要配置QEMU下Linux内核的路径,因为我们以后写的驱动代码是在
Linux 内核驱动开发听上去很 “高大上”,其实本质就是—— 用户态程序是跑在 glibc 库搭好的 “舞台” 上,调用它封装好的函数;而驱动开发,就是要走到这个 “舞台” 的最底层,去实现 glibc 本身都要依赖的那些内核接口,是打通应用与硬件的关键一环。
在物联网飞速发展的当下,各种设备都具有了联网的可能,他们可能通过蓝牙芯片、网卡设备与其他网络设备产生关联。但是你有没有想过,在物联网概念出来前,各个单片机是如何通信的?其实很简单,直接采用物理导线连接的方式连接即可。而串口通信作为一种经典、成熟、便捷的异步通信技术,在许多工业场景中都有着重要作用,而如今成为各设备短距离数据交互的主流方案。全双工通信:支持同时进行数据的发送和接收。异步传输:通信双方
Reactor的产生过程,采用这种设计模式对于编程有什么好处,网络epoll是如何使用Reactor模式的?并且提供了一份通用的示例代码,后续可以直接在这个代码上进行应用层的封装。

单例模式作为最常见的设计模式,本文从新手思考的方式,逐步完善。最后用到C++11的局部静态变量magic static的特性简化代码,并将其封装成一个模板基类,方便后续开发的使用。

本文梳理了i.MX6ULL与STM32在启动流程上的差异,核心源于芯片工艺与存储设计的不同:先进工艺难以集成大容量Flash,故i.MX6ULL需外接eMMC,依赖BootROM加载SPL和U-Boot完成硬件初始化。由于板卡配置多样,掩膜ROM仅做最简读取,后续由可定制的SPL和U-Boot完成DDR、eMMC等复杂初始化。为解决启动死锁,SPL先在OCRAM中初始化DDR,再将完整U-Boot

本文系统解析STM32开发中的三大核心概念:一、CMSIS与HAL库的关系,阐明标准库历史背景、HAL统一接口优势及胶水层适配作用;二、对比哈弗与冯诺依曼架构,从流水线角度解释STM32采用哈弗架构以提升实时性;三、阐述统一编址机制,说明CPU仅通过地址访问外设,总线矩阵实现硬件区分。全文揭示STM32在架构设计与软件生态上的深层考量。








