- 博客(109)
- 收藏
- 关注
原创 platform_driver device_driver dts自动加载platform_device及休眠唤醒的关系
platform总线是我们驱动编程中经常用的一种,之间的大体关系如下:1.platform_bus_init 由start_kernel在加载各自init之前调用。主要就是注册一个bus,最终会添加到bus_kset链表中去,总线本身不会涉及到休眠唤醒,其休眠唤醒函数都是一个中间过程。为各自具体的设备驱动准备的。2.platform_device_register如上图描述所示,主要内部逻辑有下:1):首先将dev添加到devices_kset链表中去2):其次将dev添加到总线的device
2020-09-13 13:12:57
1194
原创 ohos liteos_m内核启动
/把任务栈上下文中的UINT32 uwR0-uwR3, UINT32 uwR12;共8个成员变量数值分别加载到寄存器R0-R7,其中R5对应UINT32 uwLR,R6对应UINT32 uwPC,此时寄存器R12指向任务栈上下文的UINT32 uwxPSR。共8个成员变量数值分别加载到寄存器R0-R7,其中R5对应UINT32 uwLR,R6对应UINT32 uwPC,此时寄存器R12指向任务栈上下文的UINT32 uwxPSR。//S0到S15及UINT32 FPSCR;
2026-04-09 09:20:58
314
原创 linux thermal模块学习
在源码:include/asm-generic/vmlinux.lds.h有更进一步的定义上述截图的代码组成完整的thermal_table宏定义,所有thermal_governor都需要通过THERMAL_GOVERNOR_DECLARE来申明。
2026-03-11 11:06:17
414
原创 linux内存之水线设置和page回收
此函数最终会将满足条件的page添加到链表folio_list上,而此链表之前的成员数据基本已经从此链表上删除了,后续与活动页一样调用free_unref_page_list函数将page释放到freelist链表上。到此page的回收流程大体就结束了,后续针对细节再进行更深入的分析。唯一会进行释放page的操作是folio_has_private且引用计数为0时,会直接释放此page页。这里内存回收涉及到page回收和缓存回收,这里只关注page的回收,后面再研究slab的回收。
2026-02-07 13:19:06
74
原创 linux之clk模块
clk_register :此函数核心作用是生成并初始化clk,顺便加入到全局链表。但是此链表主要是管理所有注册的clk,为clk相关操作提供支持。这里需要说明的一点是:如果是通过此方式注册的clk,在没有其它注册函数支持下,可以通过__clk_lookup函数来获取clk,不过一般不使用此方式。__clk_of_table这个数组一般由CLK_OF_DECLARE申明。这个函数只能获取使用register_clkdev系列注册函数注册的clk。源码路径:kernel/driver/clk/ck.c。
2026-01-29 16:47:37
819
原创 linux内存释放之oom
Linux Out-Of-Memory (OOM)机制是内核在物理内存不足时触发的应急处理流程,旨在通过终止高内存消耗进程来防止系统崩溃。本文从以下几个方面来学习linux oom内存释放。
2026-01-24 16:46:05
49
原创 linux内存之memory初始化
这个函数会对上面memblock进行相关初始化,主要就是对memory 和reserved 这两种类型的内存信息进行操作。此两种类型都用数组保存信息分别为:memblock_memory_init_regions和memblock_reserved_init_regions。到此DTS里面配置的物理内存地址就被解析并保存到内核中,后续进行虚拟映射可以通过虚拟地址访问物理地址。主要是用于建立物理内存到内核虚拟地址空间映射,核心映射函数为map_mem。PAGE_END 内核空间虚拟地址空间的中间位置。
2026-01-10 13:55:07
69
原创 verilog spi slave回环模拟
本篇作为学习verilog过程中一个动手编码的尝试,主要从网上找的基础代码再加上自己的一些修改。一来可以加深对verilog语法的了解,二来也有助于有硬件有更深入的了解。上述代码比较简单,主要有两个module。一个spi回环模拟模块,一个激励模块。
2025-12-29 09:25:57
208
原创 linux 内存之kmalloc
本文主要从两个方面来研究kmalloc内存分配函数,使用slub源码分析1、cache的初始化2、kmalloc函数的实现。
2025-12-14 10:33:44
46
原创 linux usb gadget子系统
gadget主要用途:通过一个真实的USB设备,模拟各种其它设备比如:uart、网卡、声卡等.属于USB 设备控制器 (USB Device Controller, UDC) 与host device controller hdc相区别。本篇从以下几个方面来研究学习其总线文件位置:/kernel/driver/usb/gadget/udc/core.c通过subsys_initcall指定函数数据段,自动加载gadget总线gadget总线的匹配规则匹配规则就两点:gadget设备也就是udc设备,
2025-12-07 11:22:33
82
原创 linux slab内存分配
在上一篇章节里面研究了kmalloc函数的实现,主要着重点是固件缓存的创建。和小内存分配固件缓存的规则,本篇主要研究slab缓存函数的实现。
2025-11-30 10:22:20
380
原创 linux input驱动子系统
从事linux input驱动有些年头了。对其子系统多多少少都有一点的认识,现在回过头来对其再梳理一遍,对整个子系统更加了解。本文人以下几个方面来学习:1、input子系统初始化2、input_device的分配3、input_device的注册4、input_handler事件处理者的注册5、input事件的上报处理6、应用层处理input事件。
2025-11-24 10:15:10
40
原创 linux 系统调用
源码路径:bionic/libc/arch-arm64/bionic/syscall.Smov x8, x0mov x0, x1mov x1, x2mov x2, x3mov x3, x4mov x4, x5mov x5, x6svc #0ret路径:bionic/libc/include/bits/glibc-syscalls.h#endif#endif#endif#endif#endif#endif#endif#endif#endif#endif#endif。
2025-11-18 16:15:08
549
原创 linux sdio总线学习
本文主要从以下几个方向来感觉sdio驱动框架1、sdio总线的加载2、sdio驱动与设备的匹配逻辑3、sdio控制器驱动的加载4、sdio设备驱动的加载。
2025-11-16 16:18:52
239
原创 linux 解析并生成一个platform_device设备具体过程
在之前的文章里有分析plaform总线 、驱动、设备的大体流程。但是没有详细分析如何生成一个具体的platform_device设备。本文使用linux6.4内核,详细分析一个platform_device自动生成的具体过程。文件位置:使用arch_initcall_sync(of_platform_default_populate_init);
2025-11-12 22:57:24
128
原创 linux gpio子系统学习
目前工作中碰到要求在 /sys/class/gpio目录增加几个指定的gpio,通过联动拉高拉低gpio作为spi的片选的要求。对GPIO子系统有了个大概的认识,现在在最新的内核版本上再次学习研究下。先来说说增加在上面目录下增加GPIO有两种操作:一、android里直接在rc资源文件中,写属性节点例如:会自动生成gpio245的节点,如果这个gpio合法的话。
2025-11-10 23:14:41
89
原创 hotspot vm 参数解析
先看下hotspot的参数解析的流程1.首先是Arguments::parse这个函数的初步解析,主要解析XX的标志-XX:Flags= 这个标识后面指向一个具体的文件名,解析里面的各种flag然后动态的申请内存,存放到_jvm_flags_array这个指针数组里面。-XX:+PrintVMOptions : 开启打印,所有以-XX: 开头的参数,都会打印-XX:-PrintVMOpti...
2025-11-09 20:53:44
451
原创 linux spi回环测试
spi回环测试是确认spi通讯是否正常的一个常用手段,硬件上将master的输入、输出口短接即可。软件上主要确认以下几步:1、bootloader阶段的spi使用的几个gpio口复用功能是否配置正确,本人就曾经在工作中遇到过spi控制器,spi dev都正常加载。但就是spi无法回环测试成功,原因就是IO口复用给别的功能了2、确认spi控制器是否正常加载,如果spi控制器都没能正常加载。那么spi相关的dev是无法产生的3、设备树上配置spi相关的设备信息,确保相应的spi能够正常加载。
2025-11-09 13:55:13
378
原创 牛客网华为在线编程题
题目描述王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图书书桌 台灯,文具工作椅 无如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东西很多,为了不超出预算,他把每件物品规定了一个重要度,分为 5 等:用整数 1 ~ 5 表示,第 5 等最重要。他还从因特网上查到
2025-11-08 14:07:24
596
1
原创 linux usb子系统
本文使用linux6.4内核版本代码,从以下几个方面来学习usb子系统1、usb总线注册与通用驱动注册2、usb总线match回调函数分析3、usb host 控制器HCD驱动加载以ehci_hcd为例4、hub设备驱动(通用设备驱动)的probe5、hub interface驱动的probe6、hub_event的触发。
2025-11-06 23:19:23
226
原创 linux iio子系统学习
首先:本文学习所使用的linux内核版本为linux6.4,看另外份4.14的内核版本与此版本差异比较大,而且看起来还有点问题。本文以器件dac3552r驱动为起点来进行学习,大体从两个方向来学习iio子系统。1、dac3552r驱动使用iio函数调用流程2、iio触发器的驱动加载以及属性节点功能。
2025-11-02 09:55:31
915
1
原创 linux ipc之消息队列
在用linux mtk8518平台做sourdbar的时候,发现appmain进程和audio进程使用消息队列进行通信,当高频率发送消息时会无规律的漏掉部分消息。现在就带着这个目地来学习下驱动层是如何实现的。
2025-10-27 20:49:50
350
原创 linux schedule函数学习
这里最终会调用调度器的回调函数put_prev_task,对于deadline来说这会将当前task进行插入到二叉树当中,因为pick_next_task的时候已经将task从二叉树中删除了,如果没有重新插入二叉树,那么这个task将永远不会运行第二次,对于其它调度器有对应的回调函数。这里需要注意的是对于fair调度器,挑选task是有两个流程的,需要结合fair调度器的相关函数来一起看。本文就schedule函数与各调度器使用逻辑方向来研究学习。TASK_RUNNING状态宏定义为0。
2025-10-25 22:22:25
299
原创 linux fair调度器
本文也是人三个方向来研究fair调度器的调度策略实现1、fair权重的设置2、task的入队操作3、task的挑选4、tick定时器的处理。
2025-10-25 16:03:29
963
原创 linux rt任务调度器
首先来看下rt任务调度器的回调函数本篇主要从以下几个方面来研究rt的调度策略1、task的入队2、任务调度挑选task的逻辑3、tick定时器的处理。
2025-10-24 14:03:33
998
原创 deadline调度学习
本篇通过几个方面来看deadline调度器:1、deadline的设置2、deadline的任务的添加3、deadline的任务的调度。
2025-10-22 14:47:58
320
原创 从linux核心进程学习进程创建基本流程
本文主要0、1、2这三个进程来分析创建进程的大体流程。使用的代码是从官网上下载的linux6.4的版本。
2025-10-19 14:36:04
608
原创 从fat看文件系统的加载流程走读
上述的流程核心就是创建super_block,并各种初始化填充里面的数据成员,另外一个就是生成root inode。mkdir核心内容是创建一个inode并加入到链表,这个inode节点会被赋值对文件和目录操作的回调函数,这里只看下核心代码。->fc->ops->get_tree //这里就会使用到上述的legacy_fs_context_ops。这个是对目录的操作,文件操作也会走到上面的这个函数拿到inode节点并赋值回调函数。do_new_mount_fc创建一个新的挂载点,这里就详细研究了。
2025-10-11 20:06:16
387
原创 linux can子系统学习
从整个流程来看can大体可以分几个层次:1、can子系统驱动核心框架层2、can器件的驱动层3、socket PF_CAN协议家族的注册4、CAN_RAW类型socket的具体实现5、用户空间对can网络设备的开启和使用。
2025-09-30 21:00:52
787
原创 pci总线pci_dev的创建和匹配
到这里基本上pci-dev设备扫描增加的流程基本结束了,所有的pci-device都会保存到 pci-bus上的klist_device链表,后续就坐等各个器件驱动调用pci_register_driver来注册driver到 pci-bus上klist_drivers链表,然后device与driver进行匹配加载驱动了。到这里基本就能够明白这里pci-dev与dts节点的匹配规则,是pci-dev的设备号与节点reg第一值按相关逻辑进行比较。在pci-driver.c文件里会初始化注册pci总线。
2025-09-27 14:43:59
920
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅