设为首页 加入收藏

TOP

对entry-common.S和call.S的部分理解1 - 摩斯电码(三)
2015-02-13 18:24:18 来源: 作者: 【 】 浏览:131
Tags:entry-common.S call.S 部分 理解 电码
ldrlo? ? pc, [tbl, scno, lsl #2]
? 20:? ? b? ? sys_ni_syscall
? 21: ENDPROC(sys_syscall)


??二次包含是建立在第一次包含的基础上,第一次包含的结果是:
?#undef CALL? ?
?#define CALL(x) .long x
?NR_syscalls 是系统调用的个数,并且进行了4的倍数对齐(最后几个系统调用可能只是为了凑数)
?syscalls_padding的数值保证了CALL(x)的个数可以4倍对齐,即.long x 的个数是4的倍数。目的是在下面的sys_syscall函数中的:
ldrlo? ? pc, [tbl, scno, lsl #2]


即将“系统调用表基地址tbl+系统调用号scno*4”地址单元(上面的某个.long x)的数据(也就是某个系统调用处理函数的入口地址)放到PC寄存器中(因为有了对齐,所以不会产生访问越界的情况,又因为


cmp? ? scno, #__NR_syscall - __NR_SYSCALL_BASE
? ? ? cmpne? ? scno, #NR_syscalls? ? @ check range


以上两条语句保证了系统调用号scno的大小不会超出范围)。


可以看到,在calls.S结尾的系统调用:sys_ni_syscall。它除了返回-ENOSYS之外啥也没干:



? 1: /*
? ? 2:? * Non-implemented system calls get redirected here.
? ? 3:? */
? ? 4: asmlinkage long sys_ni_syscall(void)
? ? 5: {
? ? 6:? ? return -ENOSYS;
? ? 7: }


首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇关于Linux系统如何实现fork的研究 下一篇Linux-2.6.21 pi futex关键数据结..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: