添加Linux系统调用

【实验环境】
Fedora,内核2.6.21.6


【实验步骤】
1. cd /usr/src/linux
2. vi kernel/sys.c


在最后添加如下代码:
asmlinkage long sys_processinfo(void) { int num=0; unsigned long state; struct task_struct *p; for_each_process(p) { printk("pid=%-5d,name=%-20s",p->tgid,p->comm); printk("prio=%-5d,",p->prio); state=p->state; if(state==-1) printk("state: Z/n"); else if (state==1) printk("state: R/n"); else printk("state: S/n"); num++; } return num; }


上述代码实现遍历整个任务列表,并将进程id,name 及state 打印在屏幕上,返回进程总
7
数。


3. vi arch/i386/kernel/syscall_table.S
在最后加入 .long sys_processinfo


4. vi include/asm/unistd.h
在中间添加 #define __NR_process 322 分配系统调用号
将下面改为 #define NR_syscalls 323


5. vi /usr/include/asm/unistd.h
在最后添加 #define __NR_process 322


6. 开始重新编译内核
cd /usr/src/linux
make mrproper
make menuconfig
make
make modules_install
make install
reboot


7. 进入新内核,编写测试程序test.c
#include <stdio.h> #include <unistd.h> #include <errno.h> #include <asm/unistd.h> #include <syscall.h> int main() { syscall(322); printf("the total number is: %d",syscall(322)); return 0; }
8. gcc –o test test.c
9. ./test 显示结果

你可能感兴趣的:(linux,struct,gcc,测试,each,任务)