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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第一章2.驱动程序加载及重要的数据结构

Struct cdev的分配可使用cdev_alloc函数 来完成。 struct cdev *cdev_alloc(void) Kmalloc(sizeof(struct dev),GFP_KERNEL); memset(,,); 设备注册(分配) Struct cdev的初始化使用cdev_init函数 来完成。 void cdev_init(struct cdev *cdev, const struct file_operations *fops) 参数: cdev: 待初始化的cdev结构 fops: 设备对应的操作函数集 设备注册(初始化) struct cdev的注册使用cdev_add函数来完成。 int cdev_add(struct cdev *p, dev_t dev, unsigned count) 参数: p: 待添加到内核的字符设备结构 dev: 设备号 count: 添加的设备个数 设备注册(添加) 读和写方法都完成类似的工作:从设备中读取数据到用户空间;将数据传递给驱动程序。它们的原型也相当相似: ssize_t xxx_read(struct file * filp, char __user * buff, size_t count, loff_t *offp); ssize_t xxx_write(struct file *filp, char __user * buff, size_t count, loff_t *offp); 对于2 个方法, filp是文件指针, count是请求传输的数据量。buff 参数指向数据缓存。最后, offp 指出文件当前的访问位置。 读和写 Read 和Write 方法的buff 参数是用户空间 指针。因此, 它不能被内核代码直接引用,理 由如下: 用户空间指针在内核空间时可能根本是无效 的---没有那个地址的映射 读和写 内核提供了专门的函数用于访问用户空间 的指针,例如: int copy_from_user(void *to, const void __user *from, int n) int copy_to_user(void __user *to, const void *from, int n) 读和写 数据模型-读 demo.c 实例分析 字符设备驱动程序 编写简单字符设备驱动程序 1、编写驱动,实现读、写、定位 2、编写应用程序,访问设备 (在X86和NII2410平台上实现) 实验 * Neusoft Institute of Information 嵌入式系统工程系-- 嵌入式Linux驱动设备开发 驱动程序安装(加载) 模块方式 直接编译进内核 在内核中加入驱动程序 把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 menuconfig Device Drivers --- Character devices --- M Neusoft2410 Hello Driver #make SUBDIR=drivers/char/modules 动态加载驱动程序 模块在内核空间运行, 而应用程序在用户空间运行. 这个概念是操作系统理论的基础. 模块初始化函数的任务是为以后调用模块的函数做准备. 模块的退出函数( 例子里是 hello_exit )就在模块被卸载时调用. 连接一个模块到内核 一些重要数据结构 file_operations . file . inode . 文件操作 :file_operation 结构 struct module *owner 第一个 file_operations 成员根本不是一个操作; 它是一个指向拥有这个结构的模块的指针. 这个成员用

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档