教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

第一章2.驱动程序加载及重要的数据结构

来源:网络收集 时间:2026-08-31
导读: 驱动开发 连接一个模块到内核 驱动开发 动态加载驱动程序 模块在内核空间运行, 而应用程序在用户空 间运行. 这个概念是操作系统理论的基础. 模块初始化函数的任务是为以后调用模块 的函数做准备. 模块的退出函数( 例子里是 hello_exit )就在 模块被卸载时调

驱动开发

连接一个模块到内核

驱动开发

动态加载驱动程序 模块在内核空间运行, 而应用程序在用户空 间运行. 这个概念是操作系统理论的基础. 模块初始化函数的任务是为以后调用模块 的函数做准备. 模块的退出函数( 例子里是 hello_exit )就在 模块被卸载时调用.

驱动开发

在内核中加入驱动程序 把hello.c拷入内核源码的“drivers/char/”目录下. 修改同目录下的“Kconfig”文件,在7 行添加如 下内容:(红色部分所示)menu "Character devices“ config Neusoft_HELLO tristate “Neusoft2410 Hello Driver" depends on ARCH_S3C2410 help Neusoft Neu2410 Hello.

驱动开发

在内核中加入驱动程序 修改同目录下的“Makefile”文件,在12 行添加如下内容:obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o – obj-$(CONFIG_ Neusoft_HELLO) += hello.o – obj-$(CONFIG_LEGACY_PTYS) += pty.o

在linux代码树顶端键入:#make menuconfigDevice Drivers --->Character devices ---> <M> Neusoft2410 Hello Driver

#make SUBDIR=drivers/char/modules

驱动开发

一些重要数据结构 file_operations . file . inode .

驱动开发

文件操作 :file_operation 结构 struct module *owner– 第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这 个成员用来在它的操作还在被使用时阻止模块 被卸载. 几乎所有时间中, 它被简单初始化为 THIS_MODULE, 一个在 <linux/module.h> 中 定义的宏.

驱动开发

文件操作 :file_operation 结构 loff_t (*llseek) (struct file *, loff_t, int);– llseek 方法用作改变文件中的当前读/写位置, 并且新位置作为(正的)返回值. loff_t 参数是一 个"long offset", 并且就算在 32位平台上也至少 64 位宽. 错误由一个负返回值指示. 如果这个函 数指针是 NULL, seek 调用会以潜在地无法预 知的方式修改 file 结构中的位置计数器( 在"file 结构" 一节中描述).

驱动开发

文件操作 :file_operation 结构 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);– 用来从设备中获取数据. 在这个位置的一个空 指针导致 read 系统调用以 -EINVAL("Invalid argument") 失败. 一个非负返回值代表了成功 读取的字节数( 返回值是一个 "signed size" 类 型, 常常是目标平台本地的整数类型).

驱动开发

文件操作 :file_operation 结构 ssize_t (*aio_read)(struct kiocb *, char __user *, size_t, loff_t);– 初始化一个异步读 -- 可能在函数返回前不结束 的读操作. 如果这个方法是 NULL, 所有的操作 会由 read 代替进行(同步地).

驱动开发

文件操作 :file_operation 结构 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);– 发送数据给设备. 如果 NULL, -EINVAL 返回给 调用 write 系统调用的程序. 如果非负, 返回值 代表成功写的字节数.

驱动开发

文件操作 :file_operation 结构 ssize_t (*aio_write)(struct kioc

b *, const char __user *, size_t, loff_t *);– 初始化设备上的一个异步写.

驱动开发

文件操作 :file_operation 结构 unsigned int (*poll) (struct file *, struct poll_table_struct *);– poll 方法是 3 个系统调用的后端: poll, epoll, 和 select, 都用作查询对一个或多个文件描述符的读或写是否会 阻塞. poll 方法应当返回一个位掩码指示是否非阻塞的 读或写是可能的, 并且, 可能地, 提供给内核信息用来使 调用进程睡眠直到 I/O 变为可能. 如果一个驱动的 poll 方法为 NULL, 设备假定为不阻塞地可读可写.

驱动开发

文件操作 :file_operation 结构 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);– ioctl 系统调用提供了发出设备特定命令的方法 (例如格式化软盘的一个磁道, 这不是读也不是 写). 另外, 几个 ioctl 命令被内核识别而不必引 用 fops 表. 如果设备不提供 ioctl 方法, 对于任 何未事先定义的请求(-ENOTTY, "设备无这样 的 ioctl"), 系统调用返回一个错误.

驱动开发

文件操作 :file_operation 结构 int (*mmap) (struct file *, struct vm_area_struct *);– mmap 用来请求将设备内存映射到进程的地址 空间. 如果这个方法是 NULL, mmap 系统调用 返回 -ENODEV.

驱动开发

文件操作 :file_operation 结构 int (*open) (struct inode *, struct file *);– 尽管这常常是对设备文件进行的第一个操作, 不要求驱动声明一个对应的方法. 如果这个项 是 NULL, 设备打开一直成功, 但是你的驱动不 会得到通知.

驱动开发

文件操作 :file_operation 结构 int (*release) (struct inode *, struct file *);– 在文件结构被释放时引用这个操作. 如同 open, release 可以为 NULL.

…… 此处隐藏:1037字,全部文档内容请下载后查看。喜欢就下载吧 ……
第一章2.驱动程序加载及重要的数据结构.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1693618.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)