栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux模块化增加设备驱动程序

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux模块化增加设备驱动程序

Linux模块化增加设备驱动程序 目录

文章目录
  • Linux模块化增加设备驱动程序
    • 目录
    • 目的
    • 开发环境
    • 实验步骤
    • 关键代码
      • 打开设备
      • 释放设备,解除占用
      • 读取设备缓冲区内容到终端
      • 输入字符串,从终端读取,写入设备缓冲区
      • 注册字符设备
      • 注销字符设备
      • 添加模块宏定义和许可协议
    • 调试记录
    • 测试代码目录说明

目的
  1. 采用模块方法,添加一个新的字符设备驱动程序,实现打开/关闭、读/写等基本操作
  2. 编写一个应用程序,测试添加的驱动程序
开发环境
  • 操作系统: ubuntu 16.04LTS 64位
  • 内核版本:linux-4.14.141
  • 内存:8G
  • 处理器: IntelR CoreTM i5-6200U CPU@ 2.30GHz×4
  • 编辑器: Vim
  • 编译器: gcc version 5.4.0 20160609
实验步骤
  1. 编写设备驱动程序源文件mydev.c
  2. 编写Makefile文件,用于执行编译任务
  3. 将设备驱动程序源文件和Makefile文件拷贝到/usr/src/linux-4.14.141/drivers/misc/mydev目录下,在该目录打开终端
  4. 执行make命令,利用Makefile文件进行设备驱动模块编译,编译成功后生成mydev.ko文件
  5. 执行insmod mydev.ko,加载设备驱动模块
  6. 通过lsmod命令查看模块是否加载成功,通过cat /proc/devices命令查看新增设备名mydev和主设备号241
  7. 进入/dev目录,执行命令mknod /dev/mydev c 241 0,生成设备文件,其中,mydev为设备文件名,241为主设备号,0为从设备号,c表示字符设备,执行成功后在/dev目录中会生成一个新设备文件
  8. 编译测试程序,执行并进行测试
关键代码 打开设备
  1. 通过 MAJOR和MINOR返回主次设备号:

    printk("mydev: Main device number is %d  n Slave device number is %dn", MAJOR(inode->i_rdev), MINOR(inode->i_rdev));
    
  2. 使用静态变量保存打开设备的进程数:

    static int open_process = 0;
    
  3. 当设备未被占用,占有设备,当设备被占用,进程挂起:

 // 未被占用
if (open_process == 0) {
    open_process++; //标志占用
    try_module_get(THIS_MODULE);
    return 0;
} else {// 被占用
    printk(KERN_ALERT "Another process open the char device.n"); 
    //进程挂起
    return -1;
}
释放设备,解除占用
--open_process; //占用解除
module_put(THIS_MODULE);
读取设备缓冲区内容到终端

从内核拷贝数据到用户空间,调用内核函数copy_to_user

copy_to_user(buf, buffer, sizeof(buffer);
输入字符串,从终端读取,写入设备缓冲区

数据从用户空间拷贝到内核,调用内核函数copy_from_user

copy_from_user(buffer, buf, sizeof(buffer);
注册字符设备
result = register_chrdev(DEVICE_NUM, "mydev", &mydev_fops);
注销字符设备
unregister_chrdev(device_num, "mydev");
添加模块宏定义和许可协议
//模块宏定义
module_init(mydev_init);
module_exit(mydev_exit);
// 模块许可协议
MODULE_LICENSE("GPL");
调试记录
  1. 使用Makefile文件编译设备驱动模块

  1. 执行insmod mydev.ko,加载设备驱动模块

  1. 通过cat /proc/devices命令查看新增设备名mydev和主设备号

  1. 执行命令mknod /dev/mydev c 241 0,生成设备文件,查看设备文件

  1. 编译测试程序,执行并进行测试

测试代码目录说明

开源地址:OS_Kernel/compile_kernel&add_syscall

modularly_add_device_drivers 模块化添加驱动设备源文件目录

Linux模块化增加设备驱动程序.md

help.txt Makefile与make命令参考

Makefile make编译脚本

mydev.c 驱动程序源文件

test 测试程序

test.c 测试程序源代码

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871168.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号