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 整个系统编译

相关推荐
夜月yeyue1 小时前
TCP/IP 协议解析
linux·服务器·c语言·网络·网络协议·tcp/ip
ZC跨境爬虫1 小时前
SQL学习日志 Day_1:初识SQL,开启数据之旅
数据库·sql·学习
好名字更能让你们记住我1 小时前
通过docker在本地部署博客系统服务
linux·运维·服务器·ubuntu·docker·容器
计算机安禾1 小时前
【算法分析与设计】第37篇:平面扫描与线段交问题
java·大数据·数据库·算法·机器学习
恋猫de小郭1 小时前
Flutter 最好的 AI 自动化测试工具:Patrol
android·前端·flutter
hai3152475431 小时前
FiveOS V3.0 交付(微服务器操作系统版 · 物理合规修正
linux·人工智能·spring boot·后端·神经网络·机器学习
志栋智能1 小时前
超自动化巡检:让运维工作可衡量、可优化
运维·数据库·自动化
zxfBdd1 小时前
doris insert into和with as 合用
数据库·sql
诸葛务农1 小时前
共沸脱水技术及其在光刻胶用PGMEA纯化中的应用(上)
java·数据库·算法