- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 early_initcall
1)*_initcall系列函数分为两种实现方式,一种为直接加载,一种为模块加载。2) 直接加载:根据调用函数不同,初始化的顺序不同。3) 模块加载:实现相同,初始化顺序由insmod命令顺序决定。
2022-12-15 16:37:04
562
翻译 MSI驱动指南HOWTO
Message Signaled Interrupt 是从设备写入特殊地址,导致 CPU 接收中断。MSI 功能首先在PCI 2.2中指定,后来在PCI 3.0中得到增强,允许单独屏蔽每个中断。PCI 3.0还引入了 MSI-X 功能。与 MSI 相比,它支持每个设备更多的中断,并允许独立配置中断。设备可能同时支持 MSI 和 MSI-X,但一次只能启用一个。
2022-02-25 16:21:17
2357
原创 Linux Kernel Semaphore代码解析
目录1. Semaphore2. 核心结构体2.1 Semaphore2.2 Semaphore_waiter2.3 结构体示意图3. 代码分析3.1 Down3.2 __down3.3 __down_common3.4 Up3.5 __up4. 流程图Kernel Version: 5.16.0-rc11. Semaphore睡眠锁有count计数,允许多个task同时拿,只要count不为0即可2. 核心结构体2.1 Semaphore锁的定义:/* Please don't a
2021-11-17 16:41:50
684
原创 schedule_timeout 函数分析
schedule_timeout函数功能:将当前task调度出cpu,并在timeout1)kernel/time/timer.csigned long __sched schedule_timeout(signed long timeout){ struct process_timer timer; unsigned long expire; switch (timeout) { case MAX_SCHEDUL
2021-11-16 22:18:21
6482
原创 Linux kernel 锁
在Linux kernel中有各种各样的锁,它们的实现原理不同,使用场景不同,本文会深入讨论Linux kernel中的锁机制。
2021-09-06 14:31:15
512
原创 中断处理时间统计 cpu_irqtime
cpu_irqtime为per-cpu变量,定义在kernel/sched/cputime.c文件中本功能的开启由config CONFIG_IRQ_TIME_ACCOUNTING控制,默认是开启状态。
2021-07-30 17:02:37
2390
原创 ldrex strex
Based on linux kernel4.14 arch/arm架构.目录问题现象说明crash现场调用栈寄存器信息问题分析ARM 文档说明问题现象说明死锁crash现场调用栈core0:PID: 0 TASK: c0e12a00 CPU: 0 COMMAND: "swapper/0" #0 [<c0a3df90>] (_raw_spin_lock) from [<c0198c04>] #1 [<c0198c04>] (handle_
2021-05-25 09:41:40
506
原创 Linux kernel patch提交
1. 下载最新kernel源码2. 配置本地git3. 填写commit message4. 生成patch5. 脚本检查patch格式问题6. 脚本获取maintainer7. 邮箱发送patch8. 成功日志9. 等待回复
2021-04-12 16:25:34
2997
原创 详解 ARM PMU (Performance Monitoring Unit)
本文会详细讲解ARM PMU模块原理及代码流程kernel version=4.14.90, arch=arm64初始化流程:arch/arm64/kernel/perf_event.cdevice_initcall(armv8_pmu_driver_init)这里使用device_initcall调用进行函数的初始化流程,关于device_initcall的定义及实现...
2021-03-12 09:50:03
2634
1
原创 Linux 时间子系统 - mdelay/udelay/ndelay
Linux 时间子系统 - mdelay/udelay/ndelay 实现详解
2021-03-01 19:40:23
3790
原创 Linux arm cpu topology
cpu capacity代表了一个cpu的处理能力,它与各个cpu运行在哪个频点有关,在big-LITTLE架构下的cpu,大核与小核的capacity应设置为不同值。在parse_dt_topology中,从dt获取cpu capacity,调用update_cpu_capacity更新相关变量。在每个core初始化时,都会调用到store_cpu_topology,填充本cpu的cpu_topology变量。reset_cpu_topology的逻辑比较简单,就是给per-cpu的变量一个初始值。
2020-11-25 09:28:20
927
原创 Linux cpu topology
CPU topology代码结构arch/arm/kernel/topology.cinit/main.cstart_kernel rest_init kernel_init kernel_init_freeable smp_prepare_cpusarch/arm/kernel/smp.c...
2019-02-22 19:48:46
946
1
转载 Using ftrace
https://source.android.com/devices/tech/debug/ftrace#atraceUsing ftraceftrace is a debugging tool for understanding what is going on inside the Linux kernel. The following sections det
2017-08-25 15:12:49
385
转载 关于进程、线程和轻量级进程的一些笔记
转载:http://www.cnitblog.com/tarius.wu/articles/2277.html在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。线程有自己的私有数据
2017-08-25 15:02:28
247
PCI-Express-5-Update-Keys-to-Addressing-an-EvolvingSpecification
2021-12-03
C# VS2022 Sqlite发布单个文件,运行时报错。
2023-11-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人