从用户态的open到内核驱动实现流程

我们之前在系统调用已经知道,在armopen系统调用会产生一个SWI终端,最后跳转到call.c sys_open.

我们看到里面所完成的工作为:
1
、查看打开的是否是大文件,如果是的话,置大文件标志位:O_LARGEFILE
2
、做do_sys_open()函数调用。

3
、检查2的调用返回值ret是否有效。

查看do_sys_open()函数所完成的工作为:
(1)
调用getname() getname函数主要功能是在使用文件名之前将其拷贝到内核数据区,正常结束时返回内核分配的空间首地址,出错时返回错误代码。
(2)
取得系统中可用的文件描述符fd
(3)
调用do_filp_open()函数,此函数使用了一个数据结构nameidata来描述与文件相关的文件操作。

do_filp_open()函数再调用nameidata_to_filp():

nameidata_to_filp()在调用__dentry_open():

__dentry_open()在调用chrdev_open

chrdev_open再调用对应opsopen函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值