提供一个从系统调用open到内核中该文件实际的open方法的调用流程分析,基本上列出来从open系统调用
到mem_pool_open过程中调用的函数。在这个过程中很多调用以及函数实现的细节还并不是很清楚。希望能够
起到抛砖引玉的作用,大家一起交流,把这个调用流程丰富起来。
i
nt open(const char *pathname, int flags, mode_t mode); --系统调用
||
\/
long sys_open(const char __user *filename, int flags, int mode) -- fs/open.c
/*对应内核中的open接口函数*/
||
\/
long do_sys_open(int dfd, const char __user *filename, int flags, int mode) --fs/open.c
/*用户空间的filename被拷贝到内核空间,获取当前可用的文件描述符*/
||
\/
static struct file *do_filp_open(int dfd, const char *filename, int flags, int mode) --fs/open.c
||
\/
int open_namei(int dfd, const char *pathname, int flag,
int mode, struct nameidata *nd)
/*获取该文件对应的nameidata结构.该函数执行完毕,接着调用下面函数。这两个函数是顺序被do_filp_open调用*/
||
\/
struct file *nameidata_to_filp(struct nameidata *nd, int flags) --fs/open.c
/*将nameidata 结构转换为打开的struct file结构*/
||
\/
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
int flags, struct file *f,
int (*open)(struct inode *, struct file *)) --fs/open.c
||
\/
f->f_op = fops_get(inode->i_fop); --fs/open.c
/*这里将系统调用中需要对应打开文件对应到内核中的file_operations结构体获取到,然后根据其函数
指针就可以找到该结构体中对该种文件操作的所有方法。mem_pool对应的结构体是在mem_pool_init的时候向内
核注册的。*/
||
\/
open = f->f_op->open;
open(inode, f); --fs/open.c
/*以上两行代码分别完成了open系统调用时执行实际文件对应内核的open方法,即mem_pool_open */
来自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2014732&extra=page%3D2%26filter%3Ddigest%26digest%3D1%26digest%3D1
分享到:
相关推荐
OpenEuler系统内核版本4.19
河海-操作系统实践作业 基于 openEuler 系统的内存管理和内核时间管理
前言11 实验一 鲲鹏云 ECS 的构建及内核编译 31.1 实验介绍 31.1.1 任务描述 31.2 实验目的 31.3 构建云实验环境 31.3.3 通过
适用于树莓派的内核源码。本仓库基于 openEuler 内核 ,合并了上游 树莓派内核 补丁。
比如SYSCALL_DEFINE3(open...),SYSCALL_DEFINE3(read....),SYSCALL_DEFINE3(write..)等文件相关的系统调用,在具体使用的时候,涉及的某些指针应该是从用户态传递过来的。而且在相应的系统调用处理流程中,会有...
Redmi K30 Pro 的预装系统为 MIUI 11(基于 Android Q),随着内核源码的发布,开发者和愿意折腾的用户能够充分利用硬件的潜力,相信市场上也会很快出现该机型的第三方固件。 小米在开源内核方面的动作一直以来都...
M26 OpenCPU开发需要的最新内核配置文件,很好的开发工具。
open的详细调用过程,根据linux内核2.6.35
openEuler内核是openEuler OS的核心,是系统性能和稳定性的基础,是处理器、设备和服务之间的桥梁。
Xiaomi_Kernel_OpenSource,小米内核开源:cancro kk oss(包含mi 3w、mi 3c、mi 4系列、mi note)、armani jb oss(h1s)、dior kk oss(hm note-lte)、法拉利l-oss(小米4i)、thmoas kk oss(hm2 lte)、libra-l-...
这样避免了安装和管理OVS用户空间守护程序的需要,如果不需要由OVS用户空间提供的功能,则可能更可取。 go-odp还包括一个命令行工具,可用于在不编写代码的情况下进行ODP实验。ODP简介ODP允许创建多个数据路径。 ...
当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,open...
小米mix3内核的编译过程心得
当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,open...
当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,open...
20200428Redmi Note 8 Pro内核源码Xiaomi_Kernel_OpenSource-begonia-q-oss.zip 20200428Redmi Note 8 Pro内核源码Xiaomi_Kernel_OpenSource-begonia-q-oss.zip 20200428Redmi Note 8 Pro内核源码Xiaomi_Kernel_...
6.1.2 内核空间和用户空间 6.1.3 虚拟内存实现机制间的关系 6.2 Linux内存管理的初始化 6.2.1 启用分页机制 6.2.2 物理内存的探测 6.2.3 物理内存的描述 6.2.4 页面管理机制的初步建立 6.2.5页表的建立 ...
腾讯X5内核离线使用Demo
和谐是什么开放和谐 ...用户文档 系统功能逐级扩展 框架层 这一层提供了开发鸿蒙应用程序所需的东西 基础软件服务、增强软件服务 代码 { " firstName " : " John " , " lastName " : " Smith " , " age " : 25 }