我们之前在系统调用已经知道,在arm中open系统调用会产生一个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再调用对应ops的open函数。