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

相关推荐
敲上瘾15 分钟前
Redis持久化存储机制:从RDB到AOF再到混合持久化的配置与实践
linux·数据库·redis·缓存
小张同学a.20 分钟前
OpenStack 私有云实战 2—— Glance 镜像与 Nova 计算服务搭建
linux·运维·服务器·openstack
xiaoye-duck40 分钟前
《Linux网络编程》TCP 网络编程(下):基于 TCP 多线程通用字典服务 + 远程命令执行实战
linux·服务器·tcp/ip
陈让然1 小时前
VS Code C/C++ 插件 cpptools 内存占用异常
linux·运维
zh73142 小时前
typephp的编译核心phpx原理解析
android·java·开发语言
2401_894915534 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
正儿八经的少年8 小时前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
胖大师9 小时前
Android Audio-FW
android
xrandzj9 小时前
MySQL8.0 从零通关核心操作手册(Ubuntu实战版)
数据库·mysql
我不会插花弄玉9 小时前
4.数据类型【由浅入深-MySQL】
数据库·mysql