Linux源码 | Thermal框架源码剖析

1. 框架结构thermal core:thermal主要的程序,驱动初始化程序,维系thermal zone、governor、cooling device三者的关系。thermal zone device:创建thermal zone节点和连接thermal sensor,在/sys/class/thermal/目录下的thermal_zone*,通过dtsi文件进行配置生成。thermal

- 阅读全文 -

Linux内核 | 内核同步

1. 定义临界区和竞争条件临界区:访问和操作共享数据的代码段 竞争条件:多个执行线程在一个临界区同时执行死锁:每个线程都在互相等待,但它们永远也不会释放占用的资源。自死锁:一个执行线程试图去获取一个自己已经持有的锁,它不得不等待锁释放,但因为它忙于等待这个锁,所以自己永远也不会有机会释放释放锁。2. 设计规则以下简单规则避免死锁按顺序加锁防止发生饥饿不要重复请求一个锁设计简单-复杂加锁机制,越可能

- 阅读全文 -

Linux内核 | 中断机制

1. 中断中断是一种硬件信号,由具体的硬件设备产生的。不同的硬件设备对应唯一的中断号,处理器是通过中断号(IRQ n)识别不同的硬件设备,并执行对应的中断处理程序或中断服务例程(ISR)。2. 中断处理机制中断处理系统在Linux中是非常依赖体系结构的,硬件设备产生中断,通过总线把电信号发送到中断控制器,如果中断线是激活状态(中断线是允许被屏蔽的),中断处理器会将中断信号发往处理器,处理器会立即停

- 阅读全文 -

Linux内核 | 系统调用

1. 系统调用内核提供的用户空间和内核进行交互的一组接口,应用程序受限地访问硬件设备,提供创建新线程并与已有的进程进行通信,也提供了申请操作系统其他资源的能力。1.2 系统调用形式asmlinkage long sys_getpid(void)asmlinkage限定词是一个编译指令,通知编译器仅从栈中提取该函数的参数,每个系统调用都需要这个限定词。为了兼容32位和64位系统,函数返回long。1

- 阅读全文 -

Linux内核 | 进程调度

1. 进程调度原理最大限度地利用处理器时间,只要有可以执行的进程,那么就总会有进程正在执行。按多任务系统分类抢占式多任务非抢占式多任务按进程分类IO消耗型:进程的大部分时间用来提交I/O请求或是等待I/O请求。处理器消耗型:进程的大部分时间在执行代码1.1 进程优先级根据进程的价值和其对处理器的时间需求对进程进行分级。Linux采用了两种优先级范围nice值,范围[-20,19],nice值越大,

- 阅读全文 -

索引 | 博客文章目录

爱技术 | 爱分享 | 爱生活目前研究操作系统内核相关不喜勿喷,欢迎交流Linux源码剖析Linux源码 | Thermal框架源码剖析Linux内核设计Linux内核 | 进程管理Linux内核 | 进程调度Linux内核 | 系统调用Linux内核 | 中断机制Linux内核 | 内核同步Linux设备驱动Linux设备驱动 | 简述内核模块Linux设备驱动 | 构造和运行内核模块Git使用

- 阅读全文 -

C++错误 | 不兼容类型void *分配给char *

在C++中,malloc这样使用,会报错assigning to 'char ' from incompatible type 'void ',而C语言不会报错。char * ver =malloc(size);你需要进行强制类型转换char * ver = (char *) malloc(size);C语言对类型检查比较宽松,而C++要求就比较严格,malloc()返回是数值类型是void,所以

- 阅读全文 -

嵌入式 | U-Boot的源码stm_flash.c详细剖析

FLASH存储器FLASH存储器又称为闪存,它也是可重复擦写的储器,部分书籍会把FLASH存储器称为FLASH ROM,但它的容量一般比EEPROM大得多,且在擦除时,一般以多个字节为单位。根据存储单元电路的不同,FLASH存储器又分为NOR FLASH和NAND FLASH。<div align=center></div>支持XIP,才能直接运行代码,SD卡,硬盘,U盘其

- 阅读全文 -

单片机 | STM32F429IGT6启动文件解析及示例代码

编程步骤开GPIO端口时钟(RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR))要先确定引脚号要确定是输入还是输出如果是输出,那么是推挽还是开漏输出 OTYPER确定是上拉还是下拉那么输出速度是多少呢?配置IO(LED)void GPIO_LED_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; //打开LED_GPI

- 阅读全文 -