系统卡死问题分析

本文深入探讨了CPU频率动态调整(CPUFREQ)在嵌入式硬件中的作用,解释了如何在Linux内核中通过不同驱动程序文件实现频率和电压的动态调节。此外,还介绍了电源管理集成电路(PMIC)的功能和在i.MX 8系列芯片中的应用。文章还涵盖了交叉编译调试工具和如何通过sync命令确保数据同步到磁盘。最后,讨论了如何通过fio工具对eMMC进行性能测试,以评估其读写速度和IOPS能力。
摘要由CSDN通过智能技术生成

CPU模式

CPU Frequency Scaling (CPUFREQ)

Introduction

CPU频率调节设备驱动程序的功能。该驱动程序允许在运行过程中更改CPU的时钟频率。一旦CPU频率被更改,必要的电源供应电压也会根据设备树脚本(DTS)中定义的电压值进行变化。通过降低时钟速度,这种方法可以减少功耗(从而节省电池电量),因为CPU在时钟速度降低时使用的功率较少。

Software Operation

这段内容描述了CPUFREQ设备驱动程序的功能和工作原理。

CPUFREQ设备驱动程序被设计用于实时改变CPU的频率和电压。如果DTS(设备树结构)中没有定义频率,在这种情况下,CPUFREQ驱动程序会将CPU频率更改为最接近的更高频率。频率的变化是通过使用时钟框架API来实现的,而电压则是通过调节器API进行设置的。

CPU频率数组中的频率基于引导CPU的频率。此外,该驱动程序使用交互式CPU频率调度器(governor),该调度器不允许手动更改。如果需要手动更改CPU频率,可以使用用户空间CPU频率调度器。

在Linux中,内核的开发者定义了一套框架模型来完成CPU频率动态调整这一目的,它就是CPU Freq系统。如下为CPU的几种模式(governor参数):

ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核默认的方式都是ondemand。

interactive:交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般。

conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。

smartass:聪明模式,是I和C模式的升级,该模式在比interactive 模式不差的响应的前提下会做到了更加省电。

performance:性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量。

powersave 省电模式,通常以最低频率运行。

userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置

Hotplug:类似于ondemand, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电。

Linux 内核中与 CPU 调频相关的驱动程序文件

drivers/cpufreq/cpufreq.c

drivers/cpufreq/cpufreq.c 是 Linux 内核中与 CPU 调频相关的驱动程序文件。CPU 调频是根据负载需求动态调整 CPU 频率的过程,以提供性能和能源效率的平衡。

该文件位于 Linux 内核的 drivers/cpufreq/ 目录下,它包含了与 CPU 调频相关的函数、数据结构和算法等。

cpufreq.c 文件中的代码实现了 CPU 调频的主要功能,例如:

- 初始化 CPU 调频框架及相关数据结构。

- 支持不同的调频策略,如 performance、powersave、ondemand 等。

- 根据系统负载情况选择合适的 CPU 频率。

- 处理频率切换请求,并相应地更新 CPU 频率。

- 提供与 CPU 调频相关的接口供其他模块或用户空间程序使用。

请注意,cpufreq.c 文件中的具体实现会因为不同的内核版本而有所差异。因此,如果您想深入了解该文件的内容,最好参考特定内核版本的代码或相关文档。

在这里插入图片描述

修改imx8系统的cpu频率

1.查看可用的调频策略

使用以下命令查看当前可用的 CPU 调频策略:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

2.查看当前频率及调频策略

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QVw1Azmf-1692502397112)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps2.jpg)]

3.调频策略为performance

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ud3sKESy-1692502397113)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps3.jpg)]

4.查看当前频率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nI6munZY-1692502397113)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps4.jpg)]

同理设置低频

echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1RstI4o1-1692502397114)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps5.jpg)]

设置某一特定频率

echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

Menu Configuration Options

The following Linux kernel configuration is provided for this module:

• CONFIG_CPU_FREQ; In menuconfig, this option is located under:

– CPU Power Management > CPU Frequency scaling

• The following options can be selected:

– CPU Frequency scaling

– CPU frequency translation statistics

– Default CPU frequency governor (conservative)(interactive)

– Performance governor

– Powersave governor

– Userspace governor for userspace frequency scaling

– Interactive CPU frequency policy governor

– Conservative CPU frequency governor

– Schedutil CPU frequency governor

– CPU frequency driver for i.MX CPUs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dr88TyHF-1692502397115)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps6.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZnkgP0I5-1692502397115)(file:///C:\Users\wanji\AppData\Local\Temp\ksohtml6988\wps7.jpg)]

一般使用make defconfig生成.config,使用make menuconfig加载.config 然后更新,具体可参考下面的使用

make menuconfig 与.config的关系

make menuconfig 是 Linux 内核源代码中的一个工具,用于以交互式方式配置内核选项。它允许用户在编译和构建内核之前选择和调整各种内核配置。

与之相关的是 .config 文件,它是内核配置的主要配置文件。.config 文件包含了通过 make menuconfig 或其他类似工具进行的所有配置选择,并指定了编译内核时要使用的选项和参数。

当您运行 make menuconfig 命令时,它会加载 .config 文件中的配置选项,并将其显示在交互式菜单中。您可以通过这个菜单选择、启用或禁用特定的内核功能、驱动程序和模块等等。在菜单中进行的配置更改会更新 .config 文件中的相应选项。

当您完成 make menuconfig 的配置并保存退出时,所做的修改将自动写入 .config 文件中。然后,您可以使用该 .config 文件来编译和构建内核,确保生成适合您选择的配置的内核镜像和内核模块。

总结来说,make menuconfig 是一个交互式配置工具,用于编辑 .config 文件中的内核选项。.config 文件存储了内核的配置信息,供编译过程使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值