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

相关推荐
天疆说几秒前
腾讯会议 Linux 版在 NVIDIA 显卡上看不到画面:EGL 像素配置与窗口视觉不匹配的排查与修复
linux·数据库·腾讯会议
geats人山人海10 分钟前
linux 2 基本操作与vim
linux·运维·vim
2603_9695792827 分钟前
中小团队数据库选型:MySQL vs PostgreSQL,业务场景怎么选
数据库·mysql·postgresql
martindelophy1 小时前
用自然语言剪视频:我们在 Timeline Studio 中实现了 ChatCut 对话剪辑
android·音视频
lisanmengmeng1 小时前
NRPE 添加命令(三)
java·linux·服务器
IT大白鼠1 小时前
图数据库系列 · 第 06 篇——避坑汇总:经典生产问题
数据库·nosql·图库数据库
江湖有缘1 小时前
3开源Sqlite数据库管理工具整理合集,可Docker一键部署!
数据库·sqlite·开源
人工智能培训1 小时前
数字孪生驱动大模型工业知识库:为具身机器人植入领域专业经验
大数据·linux·服务器·前端·人工智能
jyOverQ1 小时前
Redis 持久化怎么做?RDB、AOF 与混合持久化
数据库·redis