在Linux中添加系統調用一例

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

作者:比薩公園·蝸牛居

一、基本思想:
在系統調用函數中添加系統乘法 sysMul(int a, int b); 計算 a與b的乘積。將該系統方法封裝為乘方 usrPow(int a, int n); 計算 a 的 n 次方。

二、準備工作:
1.環境:Fedora 6

2.我使用的Fedora6中沒有提供源代碼,又?澹?購迷諳惹暗氖笛櫓幸丫?滄骯?.6.18.1內核源代碼包;不詳述了。

三、詳細步驟

1. 在kernel/sys.c中添加系統調寫函數:
asmlinkage int sysMul(int a, int b)
{
int c;
c = a*b;
return c;
}

2.給新的系統調用分配調用號:
在include/asm-i386/unistd.h中添加如下代碼:
#define __NR_sysAdd 264

3.在系統調用表/arch/i386/kernel/entry.S 中添加代碼指向新寫的系統調用函數:.long SYMBOL_NAME(sysMul)

4.使用一系列make,編譯內核(這個和skyeye里跑uClinux過程差不多,不詳述了),將生成的內核放到boot目錄中去,

5.修改grub,添加一個新的引導項:
在menu.lst中添加如下代碼:
title testRoot
root(hd0, 0)
kernel /bzImage ro root=/dev/hda1

6.重啟后,在啟動目錄里有了testRoot選項,現在系統包含我們自己寫的系統調用sysMul()了

7.開始我們用戶常式的編寫了,在root目錄下建 uPow.c文件

1) 封裝系統調用的有API味道兒的usrPow()函數

#inculde
#include
_syscall2(int, sysMul, int, a, int, b)


int usrPow(int m, int n)
{
int i;
int r = 1;
for (i=0; i < n; i++)
{
r = sysMul(r, m);
}
return r;
}

2)寫使用用戶API usrPow()函數的main()

main()
{
int bNum, pNum;
int result;
printf("input:\n");
scanf("%d%d", &bNum, &pNum);
result = usrPow(bNum, pNum);
printf("result = ", result);
}

8.編譯
gcc -o uPow uPow.c

9.運行。




[火星人 ] 在Linux中添加系統調用一例已經有241次圍觀

http://www.coctec.com/docs/linux/show-post-186619.html