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. 设计规则以下简单规则避免死锁按顺序加锁防止发生饥饿不要重复请求一个锁设计简单-复杂加锁机制,越可能

- 阅读全文 -

Native程序中引入Binder库

目前最新的ndk环境中,不包含binder库。下载安卓源码,将下面两句加入Android.mk文件,在源码中利用mm命令作为子模块进行单独编译,优点:简单,缺点:编译速度慢,需要依赖安卓源码,不利于协同开发LOCAL_SHARED_LIBRARIES := libutils libcutils libbinder liblog LOCAL_C_INCLUDES += frameworks/nati

- 阅读全文 -

Linux内核 | 进程调度

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

- 阅读全文 -

汇编 | CPU提供的栈机制

CPU提供的栈机制:push 寄存器/段寄存器/内存单元:将寄存器/段寄存器/内存单元中的数据压入栈中 pop 寄存器/段寄存器/内存单元:从栈顶取出的数据送入寄存器/段寄存器/内存单元中push和pop实质上是一种内存传送指令。8086CPU的push和pop都是以字为单位进行。栈顶的段地址存放在SS中,偏移地址存放在SP中。SS:SP指向栈中的第一个元素。**注:栈顶在上面,低位在上面。在80

- 阅读全文 -

汇编 | loop和[bx]指令解析篇

编译运行过程编程 :asm编译:obj连接:exe加载内存中的程序运行DS寄存器是存的是程序段地址,IP是程序偏移地址,DS:IP是程序起点,程序前面先创建PSP(256字节)(程序段前缀)的数据区,DOS利用PSP和加载的程序进行通信,256字节后为程序区。CS:IP是程序入口,存在程序区。 inc bx是bx中的内容加1 注意点:在cx中存放循环的次数loop指令中的标号所标识地址要在前面要循

- 阅读全文 -

汇编 | 认识DosBox篇

执行DosBox将debug.exe的物理路径D:/DosBox-0.47定义为DosBox的C盘mount C D:/DosBox-0.74(bedug.exe的存放路径)访问C盘C:运行debug文件debug命令参数-R查看、改变所有寄存器内容,注意:CS:IP(073F:0100)处存放的机器码是0000,对应的汇编指令是ADD [BX+SI],AL -R AX(改变AX寄存器的值,直接在

- 阅读全文 -