之前在《安装DEBIAN 11到长城龙芯3A2000C平台》一文中,记录了如何将Debian 11安装到龙芯3A2000C电脑上。Debian 11默认的Linux内核版本是5.10,对比龙芯官方的内核,版本比较新,能够支持许多新的特性。但是也带来了一些问题,这个内核并未针对长城的龙芯3A2000C主板做优化,例如主板的风扇转速就一直居高不下,且操作系统也无法获得主板的转速,在特定的场合就无法静音运行(例如做NAS)。
龙芯官方的内核是4.19版本的,没有这个问题。我花时间研究了下官方的4.19内核源码,发现产生这个问题的原因是,5.10内核并未包含EC芯片的驱动程序,且主板上的EC芯片也无法直接获得CPU的温度,官方内核的解决办法是,通过内核获得当前温度,每秒更新一次给EC芯片,以便于其根据策略控制风扇转速。
/*
* Kernel helper policy
*
* Fan is controlled by EC in laptop pruducts, but EC can not get the current
* cpu temperature which used for adjusting the current fan speed.
*
* So, kernel read the CPU temperature and notify it to EC per second,
* that's all!
*/
struct loongson_fan_policy kernel_helper_policy = {
.type = KERNEL_HELPER_POLICY,
.adjust_period = 1,
.depend_temp = loongson3_cpu_temp,
};
/*
* Policy at step mode
*
* up_step array | down_step array
* |
* [min, 50), 50% | (min, 45), 50%
* [50, 60), 60% | [45, 55), 60%
* [60, 70), 70% | [55, 65), 70%
* [70, 80), 80% | [65, 75), 80%
* [80, max), 100% | [75, max), 100%
*
*/
struct loongson_fan_policy step_speed_policy = {
.type = STEP_SPEED_POLICY,
.adjust_period = 1,
.depend_temp = loongson3_cpu_temp,
.up_step_num = 5,
.down_step_num = 5,
.up_step = {
{MIN_TEMP, 50, 50},
{ 50, 60, 60},
{ 60, 70, 70},
{ 70, 80, 80},
{ 80, MAX_TEMP, 100},
},
.down_step = {
{MIN_TEMP, 45, 50},
{ 45, 55, 60},
{ 55, 65, 70},
{ 65, 75, 80},
{ 75, MAX_TEMP, 100},
},
};
/*
* Constant speed policy
*
*/
struct loongson_fan_policy constant_speed_policy = {
.type = CONSTANT_SPEED_POLICY,
};
相关的部分代码
了解到这个原因后,就参考官方的内核,把相关代码搬到5.10内核中,并根据新的内核源码做了修改,调整了Makefile。于是经过半小时的交叉编译,现在的5.10内核可以读取风扇转速了,而且一开机也不会全速运转发出噪音了,完全可以放在书房静音使用。
我把编译好的内核打了包 ,需要的朋友可以到以下地址下载。当然我周末会更新到之前做的NAS和系统的镜像中,之后下载的朋友就可以享受最新的静音NAS镜像了。已经安装的朋友可以用安装包手动更新内核(更新完记得改 /boot/grub.cfg 文件用新内核启动哦)。
下载地址:
- 百度网盘:https://pan.baidu.com/s/1TR0Kvn-BXehR6L9sPMEUmQ?pwd=geek 提取码:geek
- 夸克网盘:https://pan.quark.cn/s/e5155e4e13da 提取码:89EK
根据GPL协议,修改过的内核源代码可以在这里下载:
- 百度网盘:https://pan.baidu.com/s/18I2cdcDutkKuJ0fBYHBKmQ?pwd=geek 提取码:geek
- 夸克网盘:https://pan.quark.cn/s/653625f81d8f 提取码:vJYG
我直接换了个静音风扇
之前升级过6.1内核 好像除了风扇转速以外也没什么问题
大佬太厉害了,早有这个我就不用买了个猫扇了,猫扇也没啥用,也是很吵。马上试一下。
试了下新内核可以正常运行,风扇1100多转,温度60多度。有两个问题反馈一下:
1、默认的debian11不支持zst压缩的deb,所以用https://unix.stackexchange.com/questions/669004/zst-compression-not-supported-by-apt-dpkg 的方法重新做了一下deb才能安装
2、换猫扇的话,转速太慢压不住温度,所以大佬有没方法自己定义文中的温度和转速的对应关系。
我自己测试自己做的两个镜像都可以直接用sudo dpkg -i xxx.deb安装的啊
没有试用dpkg装,用了apt不行查到了可以该压缩就直接换了,如果dpkg可以就简单了。
补充一些内容,芯片驱动是drivers/platform/mips/sbx00_fan.c,安装了新内核后可以用/sys/devices/virtual/hwmon/hwmon3控制,pwm1_enable = 1时可以echo 0-255给pwm1来控制原装风扇速度,最大1800转(很吵)。我用的猫扇没法正常工作,可能是因为EC驱动里pm2_iowrite(FREQDIV0_REG, PWM_19KHZ); ,而猫扇的工作频率是25KHz,所以大佬能不能提供下修改后的kernel和交叉编译的命令?
没问题,稍后我把我改过之后的源码打包传上来。gcc交叉编译环境我用的龙芯提供的gcc-8.3环境,Loongnix.org网站有下
已经更新文章内容,加上了源码下载地址
感谢大佬的无私分享!
我是使用手动安装包从5.10升级到的这个修改的内核。在原来的内核版本中我使用一个USB无线网卡(rtl8192fu)连接WIFI。更换到新内核后,我重新编译安装其驱动产生以下报错
ERROR: Kernel configuration is invalid.
include/generated/autoconf.h or include/config/auto.conf are missing.
Run ‘make oldconfig && make prepare’ on kernel src to fix it.
我发现是/usr/src/linux-headers-5.10.205-geeklogic/include/autoconf.h文件缺失了
于是我按照提示进行make oldconfig && make prepare 或者我也尝试了make menuconfig
但这些命令都会产生同样的报错
/bin/sh: 1: scripts/basic/fixdep: Exec format error
在互联网上找了一段时间,还是没有理解这个报错应该如何解决。
本人是一名对计算机感兴趣的学生,第一次接触到linux内核层面的知识。提出问题和理解问题都不够成熟,希望能向大家请教一下问题出在哪里。谢谢。
找原来的linux-source-5.10安装包里提取这个文件