【久久派】Linux 内核配置 添加wifi驱动和固件

参考 Linux 内核配置

1 概述

内核编译时会根据内核目录下的.config文件进行编译,而进行内核配置时实际上就是修改.config文件.一般常见的硬件平台在内核目录arch/<平台>/configs/文件夹下会包含有默认的配置文件,可以使用cp命令将其覆盖内核根目录下的.config文件.

在编译前都必须使用配置命令在内核根目录下进行一次配置(即使是使用默认的配置文件也必须这样做).而配置命令有以下几种:

  1. Kconfig 是 "规则",定义所有可配置项;
  2. deconfig 是 "模板",提供快速初始化配置;
  3. .config 是 "结果",包含最终编译所需的完整配置;
  4. 配置工具是 "桥梁",连接规则与结果,确保依赖关系正确。

通过这一套体系,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 操作技巧

  1. 基于现有配置修改
bash 复制代码
cp /boot/config-$(uname -r) .config  # 复制当前系统配置
make menuconfig                      # 基于现有配置修改
  1. 预设配置选项
bash 复制代码
scripts/config --set-val CONFIG_XXX y  # 命令行修改配置
make olddefconfig       # 应用默认值填充未设置的选项
make savedefconfig   #当前的配置到一个默认配置文件 `defconfig` 中
  1. 配置差异分析
bash 复制代码
diff .config.old .config.new          # 比较两个配置文件差异
  1. 环境变量预设
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
相关推荐
嵩山小老虎7 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Fleshy数模7 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
a41324477 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
一只自律的鸡9 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
17(无规则自律)9 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
!chen9 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器
REDcker10 小时前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
蒹葭玉树10 小时前
【C++上岸】C++常见面试题目--操作系统篇(第二十八期)
linux·c++·面试
2501_9277730710 小时前
imx6驱动
linux·运维·服务器
hy____12310 小时前
Linux_进程间通信
linux·运维·服务器