linux0.11字符设备的读写过程分析

本文详细分析了Linux0.11系统中打开和写入字符设备如tty0的过程,从main.c的open调用开始,经过sys_open、open_namei、sys_write、rw_char等多个步骤,最终在console.c的con_write函数中实现对显示器的写操作。过程中涉及文件句柄、文件表、i_node、设备号和字符设备读写函数等关键概念。
摘要由CSDN通过智能技术生成

首先要知道linux系统/dev目录下的各种设备文件(文件属性c打头)并不占用空间,你可以发现他们的大小为0字节,他们的区别在于文件的i节点的成员i_zone[0]的值不同,该值标识不同的设备号。比如tty0文件的设备号为0x0400,tty1设备号为0x0401,hd0设备号为0x0300,hd1设备号为0x0301等。而这个设备号里面又包含两部分内容:高字节标识不同类设备,比如tty0和hd0分别为0x04,0x03,低字节标识同一类设备不同序号。

接下来对linux0.11打开的第一个文件tty0的过程进行分析:

1. main.c文件:执行open("/dev/tty0",O_RDWR,0),调用该函数将触发系统调用sys_open()。

2. open.c文件:进入该系统调用函数sys_open,首先分配一个文件句柄fd(第一个文件为0,其实是文件表到索引),然后为这个打开的文件在文件表(file_table.c定义的一个数组)中寻找一个有效的空闲项,将这个空闲项的文件指针添加到当前进程结构的flip成员中(flip成员为一个指针数组),并将文件引用次数+1。接着调用open_namei函数获取tty0设备文件的i_node指针。最后将该指针赋给文件表的f_inode成员。至此,tty0文件打开完毕,并将其inode信息保存于cur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值