免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6544 | 回复: 8
打印 上一主题 下一主题

Linux 2.6.30中的sys_open呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-25 19:14 |只看该作者 |倒序浏览
今天想看看新版本的代码,

发现找不到sys_open函数的定义了,什么sys_mount也没有了,
grep do_sys_open 得出来下面这个,好像是哪里做了改动了,原来的调用借口都改了~

1062 SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
1063 {
1064     long ret;
1065
1066     if (force_o_largefile())
1067         flags |= O_LARGEFILE;
1068
1069     ret = do_sys_open(AT_FDCWD, filename, flags, mode);
1070     /* avoid REGPARM breakage on x86: */
1071     asmlinkage_protect(3, ret, filename, flags, mode);
1072     return ret;
1073 }

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
2 [报告]
发表于 2009-11-25 22:29 |只看该作者
从lxr.linux.no看吧
那里做了交叉索引,一搜就找到了

PS:内核用宏和##来定义系统调用接口,看代码的时候太不方便了

论坛徽章:
0
3 [报告]
发表于 2009-11-26 00:11 |只看该作者

回复 #2 openspace 的帖子

又是openspace,多谢哈

我用了本机上的vim+tags+cscope,还借了同事的windows愣是没有搜出来,我不知道他改了什么地方,从那个版本开始该的,那个网站在倒是也用,不过我觉得搜出来的结果和本机上的差别估计不大

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
4 [报告]
发表于 2009-11-26 08:45 |只看该作者

回复 #1 hongmy525 的帖子

我的vim+ctags+cscope就很容易可以搜到:
cs find e sys_open
就有了!

论坛徽章:
0
5 [报告]
发表于 2009-11-26 08:54 |只看该作者

回复 #4 liujunwei1234 的帖子

请问你的内核版本是多少?

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:09
6 [报告]
发表于 2009-11-26 09:00 |只看该作者

回复 #5 hongmy525 的帖子

2.6.31

论坛徽章:
0
7 [报告]
发表于 2009-11-26 09:28 |只看该作者

回复 #6 liujunwei1234 的帖子

我去了LXR看了一下,没有阿
Code search: sys_open
Function prototype or declaration include/linux/syscalls.h, line 466 [usage...]

[ 本帖最后由 hongmy525 于 2009-11-26 09:29 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-11-26 09:32 |只看该作者
往上看了一下,正好发现
176#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
177
178#define SYSCALL_DEFINE(name) static inline long SYSC_##name
179
180#define __SYSCALL_DEFINEx(x, name, ...)                                 \
181        asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__));           \
182        static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__));       \
183        asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__))            \
184        {                                                               \
185                __SC_TEST##x(__VA_ARGS__);                              \
186                return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__));    \
187        }                                                               \
188        SYSCALL_ALIAS(sys##name, SyS##name);                            \
189        static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
190
191#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
192
193#define SYSCALL_DEFINE(name) asmlinkage long sys_##name
194#define __SYSCALL_DEFINEx(x, name, ...)                                 \
195        asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
196
197#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
198


确实改掉了

论坛徽章:
0
9 [报告]
发表于 2009-11-26 09:44 |只看该作者
代码中找到了
原来的sys_open现在用宏给封装起来了:
  1. 1062 SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode)
  2. 1063 {
  3. 1064     long ret;
  4. 1065
  5. 1066     if (force_o_largefile())
  6. 1067         flags |= O_LARGEFILE;
  7. 1068
  8. 1069     ret = do_sys_open(AT_FDCWD, filename, flags, mode);
  9. 1070     /* avoid REGPARM breakage on x86: */
  10. 1071     asmlinkage_protect(3, ret, filename, flags, mode);
  11. 1072     return ret;
  12. 1073 }
  13. 1074 #ifdef CONFIG_UNIFIED_KERNEL
  14. 1075 EXPORT_SYMBOL(sys_open);
  15. 1076 #endif
复制代码


宏:
  1. 141 #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
复制代码


把宏展开后:
  1. 160 #ifdef CONFIG_FTRACE_SYSCALLS
  2. 161 #define SYSCALL_DEFINEx(x, sname, ...)              \
  3. 162     static const char *types_##sname[] = {          \
  4. 163         __SC_STR_TDECL##x(__VA_ARGS__)          \
  5. 164     };                          \
  6. 165     static const char *args_##sname[] = {           \
  7. 166         __SC_STR_ADECL##x(__VA_ARGS__)          \
  8. 167     };                          \
  9. 168     SYSCALL_METADATA(sname, x);             \
  10. 169     __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
  11. 170 #else
  12. 171 #define SYSCALL_DEFINEx(x, sname, ...)              \
  13. 172     __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
  14. 173 #endif
  15. 174
  16. 175 #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
  17. 176
  18. 177 #define SYSCALL_DEFINE(name) static inline long SYSC_##name
  19. 178
  20. 179 #define __SYSCALL_DEFINEx(x, name, ...)                 \
  21. 180     asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__));       \
  22. 181     static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__));   \
  23. 182     asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__))        \
  24. 183     {                               \
  25. 184         __SC_TEST##x(__VA_ARGS__);              \
  26. 185         return (long) SYSC##name(__SC_CAST##x(__VA_ARGS__));    \
  27. 186     }                               \
  28. 187     SYSCALL_ALIAS(sys##name, SyS##name);                \
  29. 188     static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__))
  30. 189
  31. 190 #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
  32. 191
  33. 192 #define SYSCALL_DEFINE(name) asmlinkage long sys_##name
  34. 193 #define __SYSCALL_DEFINEx(x, name, ...)                 \
  35. 194     asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
  36. 195
  37. 196 #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
复制代码


就得到原来的写法了。

TO:liujunwei1234
我用的是ctags,没开cscope,麻烦:),不知道是不是这个有差别,我在vim中
:tag sys_open
提示我找不到~~

谢谢大家:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP