Linux驱动编译模块和开机自动挂载模块

本文介绍如何编译Linux驱动模块,并实现驱动在系统启动时自动挂载的方法。包括驱动文件的编译步骤、模块的加载与卸载、以及如何通过修改配置文件使驱动随系统启动而自动加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux驱动编译模块和开机自动挂载模块

  • Fang XS.
  • 1452512966@qq.com
  • 如果有错误,希望被指出

需要的驱动文件

简单测试程序

driver.c

#include <linux/init.h>
#include <linux/module.h>

static int dev_test_init(void){
   printk("dev_test_init..\n");
    return 0;
}
static void dev_test_exit(void){
    printk("dev_test_exit..\n");
}

module_init(dev_test_init);
module_exit(dev_test_exit);

MODULE_LICENSE("GPL");

Makefile

# 编译成内核模块的名字,跟驱动C文件名对应
obj-m 	+= driver.o
# 当前系统的内核路径
# KDIR 	:= /lib/modules/$(shell uname -r)/build 		
# 开发的目标板子的源码路径 根据实际情况修改
KDIR 	:= /home/usr_name/linux					
all:
	make -C $(KDIR) M=$(shell pwd) modules
	rm -f *.o *.mod *.mod.c *.order *.symvers .*.cmd	#删除不必要的中间文件
clean:	
	rm -f *.o *.mod.c *.ko .*.*.cmd

编译模块

  • 在编写的驱动文件目录执行
    make
  • 得到.ko文件

在这里插入图片描述

加载驱动模块

  • 需要管理员权限
    sudo su
  • 加载驱动模块
    insmod driver.ko
    或者使用
    modprobe命令

在这里插入图片描述

查看模块

lsmod | grep driver
查看其他信息
在这里插入图片描述

卸载模块

rmmod driver // 不带.ko
或者
modprobe命令
在这里插入图片描述

关于modprobeinsmod rmmod

  • insmod加载内核模块, rmmod卸载内核模块,并不会分析模块的依赖性,假如存在模块依赖性,无法直接加载或卸载模块。
  • modprobe智能的提供了模块的依赖性分析、错误检查、错误报告等功能。
  • modprobe 命令默认会去/lib/modules/$(uname -r)目录中查找模块。
  • 使用modprobe加载驱动方法(以字符驱动为例):
    1. 复制驱动模块到/lib/modules/$(uname -r)/kernel/char/
      • cp testdev.ko /lib/modules/5.15.0-56-generic/kernel/drivers/char
    2. 生成相关依赖
      • depmod
    3. 加载驱动
      • modprobe testdev
    4. 查看驱动
      • lsmod | grep test
    5. 卸载驱动
      • modprobe -r testdev

  • 这是驱动调试阶段,驱动加载常用方法。
  • 此方法是一次性加载驱动,重启之后内核里就没有这个驱动了。
  • 让驱动一直挂载系统

开机自动挂载模块

  • 开机挂载模块通常是挂载文件系统或者网卡,声卡驱动等。下面以测试驱动程序为例:
  • 修改配置文件
    • vim /etc/moudles // 添加驱动名(不加.ko

在这里插入图片描述

  • 添加模块到相应路径
    • /lib/modules/$(shell uname -r)/kernel/drivers/char // 根据实际情况修改
  • 生成相关依赖
    • depmod -a
  • 重启
    • reboot
  • 验证模块是否开机加载成功
    • lsmod | grep driver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值