Android 驱动编译为模块或者built-in内核

Android 驱动编译为模块或者built-in内核

  • 作者:吴思含(Witheart)
  • 更新时间:20250414

1. 模块化编译(生成独立KO文件)

1.1 驱动目录创建

在内核源码树中创建专用目录:

bash 复制代码
mkdir -p kernel/drivers/net/can/usb/${YOUR_DRIVER_DIR}/

注:建议选择合理的目录结构,通常位于对应子系统目录下

1.2 模块化编译配置

创建模块专用Makefile(路径示例):

makefile 复制代码
KERNEL_SRC = ${ANDROID_KERNEL_SOURCE_PATH}
EXTRA_CFLAGS += -I$(KERNEL_SRC)/drivers/net/can/usb/${YOUR_DRIVER_DIR}
obj-m += ${DRIVER_NAME}.o

all:
    $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules

clean:
    $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean

1.3 交叉编译环境配置

bash 复制代码
export ARCH=${TARGET_ARCH}  # 如arm64
export CROSS_COMPILE=${TOOLCHAIN_PATH}/bin/${TARGET_PREFIX}- 
export PATH=$PATH:${TOOLCHAIN_PATH}/bin

1.4 执行模块编译

在驱动目录下运行:

bash 复制代码
make -j$(nproc)

生成产物:${DRIVER_NAME}.ko


2. 内核集成编译(直接编译进内核)

2.1 内核配置修改

添加Kconfig配置项:

kconfig 复制代码
# 文件位置参考:kernel/drivers/net/can/usb/Kconfig
config CAN_USB_${DRIVER_ID}
    tristate "${DRIVER_DESCRIPTION}"
    depends on USB
    help
        Driver support for ${DEVICE_DESCRIPTION}

2.2 构建系统集成

修改父目录Makefile:

makefile 复制代码
# 文件位置示例:kernel/drivers/net/can/usb/Makefile
obj-$(CONFIG_CAN_USB_${DRIVER_ID}) += ${YOUR_DRIVER_DIR}/

修改模块专用Makefile(路径示例):

makefile 复制代码
obj-$(CONFIG_CAN_USB_${DRIVER_ID}) += ${DRIVER_NAME}.o

2.3 内核编译配置

通过menuconfig启用驱动:

bash 复制代码
make menuconfig

配置路径示例:

复制代码
Device Drivers 
  → Network device support 
    → CAN 
      → USB CAN adapters 
        → <*> ${DRIVER_NAME}

2.4 整个系统编译

相关推荐
复园电子14 分钟前
企业级PDF批量盖章方案选型指南
数据库·pdf
Championship.23.245 小时前
Linux 3.0 锁机制与故障排查详解
linux·运维·服务器
天疆说6 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
AI-好学者7 小时前
阶段一-图数据库基础与PropertyGraph模型
数据库·rag·knowledge graph·graphrag
-SOLO-7 小时前
Android Event 日志完全指南
android
风123456789~7 小时前
【Linux专栏】ls 排除某个文件
linux·运维·服务器
壮哥_icon8 小时前
【Android 系统开发】从掉帧卡顿到丝滑:高频硬件中断(IRQ)的 CPU 亲和性性能优化实战
android·性能优化
千里马学框架8 小时前
Android Framework 新手学习踩坑建议指南
android·智能手机·性能优化·framework·aaos·车载开发·系统工程师
IT曙光8 小时前
ubuntu apt-get离线源制作
linux·ubuntu
其实防守也摸鱼8 小时前
运维--学习阶段问题解答(1)(自测)
linux·运维·服务器·数据库·学习·自动化·命令模式