ophub / amlogic-s9xxx-armbian

Support for Armbian in Amlogic, Rockchip and Allwinner boxes. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.
GNU General Public License v2.0
6.24k stars 2k forks source link

内核编译自定义配置不生效 #1833

Closed daifiyum closed 1 year ago

daifiyum commented 1 year ago

Device Information | 设备信息

Armbian Version | 系统版本

Describe the bug | 问题描述 个人需求,需要自定义几个内核配置,通过Action和Ubuntu22.04进行编译,都出现自定义配置不生效的问题,详细描述见下方

Please provide a detailed description of the issue and, if necessary, attach a screenshot. 详细描述问题,并在必要时附上屏幕截图。

克隆仓库到本地 git clone --depth 1 https://github.com/ophub/amlogic-s9xxx-armbian.git

安装必要的软件包:

sudo apt-get update -y sudo apt-get full-upgrade -y sudo apt-get install -y $(cat compile-kernel/tools/script/ubuntu2204-build-armbian-depends)

编辑~/amlogic-s9xxx-armbian/compile-kernel/tools/config/config-6.1 自定义内核配置(由y改成m):

CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_FOU=m
CONFIG_IPV6_FOU_TUNNEL=m

进入 ~/amlogic-s9xxx-armbian 根目录,然后运行 sudo ./recompile -k 6.1.61 编译内核

编译完后将内核上传到N1的家目录并解压,进入解压后的内核目录下,运行armbian-update命令从6.1.60内核更新到当前目录内的6.1.61内核

完成更新后,再次ssh登入系统,执行zcat /proc/config.gz | grep “IPV6”命令查看内核配置文件,发现自定义的那几个配置项(除了CONFIG_IPV6_SIT)并没有改成m还是y,即没有生效

如图所示: 屏幕截图 2023-11-06 081917

daifiyum commented 1 year ago

我发现编译时,把~/amlogic-s9xxx-armbian/compile-kernel/tools/config/config-6.1配置文件复制到内核源码目录下并重命名为.config,但他似乎不仅仅是复制,还对.config里面的配置做了还原,比如把我修改的部分配置全给还原了...,这也就说明了为什么我自定义配置编译后不生效的原因,但这是怎么回事?

ophub commented 1 year ago

config文件的正确配置方法: 在你的~/amlogic-s9xxx-armbian/compile-kernel/kernel/linux-6.1.y里面(复制config-6.1进来,重命名为.config)运行make menuconfig,找到要配置的项目,勾选或取消,保存退出。 把得到的.config 复制到 ~/amlogic-s9xxx-armbian/compile-kernel/tools/config/config-6.1 然后再编译,这样就使用配置好的文件了。

你直接手工修改,有些选项有前置配置项,所以直接修改不能被接受。

daifiyum commented 1 year ago

有点莽了,9千多行的配置我直接徒手改...,去试试make menuconfig

daifiyum commented 1 year ago

编辑recompile文件,把make ${MAKE_SET_STRING} menuconfig取消注释,即可在编译时打开menuconfig配置界面,修改需自定义配置保存退出即可继续编译

ophub commented 1 year ago

这个修改适合本地编译,在actions里编译没法配置,需要手动上传本地配置好的config

daifiyum commented 1 year ago

cd ~/amlogic-s9xxx-armbian/compile-kernel/kernel/linux-6.1.y目录下,执行make menuconfig,可以自定义配置,但保存后,发现.config文件里面多了很多和我自定义无关的配置项,而不是和我自定义相关的必要配置项,此时这个.config配置文件编译后,也无法成功安装内核???,但在recompile里面开启menuconfig进行配置,只会生成必要的配置项,并且内核可以正常安装

ophub commented 1 year ago

在目录下要先cp原来的config-6.1进来,命名为.config,再执行make menuconfig,这样使用已有的配置再修改添加自己的选项即可。如果你不复制,直接make menuconfig就没使用之前的选项,你要全部配置一遍。

daifiyum commented 1 year ago

我复制了原config-6.1配置文件到.../linux-6.1.y下,并重命名为.config,然后执行make menuconfig,保存生成的配置文件确实继承了原配置,但里面也多了很多不必要的配置,最后编译的内核也无法安装

daifiyum commented 1 year ago

下面这个配置修改比较图可以很直观的发现直接在.../linux-6.1.y目录下执行make menuconfig,得到的配置会多出很多不必要的配置项,甚至打开menuconfig后不修改,只保存配置,也会多出很多不必要的配置。

比较图左边是recompile开启menuconfig得到的配置,也可看我仓库修改 比较图右边是cd ...linux-6.1.y目录下执行menuconfig得到的配置

屏幕截图 2023-11-07 112746

daifiyum commented 1 year ago

recompile脚本,我发现需要在make menuconfig命令里面加上如下参数:

MAKE_SET_STRING = "ARCH=arm64 CROSS_COMPILE=/usr/local/toolchain/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- CC=/usr/local/toolchain/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc LD=/usr/local/toolchain/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ld.bfd LOCALVERSION=-ophub"

make ${MAKE_SET_STRING} menuconfig

这样保存后的配置就没什么问题了

ophub commented 1 year ago

是的,在x86里交叉编译时需要指定编译参数