随笔分类 - Linux
摘要:Linux很多地方会使用 local_irq_disable/local_irq_save函数,那么不同CPU架构,有不同的实现方式,arm64又是怎么实现的呢? 下面是spin_lock_irqsave的代码调用层次关系: -> spin_lock_irqsave /* include/linux
阅读全文
摘要:什么是GDB 常用操作速查 GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 file <path-to/*.elf> 加载符号表 c Continue,继续执行被调试程序,直至下一个断点或程序结束 b 设置断点 s step,执行一行源
阅读全文
摘要:https://tinylab.org/embedded-linux-power-management/
阅读全文
摘要:  Framework for Non-CPU Devices`。 在Linux 里面,CPU调频有cpufreq框架,那么其他模块调频用什么框架呢?比如DDR、DSP
阅读全文
摘要:# 内存类型和属性 | ARM Memory types and attributes ```mermaid flowchart LR 1(Arm Memory Type) --> 2(Normal Memory) 1 --> 3(Device Memory) 2 --> 4(Shareable)
阅读全文
摘要:# 前言 大家都知道,复杂IC内部有很多具有独立功能的硬件模块,例如CPU cores、GPU cores、USB控制器、MMC控制器、等等,出于功耗、稳定性等方面的考虑,有些IC在内部为这些硬件模块设计了复位信号(reset signals),软件可通过寄存器(一般1个bit控制1个硬件)控制这些
阅读全文
摘要:# cpufreq初始化 cpufreq的初始化,通过调用`cpufreq_register_driver`接口,完成一系列的policy、governor和driver配置。 ## 驱动module init入口 1. driver编写module_init的函数,在初始化中使用`cpufreq_
阅读全文
摘要:# module_platform_drivers使用方式 module_platform_driver 是一个宏,用于简化在 Linux 内核模块编程中注册平台设备驱动的过程。 具体使用方法如下: 1. 包含相关头文件: 在代码文件的顶部,包含所需的头文件,如: ``` #include #inc
阅读全文
摘要:# 简介Operating Performance Points (OPP) SoC是高度集成的,不是SoC中的所有模块需要一直以最高的频率运作。来为了便于实现这一点,SoC中的子模块被分组到不同的域中,允许一些域运行在较低的电压和频率,而其他域运行在更高的电压/频率对。 由频率和电压对组成的离散元
阅读全文
摘要:# 前言 内核开发者经常需要导出一些信息到用户空间,用于分析内核运行逻辑。最常见的方法是使用 printk(),不过在嵌入式中,printk() 往往直接打印到 console,一旦 printk() 被频繁调用的话,console 就会被刷屏,此时输入命令都是件困难的事情。 有时我们只想偶尔看一下
阅读全文
摘要:前置知识 临界区:通常指某个代码片段,在该代码片段会访问共享资源,比如共享数据、共享硬件资源(打印机、IO)。串行使用共享资源,才能保证正确的输出结果,因此一个进程要等待另一个进程使用完后才能使用。 进程上下文和中断上下文:进程上下文包括:CPU所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需
阅读全文

浙公网安备 33010602011771号