编译的mainline版本的固件不能驱动风扇吗?

编译了主线5.3-rc4内核的ubuntu server版本固件,安装后发现无法驱动风扇啊。使用4.9的编译固件是可以驱动风扇的,但这个4.9固件使用lsmod看了一下,发现很多缺省的内核模块都没编译进去啊,这是什么情况?

@bluehj 主线的代码里暂时没有加上风扇的驱动,风扇在主线里暂时无法使用。你指的4.9的代码,内核缺省的模块是指哪些

是的,我指的就是github里的你们的那个4.9的,应该是和你们官方提供下载的固件一样的吧,官方固件安装后也是一样,内核默认只加载了一些关于视频解码类的模块吧,一些相关iptables,tcp网络相关的模块都无法用modprode去加载啊

@bluehj 里面不是所有模块都有包括的,你需要的话,有一些可能需要自己加。github上的源码编译出来就是我们的 固件

@Frank 嗯,那我想在你们4.9内核的基础上想加上一些我需要的模块,你们这个内核的配置 config文件在那个路径下

@bluehj path/to/fenix/linux/arch/arm64/configs/kvims_defconfig . 你刚下载下来的fenix是没有linux这个文件夹的,你要先按照readme编译,会自动下载linux和uboot。

@Frank 好的,我试试先,非常感谢如此迅速的回复

@Frank 我尝试了,按照readme编译了一遍ubuntu 4.9-server-SD版本的,然后目录里就有LINUX文件夹
然后我修改/fenix/linux/arch/arm64/configs/kvims_defconfig文件,添加了
CONFIG_TCP_CONG_HTCP=m
CONFIG_TCP_CONG_HYBLA=m
CONFIG_TCP_CONG_BBR=m
这3个是我需要加载的内核模块
然后make clean 接着开始用make编译
编译过程中遇到这个提示
Bootloader build done!
Linux: Already on branch ‘khadas-vims-4.9.y’

Warning:: Repo[/root/project/khadas/fenix/linux] You made some modifications to file(s):

[
arch/arm64/configs/kvims_defconfig
]
Info: Try to update linux:khadas-vims-4.9.y
From https://github.com/khadas/linux

  • branch khadas-vims-4.9.y -> FETCH_HEAD
    Already up to date.

让我CTRL-c取消还是回车继续,我回车后编译继续一直到完成
但编译出来的固件似乎并没有添加进我上面添加的三个模块

查看linux目录下的.config文件里面有没有你要的配置?

有些配置是有依赖关系的,你这样直接修改可能会有问题,如果有依赖就有可能导致没有加进去。
建议使用make ARCH=arm64 menuconfig进行配置,在保存到默认配置文件。

1 Like

@numbqq 当编译一次官方的ubuntu-server-4.9 后linux目录下是有.config文件产生了
然后我先备份了下.config.bak 使用make ARCH=arm64 menuconfig开始配置,只是M了一个bbr模块测试

对比老的.config.bak文件,新的.config文件里只是多了如下内容
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_BIC=m
CONFIG_TCP_CONG_CUBIC=y
CONFIG_TCP_CONG_WESTWOOD=m
CONFIG_TCP_CONG_HTCP=m

CONFIG_TCP_CONG_HSTCP is not set

CONFIG_TCP_CONG_HYBLA is not set

CONFIG_TCP_CONG_VEGAS is not set

CONFIG_TCP_CONG_NV is not set

CONFIG_TCP_CONG_SCALABLE is not set

CONFIG_TCP_CONG_LP is not set

CONFIG_TCP_CONG_VENO is not set

CONFIG_TCP_CONG_YEAH is not set

CONFIG_TCP_CONG_ILLINOIS is not set

CONFIG_TCP_CONG_DCTCP is not set

CONFIG_TCP_CONG_CDG is not set

CONFIG_TCP_CONG_BBR=m
然后我重新make固件,但重新编译时发现这个.config文件又会自动被改回,我添加的部分都被去掉了

这个.config文件是被自动生成的,最后新生成固件里/boot/config-4.9.190也没有我添加的部分,说明bbr没有被更新编译进去吧。

还有这个linux下的.config和/linux/arch/arm64/configs/kvims_defconfig是什么关系?如果我同时在kvims_defconfig里也添加上述的改动内容,会是什么情况?到底内核编译时是调用了哪些配置文件呢?

@bluehj 你修改完以后,要用make ARCH=arm64 savedefconfig保存为defconfig,然后替换arch/arm64/config/kvims_defconfig,再编译。编译时会默认加载这个kvims_defconfig.

重新按如下步骤做了一遍
1.默认编译了一遍ubuntu-4.19-server-SD版
2.cd linux
make ARCH=arm64 menuconfig
添加如下图:




M上了tcp_hybla和tcp_htcp以及bbr
然后保存退出
3.make ARCH=arm64 savedefconfig保存为defconfig
提示:scripts/kconfig/conf --savedefconfig=defconfig Kconfig
drivers/net/wireless/bcmdhd/Kconfig:53:warning: defaults for choice values not supported
4.cp ~/project/khadas/fenix/linux/defconfig ~/project/khadas/fenix/linux/arch/arm64/configs/kvims_defconfig
5. make 重新编译固件
新固件烧录到U盘后启动系统

测试如下:
echo “net.core.default_qdisc=fq” >> /etc/sysctl.conf
echo “net.ipv4.tcp_congestion_control=bbr” >> /etc/sysctl.conf

root@Khadas:~# sysctl -p
sysctl: setting key “net.core.default_qdisc”: No such file or directory
net.core.default_qdisc = fq
sysctl: setting key “net.ipv4.tcp_congestion_control”: No such file or directory
net.ipv4.tcp_congestion_control = bbr

测试加载tcp_htcp或tcp_hybla
root@Khadas:~# modprobe tcp_hybla
modprobe: FATAL: Module tcp_hybla not found in directory /lib/modules/4.9.190
root@Khadas:~# modprobe tcp_htcp
modprobe: FATAL: Module tcp_htcp not found in directory /lib/modules/4.9.190

更改kernel仅仅只是make是不行的。这样打包的还是之前旧的deb包。要先编译新的deb包。

$ make kernel
$ make kernel-deb
$ make

这样才会生成新的deb包。

或者其实你不用重新打包,只需要把新的deb包拷贝到板子上执行安装新的kerne deb即可。

新的deb包在目录: build/images/debs/0.7/linux-image-amlogic-4.9_0.7_arm64.deb

$ sudo dpkg -i linux-image-amlogic-4.9_0.7_arm64.deb
$ sync
$ sudo reboot

非常感谢,目前已经可以加载我添加的这三个模块tcp_htcp,tcp_hybla,bbr
但是BBR加载有些问题
root@Khadas:~# sysctl net.core.default_qdisc=fq
sysctl: setting key “net.core.default_qdisc”: No such file or directory
net.core.default_qdisc = fq
这个不知道是怎样的问题。我在其他4.9以上内核的发行版各种LINUX都没有出现过问题

另外,还有个模块我需要添加就是xt_TPROXY 模块,我在其他版本的内核config文件里都可以找到以下四个关于TPROXY的选项,只要M上就可以编译内核后使用modprobe xt_TPROXY来手动加载。
CONFIG_NFT_TPROXY
CONFIG_NETFILTER_XT_TARGET_TPROXY
CONFIG_NF_TPROXY_IPV4
CONFIG_NF_TPROXY_IPV6
但是在khadas 这里的linux的.confg中只有CONFIG_NETFILTER_XT_TARGET_TPROXY,其他三个都没有
不知怎么处理

那说明4.9内核不支持这些,你需要使用更新的主线内核或者你从主线内核把这些东西移植过来(估计难度比较大)。

嗯,如果我使用主线内核,就涉及到风扇的驱动无法应用到上面,我尝试过直接使用150balbes的Armbian_19.11.3_Aml-g12_bionic_legacy_5.3.0_20191126 装完以后一是风扇问题无法驱动,二是有线网卡的mac地址好像无法锁定,每次重启都变一个

下周会release一版固件,会增加风扇控制。

这个应该是好解决的。

不知道官方是否可以发布一个针对server的精简固件,内核默认编译的模块配置文件就用ubuntu发行版里的config为母板,然后针对vim1/2/3具体的硬件配置做更改使其更优化地适配,最后封装时添加的deb也按发行版里的mini server的添加,目前fenix里的server版安装了很多没啥用的deb,感觉这些deb都是用在DESKTOP版上的环境或开发环境下的