一、假设在 drivers/net/ 下新增目录 bb
-
创建目录
mkdir drivers/net/bb
-
在父目录 Kconfig 中添加子目录
bash
# 编辑 drivers/net/Kconfig
# 在合适位置添加:
source "drivers/net/bb/Kconfig"
- 在父目录 Makefile 中添加编译规则
bash
# 编辑 drivers/net/Makefile
# 添加:
obj-$(CONFIG_BB_DRIVER) += bb/
#必须带斜杠 /,表示这是一个子目录
#make会进入 bb/ 目录继续处理该目录下的Makefile
#不带斜杠,表示直接编译当前目录的 bb_driver.c → bb_driver.o
- 在新目录
bb中创建三个文件
bash
drivers/net/bb/
├── bb_driver.c # 你的驱动源码
├── Makefile # 告诉编译器如何编译
└── Kconfig # 驱动配置选项
-----------------------------------------------------
关键文件示例
bb/Kconfig:
config BB_DRIVER
tristate "BB Network Driver"
depends on NETDEVICES
help
This is a sample driver for BB chipset.
-----------------------------------------------------
bb/Makefile:
# 如果 bb_driver.c 编译进内核
obj-$(CONFIG_BB_DRIVER) += bb_driver.o
-----------------------------------------------------
# 如果有多个源文件
# bb_driver-objs := main.o helper.o
#从 main.c 和 helper.c 编译,然后链接成 bb_driver.o
-objs 是多文件模块的专用标记,告诉 Kbuild "别找 .c 文件了,按我列出的文件列表编译"。
# 实际执行流程:
main.c + helper.c
↓ ↓
main.o + helper.o ← 编译阶段
↓ ↓
bb_driver.o ← 链接阶段
-----------------------------------------------------------------
记住:在 Kbuild 中永远使用 +=,因为你是在向系统追加编译目标,而不是替换整个列表。
:= 立即展开赋值
+= 追加赋值