如何生成设备节点 广州创龙电子科技有限公司

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

Linux 环境及 Shell 程序 操作系统实验 1. 二、 Shell 编程与进程通信 常用 shell 命令 文件及文件属性操作 ls 、 cp 、 mv 、 rm ln 、 ln –s 、 chmod 、 groupadd 、 useradd 输入输出操作 echo 、 cat >> 、
第 13 章 基于 proc 的 Linux 进程控制块 信息读取 山东科技大学操作系统教研组. 理解 proc 伪文件系统的基本概念和功能,掌握常见操作命令。 了解 Linux 进程控制块 task_strcut ,并理解其重要成员变量的含义。 理解基于 seq_file 机制的 proc 伪文件操作机制.
FD班座谈会 -结合学校目标 找准自己位置-
四資二甲 第三週作業 物件導向程式設計.
第七章 操作系统接口 7.1 联机用户接口 7.2 Shell命令语言 7.3 系统调用 7.4 UNIX系统调用 7.5 图形用户接口.
第一章 C语言概述 计算机公共教学部.
法國大革命                                                                            
心理的力量 --兼谈教师心理压力的调适
Linux Further.
FIFO 与 UPP 本节我们结合UPP接口给大家介绍一下FIFO在实际工程中的使用。 广州创龙电子科技有限公司 01 51ele.net
嵌入式操作系统 陈香兰 Fall 2009.
TCP、UDP 通信实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
複習 struct score_Type{ int chinese,english; }; struct my_Type{
中国科学技术大学计算机系 陈香兰(0512- ) spring 2011
OpenMP简介和开发教程 广州创龙电子科技有限公司
计算概论 第二十一讲 文件操作 北京大学信息学院.
本节我们结合AD5724驱动时序给大家介绍一下状态机在实际工程中的使用。
Linux设备驱动 (基于Linux2.6.xx内核).
DM81X 视频采集处理 ——MCFW框架介绍 广州创龙电子科技有限公司
第七章. 文件系统 (lab5).
第7章 Linux环境编程.
本节我们结合AD5724驱动时序给大家介绍一下状态机在实际工程中的使用。
FIFO 与 UPP 本节我们结合UPP接口给大家介绍一下FIFO在实际工程中的使用。 广州创龙电子科技有限公司 01
存储设备介绍 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
实践演练 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
简单PCB设计 广州创龙电子科技有限公司 Simple PCB Design
u-boot环境变量和常用命令 广州创龙电子科技有限公司
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
SPI驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
I2C驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
程式設計 博碩文化出版發行.
linux驱动模块编程 HelloWorld 广州创龙电子科技有限公司
按键驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
作業系統實習課(四) -檔案管理- 實驗室:720A 助教:鄧執中.
DM8148与DM8127 ISS框架讲解 广州创龙电子科技有限公司
字符串和字符数组 字符串的输入和输出 字符串的基本操作
AM5728 视频输入端口VIP软件框架 广州创龙电子科技有限公司
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
本节我们结合AD5724驱动时序给大家介绍一下状态机在实际工程中的使用。
Linux 文件操作——系统调用和标准 IO 库
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
FPGA 在线调试技术 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd 本节将讲解FPGA的在线调试技术。主要以VIVADO和ISE为例,讲解一下虚拟输入输出VIO (Virtual Input/Output)和集成逻辑分析仪ILA.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
SOCKET( ).
C標準輸出入函數庫 與 作業系統.
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
LED驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
进程的概念 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
实验二:添加Linux系统调用及熟悉常见系统调用
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
獨孤派作業系統 main memory 中正大學 作業系統實驗室 指導教授:羅習五.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Presentation transcript:

如何生成设备节点 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd

01 设备节点的生成 02 应用程序的编写 03 使用cat和echo操作设备节点

01 设备节点的生成 第 1 部分

设备节点的生成 编程步骤: 分别定义一个class和device的结构体。 填充file_operations结构体。 调用register_chrdev()注册字符设备。 调用class_create()在/sys/class/目录下注册一个类。 调用device_create()在/dev/目录下创建一个设备节点。 static struct class *my_dev_class; static struct device *my_dev_class_dev; 04 广州创龙电子科技有限公司

设备节点的生成 file_operations : static struct file_operations my_dev_fops = { .owner = THIS_MODULE, .open = my_dev_open, .write = my_dev_write, .read = my_dev_read, }; 05 广州创龙电子科技有限公司

设备节点的生成 int (*open) (struct inode *inode, struct file *file) 在操作设备前先要调用open函数打开文件,在该函数里可以的初始化设备操作。打开成功时open返回0。如果不实现该函数,驱动会默认设备的打开永远成功。 int (*release) (struct inode *, struct file *); 当设备文件被关闭时,内核会调用该函数。可以不实现该函数,函数默认为NULL,关闭设备永远成功。 06 广州创龙电子科技有限公司

设备节点的生成 ssize_t (*read) (struct file *file, char __user *buf, size_t count, loff_t *offset) *file 文件的描述符 *buf 用户空间中的缓存的指针 count 请求传输的数据的大小 *offset 用户正在存取的文件位置 07 广州创龙电子科技有限公司

设备节点的生成 ssize_t (*write) (struct file *file, const char __user *buf, size_t count, loff_t *offset) *file 文件的描述符 *buf 用户空间中的缓存的指针 count 请求传输的数据的大小 *offset 用户正在存取的文件位置 08 广州创龙电子科技有限公司

02 应用程序的编写 第 2 部分

应用程序的编写 ssize_t write (int fd, const void *buf, size_t count) 把参数buf所指的内存写入count个字节到参数fd所指的文件内。 ssize_t read(int fd, void *buf, size_t count); 把参数fd所指的文件传送count个字节到buf指针所指的内存中。 arm-linux-gnueabihf-gcc rw_test.c -o rw_test 10 广州创龙电子科技有限公司

03 使用cat和echo操作设备节点 第 3 部分

使用cat和echo操作设备节点 12 广州创龙电子科技有限公司 static ssize_t my_dev_read(struct file *file, char __user *buf, size_t count, loff_t *offset) { int ret; char temp[16]; char status; if (*offset > 0) return 0; count = sprintf(temp, "%u\n", val); ret = copy_to_user(buf, temp, count + 1); if(ret < 0) printk("ret = %d \n",ret); status = -EFAULT; } else { *offset += count; //如果缺少这句,执行cat时会一直返回读取到的值,停不下来 status = count; return status; static ssize_t my_dev_write(struct file *file, const char __user *buf, size_t count, loff_t *offset) char status = 0; memset(temp, 0, 16); ret = copy_from_user(temp, buf, count); /* get value from user */ goto err; val = simple_strtoul(temp, NULL, 0); if (!status) status = count; //如果不加上这个,使用echo写入值是会一直不停地写,按ctrl+c也挺不下来。 err: 12 广州创龙电子科技有限公司

广州创龙电子科技有限公司 谢谢 官网: www.tronlong.com 论坛: www.51ele.net 微信公众号:广州创龙