Linux-0.11 文件系统char_dev.c详解

news/2024/11/24 13:55:46/

Linux-0.11 文件系统char_dev.c详解

模块简介

char_dev.c文件主要负责字符设备的访问方法。

函数详解

rw_ttyx

static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos)

该函数是串口终端的读写函数。

return ((rw==READ)?tty_read(minor,buf,count):tty_write(minor,buf,count));

rw_tty

static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos)

该函数是控制台终端的读写函数。

	if (current->tty<0)return -EPERM;return rw_ttyx(rw,current->tty,buf,count,pos);

rw_ram

static int rw_ram(int rw,char * buf, int count, off_t *pos)

内存数据读写函数。 空壳子,该版本没有实现。

rw_mem

static int rw_mem(int rw,char * buf, int count, off_t * pos)

物理内存数据读写函数。 空壳子,该版本没有实现。

rw_kmem

static int rw_kmem(int rw,char * buf, int count, off_t * pos)

内核虚拟内存数据读写函数。 空壳子,该版本没有实现。

rw_port

static int rw_port(int rw,char * buf, int count, off_t * pos)

该函数时端口读写的函数。

参入pos代表的是端口号。

程序内容比较简单,就是循环进行端口的读写。

	int i=*pos;while (count-->0 && i<65536) {if (rw==READ)put_fs_byte(inb(i),buf++);elseoutb(get_fs_byte(buf++),i);i++;}i -= *pos;*pos += i;return i;

rw_memory

static int rw_memory(int rw, unsigned minor, char * buf, int count, off_t * pos)

该函数是内存设备文件的读写函数。

下面的大多数函数都只是一个空壳子,暂未实现。

	switch(minor) {case 0:return rw_ram(rw,buf,count,pos);case 1:return rw_mem(rw,buf,count,pos);case 2:return rw_kmem(rw,buf,count,pos);case 3:return (rw==READ)?0:count;	/* rw_null */case 4:return rw_port(rw,buf,count,pos);default:return -EIO;}

rw_char

int rw_char(int rw,int dev, char * buf, int count, off_t * pos)

该函数时字符设备的读写操作函数。

	crw_ptr call_addr;if (MAJOR(dev)>=NRDEVS)return -ENODEV;if (!(call_addr=crw_table[MAJOR(dev)]))return -ENODEV;return call_addr(rw,MINOR(dev),buf,count,pos);

Q & A


http://www.ppmy.cn/news/97527.html

相关文章

使用PyTorch构建神经网络,并计算参数Params

文章目录 使用PyTorch构建神经网络&#xff0c;并计算参数Params举例计算具有全连接层的神经网络的参数数量计算卷积神经网络的参数数量Params计算过程 总结 使用PyTorch构建神经网络&#xff0c;并计算参数Params 在深度学习中&#xff0c;模型的参数数量是一个非常重要的指标…

学习WiFi,怎么入手?

欢迎大家一起学习探讨通信之WLAN。在工作和平时与朋友交流中&#xff0c;时不时有人问到&#xff0c;“想学WiFi&#xff0c;不知道如何入手&#xff1f;”&#xff0c;“搞了一两年WiFi&#xff0c;但感觉还是一头雾水&#xff0c;啥都没掌握&#xff0c;怎么办&#xff1f;”…

vue字符串拼接的多种方法

在 vue项目中&#xff0c;我们可以使用多个不同的方法来拼接字符串。今天我们就来介绍一下 vue中各种方法的用法。 第一种方法&#xff1a;使用 lodash进行字符串拼接&#xff0c;这是最简单的一个方法&#xff0c;它最大的缺点就是它比较慢&#xff0c;需要时间去执行拼接&…

windows安装python开发环境

最近因工作需要&#xff0c;要学习一下python&#xff0c;所以先安装一下python的开发环境&#xff0c;比较简单 下载和安装Python 首先&#xff0c;在浏览器中打开Python的官方网站&#xff08;https://www.python.org/downloads/) 然后&#xff0c;从该网站下载与你的操…

设计模式之模板方法

设计思想: MyBeanFactory 类实现创建bean的功能&#xff0c;后面需求升级&#xff0c; System.out.println("依赖注入"bean); 也就是依赖注入这一部分,因之前没有支持 Autowried依赖注入&#xff0c;现在需要添加上&#xff0c;如果直接添加在 getBean() 方法中&…

哈希表(哈希函数和处理哈希冲突)_20230528

哈希表&#xff08;哈希函数和处理哈希冲突) 前言 关于哈希表的主题的小记原计划5月23日完成&#xff0c;由于本人新冠阳性&#xff0c;身体发烧乏力&#xff0c;周末感觉身体状况稍加恢复&#xff0c;赶紧打开电脑把本文完成&#xff0c;特别秉承“写是为了更好地思考&#…

尝试在UNet的不同位置添加SE模块

目录 &#xff08;1&#xff09;se-unet01&#xff08;在卷积后&#xff0c;下采样前&#xff0c;添加SE模块&#xff09; &#xff08;2&#xff09;se-unet02&#xff08;在卷积后&#xff0c;上采样前&#xff0c;添加SE模块&#xff09; &#xff08;3&#xff09;se-un…

基于标准库函数的STM32的freertos的移植(一)——github源码压缩包下载

由于freertos官网将freertos内核与freertos工程分别进行版本管理&#xff0c;因此下载freertos需要将参考工程和内核分别下载。由于采用ST公司提供的标准库函数进行因此还需要下载标准库函数&#xff0c;然后进行移植配置。具体流程如下详细描述&#xff1a; 1.首先在github的…