欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Linux添加內核系統調用報告

系統 1927 0

原創作品,轉載請標明出處 http://blog.csdn.net/yming0221/archive/2011/06/21/6559767.aspx

Linux內核添加系統調用

一、環境說明

?操作系統:Ubuntu 11.04

?舊內核版本:2.6.38.9

?新內核版本:2.6.39

?編譯器版本:GCC 4.5.2

二、實驗目的

?掌握內核的編譯方法

?深入理解內核編譯的原理

?掌握給內核添加系統調用的方法

?了解系統調用的運行機制

?學會在用戶態調用系統調用

三、實驗原理

系統調用:Linux內核中用戶實現系統程序的一組子程序

一個程序的虛擬地址空間分為用戶態和內核態,而用戶進程要想進入內核就要通過系統調用或以內核模塊的形式添加到內核。

下圖展示了系統調用的實現過程(注:該圖來源于網絡資料):

1、C程序通過包含頭文件#include<syscall.h>通過源文件追蹤,找到syscall()函數其實位/usr/include/unistd.h中
如下:
extern long int syscall (long int __sysno, ...) __THROW;
該函數使用INT 0x80軟中斷內核將系統調用號傳遞給保存到eax中,然后將按系統調用號來查找系統調用表中的相應index的函數入口地址。來執行服務例程。
#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
其實是通過宏定義定義系統調用函數
位于./kernel/sys.c中
SYSCALL_DEFINE1(my_traverse_process,int,num)
{
..................................
}
SYSCALL_DEFINE1后的‘1’它表示該系統調用有一個參數,后面參數的含義依次是函數名、參數類型、參數名
該函數執行完畢后,執行syscall_exit并將值返回。
INT 0x80之所以能夠執行,因為系統在啟動時將0x80設置了系統調用中斷門。
三、步驟索引
?編譯升級內核
?添加系統調用后重新編譯內核
?編寫用戶程序調用自己添加的系統調用
四、實驗步驟
1、編譯內核
?從下載Linux內核版本2.6.39
?解壓內核到任意目錄(這里不用必須解壓到/usr/src/下,Linus也說不必那樣做,況且自己也試驗成功)
(*)注:這樣有個缺點,那就是在裝玩模塊后,系統會在/lib/modules/2.6.39/下創建該源碼的軟鏈接用于以后用戶編譯內核使用,當用戶無意將其刪除時,將會造成無法編譯自己的模塊。
?進入內核目錄
?首先配置make menuconfig配置裁剪內核(如果沒有什么必要可以復制/boot/config-***,這是現在的內核配置)
cp /boot/config-*** ./.config
?開始編譯,可以執行make all,當然也可以分步完成
make dep
make clean
make bzImahe
make modules
?安裝內核驅動
make modules_install
?安裝內核
make install
?生成引導鏡像文件,并將其復制到/boot目錄下
mkinitramfs -o initrd.img-2.6.39 2.6.39
cp initrd.img-2.6.39
?最后更新grub
update-grub
?啟動新的內核,成功。
2、修改內核源碼,添加系統調用
?首先打開文件./arch/x86/include/asm/unistd_32.h在最后添加系統調用號,如下(最后一行):
#define __NR_name_to_handle_at 341
#define __NR_open_by_handle_at 342
#define __NR_clock_adjtime 343
#define __NR_syncfs 344
#define __NR_my_traverse_process 345 /*This is added by yan,this is a test for system call*/
?打開./arch/x86/kernel/syscall_table_32.S(最后一行)
.long sys_prlimit64 /* 340 */
.long sys_name_to_handle_at
.long sys_open_by_handle_at
.long sys_clock_adjtime
.long sys_syncfs
.long sys_my_traverse_process
?打開./include/linux/syscalls.h添加系統調用函數的聲明
asmlinkage long sys_my_traverse_process(int num); /*This is added by yan*/
?打開./kernel/sys.c文件添加其實現函數
SYSCALL_DEFINE1(my_traverse_process,int,num)
{
struct task_struct *pos;
struct list_head *current_head;
int count=0;
printk("Traversal module is working../n");
current_head=&(current->tasks);
list_for_each_entry(pos,current_head,tasks)
{
count++;
printk("[process %d]: %s/'s pid is %d/n",count,pos->comm,pos->pid);
}
printk(KERN_ALERT"The number of process is:%d/n",count);
printk(KERN_ALERT"This is a sample test output from kernel!/nAnd this is added by yan/n");
return (long)num;
}
注:該函數的功能是遍歷系統中的進程,并輸出進程名和進程號,并返回輸入的參數值。
?重新編譯內核,這次只需編譯內核,驅動部分沒有改變不用再編譯一遍,以節省時間。
make bzImage
?然后執行 cp ./arch/x86/boot/bzImage /boot/vmlinuz替換原來的內核重新啟動。
?在用戶態編寫程序調用如下:
#include <stdio.h>
#include <unistd.h>
#include <syscall.h>
#define __NR_my_traverse_process 345
int main(void)
{
int input;
printf("Input a num");
scanf("%d",&input);
long a=syscall(__NR_my_traverse_process,input);
printf("The return from kernel is %ld/n",a);
return 0;
}
然后gcc -o traverse_process traverse_process.c
執行./traverse_proces
?執行dmesg命令查看系統調用的執行情況
五、實驗結果
系統調用添加成功。

Linux添加內核系統調用報告


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一级毛片aaaaaa视频免费看 | 精品国产一区二区三区久久 | 综合精品 | 午夜小视频在线 | 欧美成在线视频 | 久久日韩精品中文字幕网 | 国产欧美日韩综合精品一区二区 | 奇米影视888狠狠狠777九色 | 国产欧美一区二区三区另类精品 | 久久精品国产免费看久久精品 | 欧美午夜影院 | 亚洲欧美另类在线观看 | 欧美专区在线播放 | 久久久www成人免费精品 | 91在线网| 99只有精品 | lutube成人福利在线观看污 | 日韩少妇成熟A片无码专区 黄在线免费观看 | 一级一级 a爱片免费视频 | 人人干人人舔 | 久久久精品视频免费看 | 新婚少妇小倩给老许泄火 | 一区二区三区日韩视频在线观看 | 国精久久| 国产69精品久久久久999小说 | 999精品久久久 | 片在线观看免费观看视频 | 2019中文字幕在线播放 | 天堂va在线高清一区 | 九九热九九| 五月婷婷爱 | 青青在线香蕉精品视频免费看 | 欧美精品在线免费观看 | 亚洲日本三级 | 亚洲精品午夜一区二区 | 午夜小视频在线播放 | 夜夜操狠狠操 | 国产精品免费一级在线观看 | 精品av | 日韩喷水 | 99久久精品免费观看区一 |