添加一个系统调用,遍历内核进程
来源:互联网 发布:域名备案终审需要多久 编辑:程序博客网 时间:2024/05/21 18:33
环境:Fedora 12
内核:linux-2.6.32.2
STEP 0: 编译一个linux-2.6.32.2内核,且能够正常启动。上一篇博客已经讲了。
STEP 1: 在linux-2.6.32.2/arch/x86/kernel 目录中,找到syscall_table_32.S,
在这个文件的最后一行,添加:.long sys_mycall
.long sys_mycall
STEP 2: 在linux-2.6.32.2/arch/x86/include/asm目录下,找到unistd_32.h,
在这个文件的 #define NR_syscalls 337前面加:#define __NR_mycall 337,同时把NR_syscalls改成338.
#define __NR_mycall 337
#ifdef __KERNEL__
#define __NR_syscalls 338
NR_syscalls,相当于系统调用表边界,所有系统号都得小于它。
STEP 3: 在linux-2.6.32.2/include/linux 目录中,找到syscalls.h, 在这个文件中添加:asmlinkage long sys_mycall(void); 我认为这为系统调用函数声明。
asmlinkage long sys_mycall(void);
STEP 4: 实现系统调用.在linux-2.6.32.2/kernel目录下,找到sys.c,在里面添加入系统调用的实现程序。在linux-2.6.32里面,跟以前的版本不一样,这里用到了宏SYSCALL_DEFINE0对系统调用进行了封装。难怪网上的都在说找不到系统调用的定义。
next_task是内核定义的一个宏,用于寻找进程链表的下一个进程指针。程序如下:
SYSCALL_DEFINE0(mycall)
{
struct task_struct *p;
printk("********************************************/n");
printk("------------the output of mycall------------/n");
printk("********************************************/n/n");
printk("%-20s %-6s %-6s %-20s/n","Name","pid","state","ParentName");
for(p = &init_task; (p = next_task(p)) != &init_task;)
printk("%-20s %-6d %-6d %-20s/n",p->comm , p->pid, p->state, p-<
/span>>parent->comm);
return 1;
}
STEP 5: 编译内核。make; make install;重启;
STEP 6: 测试系统调用。编写程序test.c。前面我们定义了mycall的系统调用号是337.所以,在程序中,调用mycall的语句就是:syscall(337).程序如下:
/span>include<stdio.h>
int main()
{
if(syscall(337))
printf("ok!/n");
else
printf("failed!/n");
return 0;
}
STEP 7: 编译test.c,gcc test.c –o test, 执行 ./test.
- 添加一个系统调用,遍历内核进程
- 添加一个系统调用到Linux内核
- 通过添加系统调用的方式遍历当前进程
- 内核添加系统调用
- 向OpenSolaris内核中添加一个系统调用
- linux内核添加系统调用
- Linux内核添加系统调用
- linux内核添加系统调用
- linux内核--添加系统调用
- 用内核模块的方式为系统添加一个系统调用
- 自己添加一个系统调用
- linux 添加一个系统调用
- linux修改内核、添加系统调用过程
- Linux 内核编译 添加系统调用
- Linux添加内核系统调用报告
- 如何添加Linux内核系统调用
- Linux 内核编译 添加系统调用
- 树莓派上为内核添加系统调用
- JBPM与SSH架构融合
- 注解及java提供的几个基本注解
- 关于C语言中函数调用和参数传递机制的探讨
- vs2005 数字格式化为字符串输出
- jsp的pageContext技术整理(网文摘录)
- 添加一个系统调用,遍历内核进程
- java jdk的配置
- 解决Cygwin中的“died waiting for dll loading”错误
- 可行的idea
- linux make命令主要参数详解
- apache配置
- 自己动手做计算机-计算机科学的本质
- ConnectionState 成员名称 说明
- 用OpenGL实现三维点到屏幕空间的投影