linux 下增加新的系统功能调用
在Linux环境下为OS增加一个新的系统功能调用。功能是:把用户输入的整数乘以2后回。
这份实验报告是在第一个编程作业时,一边在Ubuntu9.10上做实验,一边整理的。
在这里只是将我在Ubuntu9.10下的整个操作过程描述一下:
1. 首先下载了Linux-2.6.33.1.tar..bz2 放在home/ht/下,
2. 然后拷贝到/usr/src/下用 sudo cp /home/ht/Linux-2.6.33.1.tar.bz2 /usr/src/ Linux-2.6.33.1.tar.bz2
3. 解压该文件夹 使用命令 tar –jxvf /usr/src/ Linux-2.6.33.1.tar.bz2 结果在/home/ht/中出现了Linux-2.6.33.1;将压缩后的/home/ht/Linux-2.6.33.1 移动到/usr/src/ Linux-2.6.33.1.tar.bz2 使用命令sudo mv linux-2.6.33 /usr/src/linux-2.6.33
编写源代码,在在/usr/src/linux-2.6.33.1/kernel/sys.c文件中添加源代码,如下所示:
asmlinkage int sys_mycall(int number)
{
printk(” Hello,this is my call!!!”);
return 2* number;
}
4. 连接新的系统调用:1>在/usr/src/linux-2.6.33.1/arch/x86/include/asm/unistd_32.h中给系统调用分配一个唯一的编号,我分配的是338.同时并修改下面的#define NR_syscalls 338 ,改为#define NR_syscalls 339。(我头两会编译时都没有意识到这边,后来是在测试自己增加的系统功能调用时出了问题,上网找了资料才发现的,然后又从新编译一边内核。)
5. 在arch/x86/kernel/syscall_table_32.S中添加:.long sys_mysyscall
6. 在当前工作目录(/usr/src/linux-2.6.33.1)下,才可以重建内核定制内核:
先用 sudo mrproper( 清除前一次编译的内容,在第一次编译时,如果使用这个命令,终端提示没有相应的make规则 )
然后用 sudo make config 或者sudo make oldconfig重建内核(这有四种选择,第二次编译时我选了前一种,每个配置我都选用默认形式,第三次编译时使用的是第二种)
下面是一个截图:(第三次编译的)
7. sudo make clean(头一次输入这个命令时终端提示这个命令时Unnecessary,在第三次编译时有一个如下所示的截图:)