avatar
Articles
140
Tags
0
Categories
18
首页
归档
标签
分类
友链
李瑞琦的博客
首页
归档
标签
分类
友链

李瑞琦的博客

13 FrameBuffer设备
Created2025-06-04|04-Linux03-内核开发
FrameBuffer设备
12 内存与IO空间的访问
Created2025-06-04|04-Linux03-内核开发
内存与IO空间的访问内存和IO的硬件机制内存空间和IO空间 IO空间:x86架构CPU中的一个概念,代表了外设寄存器地址空间,通过特定指令访问 内存空间:大多数嵌入式CPU并没有IO空间,仅存在内存空间。可以直接通过地址、指针访问 内存管理单元内存管理单元(MMU)是CPU的非常重要的一个组件,用于辅助OS进行内存管理,它的功能如下: 提供虚拟地址到物理地址的映射 内存访问权限保护 缓存控制:通过PTE的某些字段来控制缓存的行为,比如是否允许缓存、缓存写回策略… 转换旁路缓存转换旁路缓存(Translation Lookaside Buffer,TLB)是MMU的核心部件,它缓存少量的虚拟地址与物理地址的转换关系,是转换表的Cache,因此也经常被称为“快表” 转换表漫游转换表漫游(Translation Table...
14 阻塞与非阻塞IO
Created2025-06-04|04-Linux03-内核开发
Linux阻塞与非阻塞IO阻塞与非阻塞的区别 阻塞:在对fd执行IO操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足 非阻塞:在不能对fd进行IO操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止 应用层的代码上两者的区别: 1234567// 阻塞IOchar buf;fd = open("/dev/ttyS1", O_RDWR);...res = read(fd,&buf,1);// 只有读到数据了才会返回 if(res==1) printf("%c\n", buf); 12345678// 非阻塞IOchar buf;fd = open("/dev/ttyS1", O_RDWR|O_NONBLOCK);...while(read(fd,&buf,1)!=1){continue;} /* 串口上无输入也返回,因此要循环尝试读取串口...
17 Linux内核的数据同步机制
Created2025-06-04|04-Linux03-内核开发
16 I2C子系统
Created2025-06-04|04-Linux03-内核开发
...
15 input子系统
Created2025-06-04|04-Linux03-内核开发
...
18 SPI子系统
Created2025-06-04|04-Linux03-内核开发
...
05 字符设备驱动框架
Created2025-06-04|04-Linux03-内核开发
字符设备驱动框架简介Linux的字符设备驱动框架是以struct cdev为核心的一套API,通过向内核注册cdev,从而向用户空间提供对设备进行IO操作的接口 注意:Linux字符设备驱动框架主要用于封装设备的IO操作,有别于Linux的设备驱动模型,并不负责设备与驱动的匹配之类的,所以2者通常同时出现 而且不是所有字符设备的驱动都需要用到这个框架,比如一个用了input子系统的按键,它不需要向用户提供IO操作的接口,所以就不需要(其实这是驱动分层的结果,input子系统的核心层会用到该框架来提供用户对/dev/input/eventXIO操作的能力,但我们自己写的驱动层不需要用) 核心组件 cdev12345678910111213141516struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int...
07 pinctrl子系统
Created2025-06-04|04-Linux03-内核开发
pinctrl子系统pinctrl子系统的作用 获取设备树中 pin 的信息 设置 pin 的复用功能 设置 pin 的电气特性,比如上/下拉、速度、驱动能力等 相关硬件对于引脚的配置,不同平台通常不一样: IMX6ULL这款SoC中有2个专门的引脚配置的硬件模块IOMUXC(Input/Output Muliplexing Controller),和IOMUXC-SNVS。通过设置该控制器的某些寄存器,就可以实现对指定引脚的配置。 IOMUXC和IOMUXC-SNVS的区别主要在于配置的引脚所属的电源域,前者控制主电源域的引脚,而后者控制SNVS这个独立的电源域的引脚(该电源域用于在系统休眠时维持部分功能) 同一个引脚只能由一个引脚配置模块来配置 而STM32就没有独立的IOMUXC,其引脚的电气属性及复用的配置全由GPIO控制器来做 使用方法pinctrl子系统的使用通常遵循以下步骤: 1.定义引脚控制组:节点的名字一般以grp结尾 1234567&iomuxc { // LED的引脚控制组 pinctrl_led:...
06 platform设备驱动框架
Created2025-06-04|04-Linux03-内核开发
platform设备驱动框架platform驱动框架由驱动分离的思想引出了总线、驱动和设备模型,Linux提出了platform驱动框架,为设备的注册、匹配、管理等操作提供了统一的接口。但是并不是所有设备都有物理总线,比如SoC内部的I2C、SPI、LCD等控制器与CPU内核的连接。为了解决此问题,platform驱动框架虚拟出一条platform总线,使得所有的设备都可以应用驱动分离模型 platform框架和字符设备框架是独立的,2者一般需要同时使用,前者是对整个驱动开发流程的一个统一化,主要包括硬件资源描述和驱动的匹配和资源管理;后者负责具体字符设备的设备节点、设备号的创建、以及与用户空间交互的IO操作之类的东西 platform总线Linux内核定义结构体struct bus_type来定义各种总线 123456789101112131415161718192021222324struct bus_type { const char *name; /* 总线名字 */ const char ...
1…789…14
avatar
Li Ruiqi
总有低谷
Articles
140
Tags
0
Categories
18
Follow Me
Categories
  • 01-计算机基础八股12
  • 02-开发工具11
    • CMake7
  • 03-C++15
  • 04-Linux39
    • 01-Linux基本操作6
    • 02-系统移植7
    • 03-内核开发19
    • 04-应用开发7
  • 05-MCU28
    • 01-FreeRTOS6
    • 02-STM329
    • 03-MSP4304
    • 04-LVGL4
  • 06-嵌入式硬件5
  • 07-RISC-V3
  • 08-Qt20
  • 09-ROS7
Website Info
Article Count :
140
Unique Visitors :
Page Views :
Last Update :
©2019 - 2025 By Li Ruiqi
Framework Hexo|Theme Butterfly
人因梦想而伟大