自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 linux子系统之drm dsi

本文将从以下几个方面来学习研究mipi_dsi总线。

2026-04-27 16:58:13 376

原创 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 dma子系统

本文从以下几个方向来研究学习linux dma子系统。

2026-03-05 12:35:07 395

原创 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 power模块

本文将从linux power框架源码和示例驱动代码来分析power supply的大体流程。

2026-02-02 13:22:03 580

原创 linux内存之shrink_slab释放

shrink_slab 是 Linux 内核中用于回收SLAB 内存分配器中缓存对象的核心函数。

2026-02-01 13:58:28 72

原创 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内存之page申请和释放

本篇从以下两个方向来感觉page伙伴系统。

2026-01-17 20:48:22 64

原创 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内存之page的初始化

本文以linux内核6.11版本来研究的,发现不同的版本这部分代码组织都不相同一直在变。

2025-12-28 10:44:20 46

原创 linux内存之vmalloc

本文从以下几个方面来分析vmalloc内存流程。

2025-12-21 11:31:19 44

原创 linux gpio获取

最近在工作中遇到了gpio解析失败的问题,跟踪发现设备树配置的字符串不匹配,在这里再次学习并记录下。

2025-12-14 23:03:08 887

原创 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 root节点解析

首先来看看root节点解析大体调用流程这里只关注具体的解析函数的实现,中间的调用流程可以看上图自行跟踪。

2025-11-16 16:18:03 917

原创 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

原创 从pty驱动学习tty设备驱动加载

本文从三个方向研究tty设备1、tty驱动的加载2、tty设备的打开3、tty设备的访问。

2025-10-03 19:00:52 469

原创 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

傅里叶fs2105mtk8518平台驱动加载

傅里叶fs2105mtk8518平台驱动加载

2025-11-07

基于开源鸿蒙ohos2.3的的hb编译系统

基于开源鸿蒙ohos2.3的的hb编译系统

2025-11-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除