
子类__kernel
文章平均质量分 77
RK3399平台入门到精通系列之kernel
内核笔记
一直从业于半导体行业,曾为Linux内核开源文档社区提交过若干文档。
主要从事Linux、Android相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,喜欢阅读内核源代码,在不断的学习和工作中深入理解内存管理,进程调度,文件系统,设备驱动等内核子系统。
展开
-
RK3399平台开发系列讲解(ALSA子系统)4.37、ALSA驱动框架
ALSA驱动框架原创 2022-07-20 23:15:00 · 2057 阅读 · 4 评论 -
RK3399平台开发系列讲解(电源管理篇)11.9、autosleep
autosleep原创 2022-04-16 23:43:47 · 2462 阅读 · 5 评论 -
RK3399平台开发系列讲解(电源管理篇)11.8、runtime PM
runtime PM原创 2022-04-10 23:25:30 · 2128 阅读 · 8 评论 -
RK3399平台开发系列讲解(电源管理篇)11.7、PM callback
平台内核版本安卓版本RK3399Linux4.14Android7.1=>返回专栏总目录<=文章目录一、linux的电源管理架构二、原始的linux电源管理三、reboot的流程四、设备和驱动的电源管理回调五、dev_pm_info和dev_pm_domain六、PM callback的辅助函数七、PM callback的调用顺序一、linux的电源管理架构Linux的电源管理的粗略的架构如下:在用户接口之下, 是由kernel中的 power co...原创 2022-04-10 22:53:02 · 2494 阅读 · 6 评论 -
RK3399平台开发系列讲解(电源管理篇)11.6、wakelock详解
wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle、suspend等)。同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store。原创 2022-04-09 22:47:35 · 5690 阅读 · 6 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.7、互斥锁的实现原理
在实际项目中,该如何选择自旋锁、信号量和互斥锁呢? 在中断上下文中可以毫不犹豫地使用自旋锁,如果临界区有睡眠、隐含睡眠的动作及内核接口函数,应避免选择自旋锁。在信号量和互斥锁中该如何选择呢?除非代码场景不符合上述互斥锁的约束中的某一条,否则可以优先使用互斥锁。原创 2022-04-06 22:58:47 · 2252 阅读 · 8 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.6、信号量
📢信号量( semaphore)是操作系统中最常用的同步原语之一。自旋锁是一种实现忙等待的锁,而信号量则允许进程进入睡眠状态。原创 2022-04-03 23:37:06 · 1980 阅读 · 8 评论 -
RK3399平台开发系列讲解(中断篇)13.11、中断驱动数据结构抽象
理解一个软件架构最重要的是要理清楚里面的数据结构的内容以及数据结构之间的关系。原创 2022-03-28 23:09:33 · 2256 阅读 · 7 评论 -
RK3399平台开发系列讲解(电源管理篇)11.5、Regulator子系统详解
LDO 稳压器是一种线性稳压器,可以在输入和输出电压之间的极低电位差下工作。LDO使用Regulator子系统,故本篇首先将对Regulator子系统进行介绍。原创 2022-03-13 17:16:25 · 3382 阅读 · 10 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.7、Linux并发控制机制总结
Linux驱动开发中使用的并发控制机制有哪些?原创 2022-03-06 23:46:23 · 4650 阅读 · 8 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.4、如何根据业务场景选择合适的锁?
怎样选择最合适的锁呢?首先我们必须清楚加锁的成本究竟有多大,其次我们要分析业务场景中访问共享资源的方式,最后则要预估并发访问时发生锁冲突的概率。这样,我们才能选对锁,同时实现高并发和高吞吐量这两个目标。原创 2021-12-05 20:06:46 · 2094 阅读 · 12 评论 -
RK3399平台开发系列讲解(进程篇)14.8、Unix Domain Sockets使用
本篇将会介绍用于进程间通信的 Unix Doamin Sockets 的实现。要使用 Unix Domain Sockets 需要在创建socket时为 family 参数传入 AF_UNIX。原创 2022-02-04 17:46:57 · 2440 阅读 · 9 评论 -
RK3399平台开发系列讲解(进程篇)14.7、等待队列原理与实现
当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用 add_wait_queue() 函数把进程添加到 waitqueue 中,然后切换到其他进程继续执行。当资源准备好,由资源提供方通过调用 wake_up() 函数来唤醒等待的进程。原创 2022-02-04 17:19:37 · 2605 阅读 · 9 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.6、RCU原理与实现
RCU原理与实现原创 2022-02-03 17:26:57 · 2145 阅读 · 10 评论 -
RK3399平台开发系列讲解(中断篇)13.9、中断下半部Tasklet的原理及使用
tasklet支持动态和静态分配,也就是驱动程序中能比较方便的进行扩展;原创 2021-12-26 23:52:47 · 2056 阅读 · 10 评论 -
RK3399平台开发系列讲解(进程调度篇)14.9、进程数据结构详解(一)
????有的进程只有一个线程,有的进程有多个线程,它们都需要由内核分配 CPU 来干活。可是 CPU 总共就这么几个,应该怎么管理,怎么调度呢?原创 2021-11-28 23:27:04 · 1961 阅读 · 8 评论 -
RK3399平台开发系列讲解(进程调度篇)14.8、CPU 上下文切换
Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。原创 2021-11-23 00:17:12 · 1967 阅读 · 10 评论 -
RK3399平台入门到精通系列讲解(导读篇)烧写工具使用
一、安装 RK USB 驱动二、安装 AndroidTool三、SD_Firmware_Tool四、安装串口 UART_TO_USB五、启动/升级方式六、模式的介绍启动模式Normal 模式Loader 模式MaskRom 模式七、工具的使用原创 2021-10-01 11:08:37 · 2586 阅读 · 13 评论 -
RK3399平台开发系列讲解(疑难问题篇)11.1、SD存储卡录制的数据如何读取
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录基础知识问题集锦1、如何进行裸磁盘读取操作(DIRECT_IO)记录了解析SD存储卡录制的数据过程中遇到的问题。基础知识整个SD存储卡可以分为若干个分区,每个分区都可以有自己的文件系统比如FAT32或者EXFAT等,SD卡数据的存储相当于把这个分区当作一个顶层容器(平坦的)进行自定义存储的格式,也就相当于一个是文件系统(比如:FAT32)。SD卡数据的存储和常见的视频格式比如mp4、mkv、a...原创 2021-03-13 01:23:39 · 2300 阅读 · 8 评论 -
RK3399平台开发系列讲解(疑难问题篇)11.2、如何提高读取SD卡的速度
文章目录高速读取的条件解决问题平台内核版本安卓版本RK3399Linux4.4Android7.1高速读取的条件经了解,USB的BULK_ONLY和UFI协议,我们知道高速主要是大块数据读取时的才能达到的。实际中我们也知道大量小文件拷贝时的速度是远远慢于单个大文件的拷贝速度的。解决问题...原创 2021-03-13 01:30:19 · 2370 阅读 · 9 评论 -
RK3399平台开发系列讲解(其他篇)1.30、 Regmap的使用
Regmap主要目的是减少慢速I/O驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器.Regmap除了能做到统一的I/O接口,还可以在驱动和硬件IC之间做一层缓存,从而能减少底层I/O的操作次数Regmap拓扑结构首先看一下硬件表达/* * 该数据结构表示rk808芯片 * 用这个结构体定义的变量名为chip */struct rk808 { struct i2c...原创 2019-03-08 00:51:05 · 2224 阅读 · 7 评论 -
RK3399平台开发系列讲解(低功耗篇)11.4、RK3399待机唤醒相关问题定位
待机分为一级待机和二级待机,对应的唤醒也是分成 两级;一级待机:主要动作是关显示(lcd, backlight),关tp,关gsensor等;场景包括音乐播放,蓝牙传输,wifi下载,插USB接电脑等;二级待机:简单理解就是进入soc低功耗模式, RK3399支持 Core 断电,Logic 断电,DDR 进入Retention状态,OSC Disable (系统时钟切为 32.768k);原创 2020-01-22 21:24:11 · 5224 阅读 · 11 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.3、读写锁
读写锁从字面意思我们也可以知道,它由「读锁」和「写锁」两部分构成,如果只读取共享资源用「读锁」加锁,如果要修改共享资源则用「写锁」加锁。所以,读写锁适用于能明确区分读操作和写操作的场景。原创 2017-09-26 17:15:24 · 2219 阅读 · 10 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.2、互斥锁与自旋锁的选择
如果你能确定被锁住的代码执行时间很短,就不应该用互斥锁,而应该选用自旋锁。原创 2018-08-16 21:27:32 · 3458 阅读 · 9 评论 -
RK3399平台开发系列讲解(低功耗篇)11.3、系统休眠流程
可以看到linux中,休眠主要分为以下三个主要步骤:冻结用户态进程和内核态任务;调用注册的设备的suspend的回调函数;按照注册顺序休眠核心设备和使CPU进入休眠态。其中冻结进程是内核把进程列表中所有的进程的状态都设置为停止,并且保存下所进程的上下文。当这些进程被解冻的时候,他们是不知道自己被冻结过的,只是简单的继续执行。如何让Linux进入休眠呢?用户可以通过读写sys文件/sys/power/state实现控制。比如:# cat /sys/power/state来得到内核支持哪几种休原创 2018-01-30 19:43:49 · 7496 阅读 · 12 评论 -
RK3399平台开发系列讲解(进程调度篇)14.4、 进程状态有限状态机
进程并不总是可以立即运行的一方面是 CPU 资源有限,另一方面则是进程时常需要等待外部事件的发生,例如I/O 事件、定时器事件等。因此,对进程的状态进行分类就是一件非常有必要的事情,对于等待某事件发生的进程给予 CPU 资源是没有任何意义的,因为此时事件可能仍未发生。而对于正等待 CPU 资源的进程而言,在得到 CPU 之后即可立即执行。调度器为了尽可能最大地使用硬件资源,通常会将进程分为3个主要的状态: 运行、等待和睡眠。原创 2017-12-17 19:52:34 · 1260 阅读 · 8 评论 -
RK3399平台开发系列讲解(内核子系统篇)2.29、6线SPI说明
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录6线spi通信流程硬件连接6线spi通信流程6线SPI主要比4线的SPI多了两根控制线,主要用于通信前的握手功能,通信双方都准备好了才发送数据。通信流程:master拉高gpio_master_ready引脚 (告诉从机,主机要发送数据了)等待slave拉高gpio_slave_ready引脚电平 (告诉主机,从机准备好了接收数据)master拉低gpio_master_rea...原创 2021-05-11 00:07:39 · 3733 阅读 · 8 评论 -
RK3399平台开发系列讲解(进程线程与调度篇)14.3、调度进程或线程的最小单元-任务
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录任务任务状态任务任务是Linux中可以调度进程或线程的最小单元。在用户任务中调整计划比率时 将使用nice值计算每个任务的时间片在内部数据结构中,task_struct表示任务,并在其中包含调度实体结构,并使用此调度实体计算时间片。- 任务具有三个调度实体,sched_entity,sched_rt_entity和sched_dl_entity,可用于每个调度程序。在使用cgrou...原创 2021-05-03 23:46:05 · 2682 阅读 · 8 评论 -
RK3399平台开发系列讲解(内核子系统篇)2.22、gpio子系统之register a gpio_chip
文章目录平台内核版本安卓版本RK3399Linux4.4Android7.1drivers/gpio/gpiolib.c -1/4/** * gpiochip_add_data() - register a gpio_chip * @chip: the chip to register, with chip->base initialized * @data: driver-private data associated with this chip *原创 2021-04-12 22:38:14 · 2143 阅读 · 9 评论 -
RK3399平台开发系列讲解(硬件波形解析篇)10.2、UART硬件波形解析
文章目录平台内核版本安卓版本RK3399Linux4.4Android7.1串口输入字符1,即数据0x31 →00110001B → LSB(低位先发)→10001100B波形0100011001 数据解析起始位0数据位 10001100停止位1波特率计算50us/div → 6bit/div (图中所得)波特率=6/50 * 10^6 ≈115200bps...原创 2021-04-09 23:08:42 · 2713 阅读 · 10 评论 -
RK3399平台开发系列讲解(进程线程与调度篇)14.2、进程管理架构图
文章目录平台内核版本安卓版本RK3399Linux4.4Android7.1原创 2021-04-03 11:20:01 · 2271 阅读 · 11 评论 -
RK3399平台开发系列讲解(内核子系统篇)2.18、TTY子系统相关结构体关系
struct tty_structTTY设备的“动态抽象”,保存了TTY设备访问过程中的一些临时信息,这些信息是有生命周期的:从打开TTY设备开始,到关闭TTY设备结束;只要一个新的TTY设备打开都会创建一个 tty_struct结构的实例,一直到最后设备文件关闭时它才退出。struct tty_struct { int magic; struct kref kref; struct device *dev; struct tty_driver *driver; const struct t.原创 2021-04-01 22:47:06 · 1931 阅读 · 11 评论 -
RK3399平台开发系列讲解(进程线程与调度篇)14.1、进程的文件表项
文章目录平台内核版本安卓版本RK3399Linux4.4Android7.1原创 2021-03-25 22:59:36 · 2357 阅读 · 10 评论 -
RK3399平台开发系列讲解(低功耗篇)11.1、wakeup events framework
http://www.wowotech.net/linux_kenrel/wakeup_events_framework.html原创 2021-03-23 22:45:53 · 3507 阅读 · 12 评论 -
RK3399平台开发系列讲解(硬件波形解析篇)10.1、USB2.0相关硬件波形(实图)解析
文章目录1、USB设备插入过程2、USB设备挂起(suspend)3、USB设备唤醒(resume)4、USB远程唤醒(remote wakeup)平台内核版本安卓版本RK3399Linux4.4Android7.1USB 2.0规范中将信号的传递状态分为J状态与K状态,详见手册【Table 7-2. Low-/full-speed Signaling Levels (P145)】信号状态接收信号定义差分1(D+)-(D-)> 200mV差分0(D-)-(D+)&.原创 2021-03-23 22:04:44 · 3933 阅读 · 9 评论 -
RK3399平台开发系列讲解(系统篇)1.21、百度 CarLife 总结
在 Linux 上检测 IDE/SATA SSD 硬盘的传输速度你知道你的硬盘在 Linux 下传输有多快吗?不打开电脑的机箱或者机柜,你知道它运行在 SATA I (150 MB/s) 、 SATA II (300 MB/s) 还是 SATA III (6.0Gb/s) 呢?你能够使用 hdparm 和 dd 命令来检测你的硬盘速度。它为各种硬盘的 ioctls 提供了命令行界面,这是由...原创 2018-08-17 19:04:09 · 2615 阅读 · 10 评论 -
RK3399平台开发系列讲解(低功耗篇)11.2、Runtime Power Management框架分析
平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录RPM 状态opsMain Runtime PM APIRuntime PM API: _get(), _put()例子Linux的RPM(Runtime power management)框架,是一套运行时电源管理框架,为系统种所有的device提供了一种运行时电源管理的机制。其目的很明确—减少系统运行时的功耗;内核文档链接文件目录:apps_proc\kernel\include\linu...原创 2021-03-06 14:30:39 · 3235 阅读 · 6 评论 -
RK3399平台开发系列讲解(内核入门篇)1.21、内核定时器timer_list
内核定时器timer_list原创 2021-03-06 12:50:52 · 3079 阅读 · 10 评论 -
RK3399平台开发系列讲解(同步与互斥篇)12.1、Linux死锁问题情况介绍
死锁是指多个进程(线程)因为长久等待已被其他进程占有的的资源而陷入阻塞的一种状态。当等待的资源一直得不到释放,死锁会一直持续下去。死锁一旦发生,程序本身是解决不了的,只能依靠外部力量使得程序恢复运行,例如重启,开门狗复位等。原创 2021-02-25 22:42:22 · 2663 阅读 · 11 评论 -
RK3399平台开发系列讲解(其他篇)1.27、Linux内核中的PID管理
文章目录平台内核版本安卓版本RK3399Linux4.4Android7.1原创 2020-08-14 22:08:04 · 1861 阅读 · 10 评论