驱动程序module的工作流程

简介: 驱动程序module的工作流程

驱动程序module的工作流程主要分为四个部分: 1、 insmod module 2、 驱动module的初始化(初始化结束后即进入“潜伏”状态,直到有系统调用) 3、 当操作设备时,即有系统调用时,调用驱动module提供的各个服务函数 4、 rmmod module


一、 驱动程序的加载

Linux驱动程序分为两种形式:一种是直接编译进内核,另一种是编译成module,然后在需要该驱动module时手动加载。

在用insmod加载module时,还可以给提供模块参数,如: static char *whom=”world”; static int  howmany=10; module_param(howmany,int,S_IRUGO); module_param(whom,charp,S_IRUGO); 这样,当使用insmod scull.ko  whom=”string”  howmany=20这样的命令加载驱动时,whom和howmay的值就会传入scull驱动模块了。


二、 驱动module的初始化 scull_init_module函数中主要做了以下几件事情: a) 分配并注册主设备号和次设备号 int register_chrdev_region(dev_t first, unsigned int count, char *name) int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)

b) 初始化代表设备的struct结构体:scull_dev

c) 初始化互斥体init_MUTEX d) 初始化在内核中代表设备的cdev结构体,最主要是将该设备与file_operations结构体联系起来。在Linux内核中,cdev结构体才是真正代表了某个设备。在内核调用设备的open,read等操作之前,必须先分配并注册一个或者多个cdev结构。


三、设备操作 涉及open ,close ioclt,release等函数


四、卸载 scull_cleanup_module



相关文章
|
2月前
|
JavaScript 前端开发 开发者
ES6模块系统
ES6 模块系统是 JavaScript 发展中的一个重要里程碑,它为开发者提供了更强大、更灵活和更高效的编程方式。你在使用模块系统时,是否遇到过一些具体的问题或有一些独特的见解呢?
83 48
|
6月前
|
存储 Java Unix
`APScheduler`(Advanced Python Scheduler)是一个轻量级的Python库,用于在应用程序中调度任务。
`APScheduler`(Advanced Python Scheduler)是一个轻量级的Python库,用于在应用程序中调度任务。
|
8月前
|
前端开发
平台设计-moduleID的使用
整个平台上有很多相同的功能
|
8月前
|
JavaScript 前端开发 开发者
CommonJS 和 ES6 Module:一场模块规范的对决(上)
CommonJS 和 ES6 Module:一场模块规范的对决(上)
|
JavaScript 前端开发 开发者
各种模块化方案的解释-AMD-CMD-Module
各种模块化方案的解释-AMD-CMD-Module
62 0
|
JavaScript 前端开发
模块化开发:CommonJS、AMD 和 ES6 Modules 的区别与使用方式
在前端开发中,模块化开发是一种重要的编程方法,它可以帮助我们更好地组织和管理代码,提高代码的可维护性和复用性。在JavaScript中,有多种模块化开发的标准,包括CommonJS、AMD和ES6 Modules。让我们逐一了解它们的区别和使用方式:
214 0
|
存储 缓存 前端开发
前端模块化详解(CommonJS、AMD、CMD、ES Module)
本篇文章介绍了前端模块化的发展过程,以及常用的模块化规范。
737 1
|
Java Android开发
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
Java工具IDEA创建模块(Module)、如何创建 Module:、如何删除模块
GoogleGuava - 第 1 章 基本工具——使用和避免NULL
GoogleGuava - 第 1 章 基本工具——使用和避免NULL
94 0
GoogleGuava - 第 1 章 基本工具——使用和避免NULL
|
Linux
linux网络驱动初始化module_init函数跟踪
module_init函数对做驱动开发的同学是在太熟悉了,但是关于底层的知识可能大家有些不愿去了解,而其中知识对于网络初始化也直接相关,所以先将此分享。 在驱动程序中有module_init函数,该函数定义在文件 include/linux/module.h中(以前好像在include/linux/init.h中),如下。
2362 0