参考 Linux 内核配置
1 概述
内核编译时会根据内核目录下的.config文件进行编译,而进行内核配置时实际上就是修改.config文件.一般常见的硬件平台在内核目录arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用cp命令将其覆盖内核根目录下的.config文件.
在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做).而配置命令有以下几种:


- Kconfig 是 "规则",定义所有可配置项;
- deconfig 是 "模板",提供快速初始化配置;
- .config 是 "结果",包含最终编译所需的完整配置;
- 配置工具是 "桥梁",连接规则与结果,确保依赖关系正确。
通过这一套体系,Linux 内核实现了高度可定制化,支持从嵌入式设备到服务器的广泛场景。
make ARCH=<平台> config #比较繁琐,不推荐
make ARCH=<平台> oldconfig #常用于内核升级,提示新内核特性
make ARCH=<平台> menuconfig #常用
make ARCH=<平台> xconfig #X界面的配置方式
make ARCH=<平台> gconfig #GTK界面的配置方式
make ARCH=<平台> defconfig #使用默认的配置
make ARCH=<平台> allyesconfig #所有配置选项设置为yes
make ARCH=<平台> allmodconfig #所有选项配置为module
在配置时,每一项都有几种选项,分别为Y,N,M.
Y : 代表将此项编译入内核中
N : 代表不将此项编译
M : 代表将此项编译为模块,在需要使用到的时候再加载入内核

2 操作技巧
- 基于现有配置修改
bash
cp /boot/config-$(uname -r) .config # 复制当前系统配置
make menuconfig # 基于现有配置修改
- 预设配置选项
bash
scripts/config --set-val CONFIG_XXX y # 命令行修改配置
make olddefconfig # 应用默认值填充未设置的选项
make savedefconfig #当前的配置到一个默认配置文件 `defconfig` 中
- 配置差异分析
bash
diff .config.old .config.new # 比较两个配置文件差异
- 环境变量预设
bash
export KCONFIG_CONFIG=myconfig # 指定自定义配置文件
export KCONFIG_OVERWRITECONFIG=1 # 强制覆盖原.config
注意事项:
不要手动编辑 .config:应始终通过配置工具修改
处理 CONFIG_DEBUG_INFO:启用会显著增大内核体积
模块化权衡:关键功能(如文件系统驱动)建议编译进内核
架构特定选项:通过 ARCH=arm make menuconfig 指定架构
配置冲突处理:仔细阅读错误提示,解决依赖关系
3 久久派内核配置
工程太大,直接用 wuwu, 不过裁剪了 USB , U盘不能用
4 内核添加 WiFi 驱动
参考 零炻
【龙芯99派新世界】1.buildroot移植(恢复wifi)
WIFI驱动开发-腾讯云开发者社区-腾讯云
1 添加编译器路径
bash
export PATH=${PATH}:/opt/loongson-gnu-toolchain-13.2/bin # 添加路径
loongarch64-unknown-linux-gnu-gcc --version # 检查生效
2 复制文件夹修改makefile Kconfig
内核路径drivers/net/wireless下有一个aic8800文件夹,复制到新内核中,并修改wireless文件夹下的Makefile和Kconfig文件。
自行添加 makefile文件:
obj-y += aic8800/
#自行添加Kconfig文件
source "drivers/net/wireless/aic8800/Kconfig"
3 编译命令(要有编译器)
make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- ls2k0300_99_pai_wifi_defconfig # 生成 .config 文件
make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- menuconfig # 基于当前 .config 文件加载配置(如果没有 .config,会使用默认配置或 defconfig)
make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- -j$(nproc) # 编译内核生成 vmlinux 和模块
用menuconfig的命令开启aic8800的驱动,内置和模块化都可以,aic8800_fdrv一定要有其他不选也行。(模块化要自己编译好驱动自己移植到根文件系统中)
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API
[ ] nl80211 testmode command
[ ] enable developer warnings
[ ] cfg80211 certification onus
[*] enable powersave by default
[ ] cfg80211 DebugFS entries
[*] support CRDA
[*] cfg80211 wireless extensions compatibility
<*> Generic IEEE 802.11 Networking Stack (mac80211)
<*> RF switch subsystem support --->
[*] RF switch input support
<*> GPIO RFKILL driver
Device Drivers --->
Network device support --->
[*] Wireless LAN --->
[*] AIC wireless Support
(/vendor/etc/firmware) Firmware & config file path #指定firmware 后面要复制文件到根文件系统
<M> AIC8800 wlan Support
< > AIC8800 bluetooth Support
4 修改设备树
修改设备树和mmc驱动即可,接着看看GPIO是不是有冲突,默认有一个PWM冲突sdio去掉pwm,同时触摸屏也和一个有冲突,用编译命令进行编译。
5 编译
编译后生成了:
6复制*.ko
将2个ko复制出来到根文件系统中
sudo cp aic8800_fdrv.ko /home/wuwu/linux/nfs/lsrootfs/usr/lib/modules/6.9.0-rc7 -r
sudo cp aic8800_bsp.ko /home/wuwu/linux/nfs/lsrootfs/usr/lib/modules/6.9.0-rc7 -r
查看一下
ll ~/linux/nfs/lsrootfs/usr/lib/modules/6.9.0-rc7
7 复制固件
将 firmware 复制到根文件系统 , 因为在编译内核时,指定firmware的位置在 (/vendor/etc/firmware)。 wu的文件系统中是复制到了 /usr/lib/firmware/ ,这时复制到什么地方,是与内核编译时4.3中指定的位置相同,后面启动后是要到这里去找对应的固件。

sudo cp vendor /home/wuwu/linux/nfs/lsrootfs/ -r
查看一下
ll ~/linux/nfs/lsrootfs/vendor/etc/firmware