![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux 内核分析笔记
文章平均质量分 71
记录各个模块的分析笔记
九月天-深圳专业软硬件开发
Hello CSDN.
展开
-
Linux多进程编程
进程三态:就绪,运行,阻塞.优先级数字越低,优先级越高.一个程序中,fork()之后的代码,父子进程都回执行.多进程的创建的4种方式,fork() 一次调用,两次返回,父进程中返回子进程的PID,子进程中成功fork返回0fork()创建的子进程,拷贝父进程的进程上下文(代码和数据段).父子进程的运行 是无序的.vfork() 与fork区别:共享而不是拷贝父进程的进程上下文,vfork()之后,子进程先运行,父进程后运行.exec()函数集:exec原创 2021-07-28 10:32:38 · 192 阅读 · 0 评论 -
USB总线驱动
SOC通过AHB总线连接USB控制器,USB控制器,USB控制器内部集了一个根集线器(root hub),可以直接连接USB设备,也可以连接集线器,然后接不同的USB设备.UHCI/OHCI/EHCI/XHCI1.0低速:1.5M2.0全速:12M2.0高速:480MUSB3.0:5GUSB热插拔的实现:USB集线器的每个端口的D+/D-上,分别接了一个15K的电阻到地,这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平,而在USB设备端,在D+/D-上接了1.5k欧姆上拉电阻,对于全原创 2021-07-27 16:18:10 · 1048 阅读 · 1 评论 -
Linux 内存映射
之前我们由提过,Linux进程都拥有4G的内存空间,其中低3G是用户空间,高1G是内核空间.其他用户空间是独立的,内核空间是共享的.有个问题,假如A进程往0x12345678这个地址写1,B进程往0x123456789这个地址写0,那么会发送什么情况呢?物理内存的0x12345678这个地址的值是多少呢?答案是物理内存的0x12345678这个地址的内容未知,因为根本这个地址根本就不是用户空间看到的0X12345678地址,那么又又一个问题来了,A/B进程写的0x12345678这个地址具体和物理内存的原创 2021-07-23 18:03:36 · 331 阅读 · 0 评论 -
Linux kernel阻塞与非阻塞,休眠与唤醒
当open一个设备的时候,可以指定非阻塞调用O_NONBLOCK,默认是阻塞的,那么内核是怎么实现阻塞和非阻塞的呢?所谓阻塞,是指一个调用发出后,比如说read().在没有得到想要的数据之前,不会返回,一直阻塞在这个方法里,指导数据 ready才返回.所谓非阻塞,是指一个调用发出后,不管有没有数据,都回马上返回,有数据的时候,就返回数据和正确的状态,如果没有数据,就返回错误状态....原创 2021-07-23 11:44:37 · 793 阅读 · 0 评论 -
Linux 同步和互斥
当我们在某个独立的main.c中对一个共享资源读写的时候,为了防止其他模块也在同步修改,往往会维护一个全局flag,如下:if(flag==TRUE){//read or write value;flag = FALSE;}但是在多进程中,read or write过程中可能进程被调度出去,此时flag还是TRUE,其他进程也可能会修改这个变量,从而实现不了同步和互斥的作用.那么同步和互斥,主要有以下方面的内容:1.进程与进程之间的同步互斥.2.进程与其他代码之间3.进程与中断之间.L原创 2021-07-23 11:05:05 · 359 阅读 · 0 评论 -
背光子系统分析笔记(以RK3288-Android7.1 Linux 4.4为例)
当调节设置->显示->亮度时,或者echo xxxx >/sys/class/backlight/backlight/brightness LCD亮度能随着变化,这是怎么实现的呢?参考:https://blog.csdn.net/weixin_41028621/article/details/103542751本文记录下分析过程,设置应用java层操作brightness节点过程,暂不详说,希望能人志士补充.本文重点说驱动层.brightness节点的生成驱动:kernel/dri原创 2021-07-13 18:16:56 · 835 阅读 · 0 评论 -
pwm设备驱动
前文有说到软件侧背光的控制过程,通常的背光,硬件层都是通过pwm来调节的.本文理下pwm驱动,pwm也和设备驱动模型一样的思路,分控制器host设备和具体的device驱动,其中驱动又分设备驱动层和驱动核心层.pwm设备相当于资源的提供者(supplier),背光相当于pwm的消费者(customer)本文重点放在pwm设备端(包括设备,以及这个平台设备本身对应的驱动)pwm本质上是一种通信协议,类似于i2c,spi,usb,平台设备驱动(分核心层和host device driver层)的意原创 2021-07-13 20:01:03 · 1398 阅读 · 0 评论 -
i2c总线模型
硬件拓扑:一个soc可以支持多路i2c,一路i2c可以支持多个i2c device经典的Linux设备驱动模型:device ,bus,driver.device分控制器主设备和外部具体的从i2c设备.主设备i2c控制器用i2c_adapter抽象,从设备用i2c_client抽象.i2c总线用i2c_bus抽象,其中总线有数据手法算法抽象i2c_algo,同样,driver也分控制器驱动和从设备驱动,还有总线驱动.控制器驱动可以分为框架framework层以及具体的master 驱动.控制器原创 2021-07-22 11:49:13 · 140 阅读 · 0 评论 -
i2c子系统概述以及i2c控制器
I2C硬件拓扑结构:一个SOC,有多个i2c控制器,一个I2C可以引出一个2c接口.一个i2c接口可以接多i个I2C地址不同的设备.同时I2C分master和device,对于SOC而已,其i2c接口都当作master.总的来说,i2c 框架层,有这么几个虚拟设备:i2c控制器 —>i2c_adapter---------->i2c资源的提供者—platform_devicei2c总线-------->i2c_busi2c外设-------->i2c_client --原创 2021-07-15 20:31:48 · 897 阅读 · 0 评论 -
uart子系统
uart无论在ARM,Android/Linux,还是MCU裸机中都应用非常广泛,TTL/RS232/RS485都是uart实现,只是电平差别.uart以其良好的兼容性/低成本/传输距离等优点,广泛应用.本文记录自己对uart的一些理解.硬件拓扑:SOC本身存在多个uart控制器,一个uart控制器引出一个uart口.同时SPI设备/USB设备/i2c设备,也可以成为uart控制器,分出uart口.同时uart有别于I2C,SPI等,uart可以说不是一种总线,而是一种协议.要去控制器和外设都实原创 2021-07-16 18:21:41 · 575 阅读 · 0 评论 -
MMC子系统
参考 https://blog.csdn.net/weixin_42262944/category_9758652.htmlhttps://blog.csdn.net/lwj103862095/article/details/38335335MCI(Multimedia Card Interface)emmc,SDMMC,sdio是MMC在实际物理接口上的三种应用形式.分为host,core,card三个驱动层次,MMC核心层:完成不同协议和规范的实现,为host和设备层提供接口函数.核心层由三个原创 2021-07-19 20:24:16 · 794 阅读 · 0 评论 -
DMA 子系统
首先补充点高端内存的知识在32位操作系统上,把程序的0-3G(PAGE_OFFSET:0xc0000000)作为用户空间,3-4G作为内核空间.因为每个进程有各自不同的页表,进程的用户空间是完全独立的,互不相干,但内核空间是由内核负责映射,它不会随进程的切换而切换,内核空间的虚拟地址到物理地址的映射是所有进程共享的.内核的虚拟空间独立其他程序.内核空间的内存分配依据documentation/arm/memory.txt,如下:在内核的虚拟地址空间3-4G这个范围,有一段大小为896M的虚拟内存是原创 2021-07-21 20:13:31 · 745 阅读 · 1 评论 -
SPI总线
SPI是motorola首先提出的全双工同步串行总线,采用主从模式,支持多slave,只支持单master,时钟由master控制.在时钟移位脉冲下,数据按位传输,高位在前,低位在后.CLK/MOSI/MISO/CS,数据可达几M.SPI优点:全双工,操作简单,传输速率高.缺点:多个spi设备需要占用主机较多的管脚.(每个主机都需要一根片选线).只支持单个主机.没有流控,没有应答机制.在一个SPI时钟周期内,会完成如下操作:1.主机通过MOSI线发送1位数据,从机通过该线读取这1位数据.2.从机通原创 2021-07-20 15:09:49 · 369 阅读 · 0 评论