亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > ubuntu如何添加系統(tǒng)調(diào)用

ubuntu如何添加系統(tǒng)調(diào)用

來源:千鋒教育
發(fā)布人:wjy
時間: 2022-12-26 16:39:35 1672043975

  【目的】

  理解系統(tǒng)調(diào)用的概念,熟悉系統(tǒng)調(diào)用的用法。

  【環(huán)境】

  PC:ubuntu 12.04

  內(nèi)核:Linux:3.2.0

  【要求】

  編程創(chuàng)建系統(tǒng)調(diào)用sunpluscall(),實現(xiàn)功能是顯示字符串到屏幕上。

  編譯3.2.0內(nèi)核,用新內(nèi)核引導系統(tǒng)。

  編程調(diào)用自己創(chuàng)建的系統(tǒng)調(diào)用。

  【原理】

  操作系統(tǒng)是用戶與計算機之間的接口,用戶通過操作系統(tǒng)的幫助,可以快速、有效和安全可靠地使用計算機系統(tǒng)中的各種資源來解決自己的問題。為了使用戶方便的使用操作系統(tǒng),OS向用戶提供了“用戶與操作系統(tǒng)的接口”。這種接口支持用戶與操作系統(tǒng)之間進行交互,這些接口可以被分為命令和程序接口兩種。前者直接提供給用戶在鍵盤終端上使用;后者則是提供給用戶(主要是程序員)編程時使用。而要學習系統(tǒng)調(diào)用,首先要從程序接口入手。

  1、 程序接口

  程序接口是操作系統(tǒng)專門為用戶程序設置的,也是用戶程序取得OS服務的唯一途徑。程序接口通常由系統(tǒng)調(diào)用組成。在每個操作系統(tǒng)中,通常都有幾十上百條系統(tǒng)調(diào)用,它們的作用各有不同,有的用于進程控制、有的用于存儲管理、有的用于文件管理等等。在MS WINDOWS下面進行過WIN32編程的人員應該對windows提供的API函數(shù)有一定的印象,這些API函數(shù)就是windows操作系統(tǒng)提供給程序員的系統(tǒng)調(diào)用接口。而Linux作為一個操作系統(tǒng),當然有它自己的系統(tǒng)調(diào)用。

  2、 系統(tǒng)調(diào)用

  通常,在OS的核心中都設置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,并將它們提供給程序員調(diào)用。程序員在需要OS提供某種服務的時候,便可以調(diào)用一條系統(tǒng)調(diào)用命令,去實現(xiàn)希望的功能,這就是系統(tǒng)調(diào)用。各個不同的操作系統(tǒng)有各自的系統(tǒng)調(diào)用,正如前文所講的windows API,便是windows的系統(tǒng)調(diào)用,linux的系統(tǒng)調(diào)用與之不同的是linux由于內(nèi)核代碼完全公開,所以可以細致的分析出其系統(tǒng)調(diào)用的機制。

  1、 系統(tǒng)調(diào)用和普通過程的區(qū)別

  (1)運行于不同的系統(tǒng)狀態(tài)

  如前所述,用戶程序可以通過系統(tǒng)調(diào)用進入系統(tǒng)空間,而普通過程則只能在用戶空間當中運行。

  (2)通過軟中斷切換

  由于用戶程序使用系統(tǒng)調(diào)用后要進入系統(tǒng)空間,所以需要調(diào)用一個軟中斷;而普通過程在被調(diào)用時沒有這個過程。

  2、 系統(tǒng)調(diào)用的類型

  系統(tǒng)調(diào)用的作用與它所在的操作系統(tǒng)有密切關系,根據(jù)操作系統(tǒng)的性質(zhì)不同,它們所提供的系統(tǒng)調(diào)用會有一定的差異,不過對于普通操作系統(tǒng)而言,應該具有下面幾類系統(tǒng)調(diào)用。

  (1)進程控制類型。

  (2)文件操縱類型。

  (3)進程通信類型。

  (4)數(shù)據(jù)管理類型。

  3、 系統(tǒng)調(diào)用的實現(xiàn)機制。

  由于操作系統(tǒng)的不同,其系統(tǒng)調(diào)用的實現(xiàn)方式可能不同,然而實現(xiàn)機制應該是大致相同的,一般包含下面幾個步驟:

  (1)設置系統(tǒng)調(diào)用號

  在系統(tǒng)當中,往往設置多條系統(tǒng)調(diào)用命令,并賦予每條系統(tǒng)調(diào)用命令一個唯一的系統(tǒng)調(diào)用號。

  (2)處理系統(tǒng)調(diào)用

  操作系統(tǒng)當中有個一張系統(tǒng)調(diào)用入口表。表中的每個表目都對應一條系統(tǒng)調(diào)用命令,它包含有該系統(tǒng)調(diào)用自帶參數(shù)的數(shù)目、系統(tǒng)調(diào)用命令處理程序的入口地址等等。操作系統(tǒng)內(nèi)核便是根據(jù)所輸入的系統(tǒng)調(diào)用號在該表中查找到到相應的系統(tǒng)調(diào)用,進而轉入它的入口地址去執(zhí)行它。

  【實現(xiàn)步驟】

  1、拷貝源碼

  拷貝linux-3.2.tar.bz2 到虛擬機/usr/src目錄下

  2、解壓源碼

  #tar xvjf linux-3.2.tar.bz2

  3、添加源代碼

  #vi linux-3.2/kernel/sunplus.c

  新建一個文件sunplus.c。在此文件中添加系統(tǒng)調(diào)用函數(shù)源代碼,該函數(shù)的名稱應該是新的系統(tǒng)調(diào)用名稱前面加上sys_標志。假設新加的系統(tǒng)調(diào)用為sunpluscall,則該函數(shù)應該這樣寫

  #include

  asmlinkage long sys_sunpluscall(void)

  {

  printk(KERN_EMERG "this is sunpluscall KERN_EMERG\n");

  printk(KERN_ALERT "this is sunpluscall KERN_ALERT\n");

  printk(KERN_CRIT "this is sunpluscall KERN_CRIT\n");

  printk(KERN_ERR "this is sunpluscall KERN_ERR\n");

  printk(KERN_WARNING "this is sunpluscall KERN_WARNING\n");

  printk(KERN_NOTICE "this is sunpluscall KERN_NOTICE\n");

  printk(KERN_INFO "this is sunpluscall KERN_INFO\n");

  printk(KERN_DEBUG "this is sunpluscall KERN_DEBUG\n");

  return 0;

  }

  4、修改Makefile(編譯內(nèi)核時編譯源代碼)

  把sunplus.c添加到kernel目錄下的Makefile中,使其在make編譯內(nèi)核的時候能編譯到內(nèi)核中。

  #vi linux-3.2/kernel/Makefile

  在14行 obj-y += groups.o 下面插入一行

  obj-y += sunplus.o

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用1

  5、鏈接新的系統(tǒng)調(diào)用

  添加新的系統(tǒng)調(diào)用之后,下一個任務是讓LINUX內(nèi)核的其余部分知道該程序的存在。增加新函數(shù)的鏈接,需要進行下面的操作。

  (1)為新的系統(tǒng)調(diào)用添加系統(tǒng)調(diào)用號

  系統(tǒng)調(diào)用號的定義格式如下:

  #define __NR_name NNN

  其中,name用系統(tǒng)調(diào)用名稱代替,而NNN是該系統(tǒng)調(diào)用對應的號碼。應該將新的系統(tǒng)調(diào)用名稱加到清單的最后,并給它分配已經(jīng)用到的系統(tǒng)調(diào)用號后面的一個號碼。

  LINUX內(nèi)核自身用到的系統(tǒng)調(diào)用號已經(jīng)用到348了。而如果讀者還要自行增加系統(tǒng)調(diào)用,就必須從349開始。

  #vi linux-3.2/arch/x86/include/asm/unistd_32.h

  在文件356行#define __NR_process_vm_writev 348 下面插入一行

  #define __NR_sunpluscall 349

  把 #define NR_syscalls 349

  修改成

  #define NR_syscalls 350

  NR_syscalls 這個宏表示系統(tǒng)調(diào)用的總個數(shù)。

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用2

  (2)修改系統(tǒng)調(diào)用的指針列表

  vi linux-3.2/arch/x86/kernel/syscall_table_32.S

  在文件350行.long sys_process_vm_writev 下面添加一行

  .long sys_sunpluscall

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用3

  (3)vi linux-3.2/arch/x86/ia32/ia32entry.S

  在文件854行.quad compat_sys_process_vm_eritev 下面添加一行

  .quad sys_sunpluscall

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用4

  6、重新編譯、安裝

  (1)清除殘留的.config和.o

  在linux-3.2 目錄下 輸入命令

  #make mrproper

  該命令的功能在于清除當前目錄下殘留的.config和.o文件,這些文件一般是以前編譯時未清理而殘留的。而對于第一次編譯的代碼來說,不存在這些殘留文件,所以可以略過此步,但是如果該源代碼以前被編譯過,那么強烈建議執(zhí)行此命令,否則后面可能會出現(xiàn)未知的問題。

  (2)配置編譯選項

  作為操作系統(tǒng)的內(nèi)核,其內(nèi)容和功能必然非常繁雜,包括處理器調(diào)度,內(nèi)存管理,文件系統(tǒng)管理,進程通訊以及設備管理等等,而對于不同的硬件,其配置選項也不相同,所以在編譯源代碼之前必須設置編譯選項。

  配置命令有 make menuconfig 或者make xconfig。我使用的是make menuconfig,但是前提條件是要裝ncurses。

  1)輸入命令:

  sudo apt-get install libncurses5-dev

  更新安裝ncurses。 注意一定要聯(lián)網(wǎng)。

  2)輸入命令 :

  make menuconfig

  注意把vmware放大到全屏終端放大到全屏,因為輸入make menuconfig 命令后會彈出一個窗口出來,如果不放大會出錯,彈不出窗口。

ubuntu如何添加系統(tǒng)調(diào)用5

  選擇exit,保存默認配置

ubuntu如何添加系統(tǒng)調(diào)用6

  (3)編譯內(nèi)核

  1)清除以前編譯生成的 .o 等文件。輸入命令:

  make clean

  2)編譯內(nèi)核 此步大約需要 一個半到兩個小時(看機器的性能)。 輸入命令:

  make bzImage

  3)編譯modules 輸入命令:

  make modules

  4)安裝modules 就是把剛才編譯生產(chǎn)的modules拷到系統(tǒng)文件夾下,以供新內(nèi)核調(diào)用。 輸入命令:

  make modules_install

  5)建立要載入ramdisk的映像文件

  如果linux系統(tǒng)安裝在scsi磁盤上,這步是必須的,否則可以跳過。

  切換至/usr/src目錄

  輸入命令:

  mkinitramfs -o /boot/initrd.img-3.2.0 3.2.0

  (4)安裝內(nèi)核

  輸入命令:

  make install

  此時系統(tǒng)會把linux內(nèi)核的鏡像文件還有System.map考入到/boot下,然后會自動生成引導菜單。

  7、配置grub

  配置grub引導程序

  ubuntu系統(tǒng)中grub的默認等待時間為0,要想進入grub菜單,就要修改下等待時間。

  修改系統(tǒng)文件/etc/default/grub

  將GRUB_HIDDEN_TIMEOUT=0改為GRUB_HIDDEN_TIMEOUT=10

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用7

  修改系統(tǒng)文件/etc/default/grub后需用update-grub命令自動生成啟動的選項。

  執(zhí)行

  sudo update-grub

  要想系統(tǒng)重啟后的grub引導界面有我們安裝好的內(nèi)核選項我們還需修改/boot/grub/grub.cfg 文件。

  屏蔽 124行 的 // submenu "Previous Linux versions" {

  在125行 加入一個 {

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用8

  8、重啟ubuntu

  重啟后按 “shift”鍵, 選擇 Ubuntu , Linux 3.2.0 選項

  如圖:

ubuntu如何添加系統(tǒng)調(diào)用9

  9、測試

  (1)編寫測試代碼

  調(diào)用系統(tǒng)調(diào)用的方式是使用_syscall宏。2.6.18版本之前的內(nèi)核,在include/asm-i386/unistd.h文件中定義有7個_syscall宏,分別是:

  1 _syscall0(type,name)

  2 _syscall1(type,name,type1,arg1)

  3 _syscall2(type,name,type1,arg1,type2,arg2)

  4 _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)

  5 _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)

  6 _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5)

  7 _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6)

  但是自2.6.19版本開始,_syscall宏被廢除,我們需要使用syscall函數(shù),通過指定系統(tǒng)調(diào)用號和一組參數(shù)來調(diào)用系統(tǒng)調(diào)用。

  syscall函數(shù)原型為:

  int syscall(int number, ...);

  其中number是系統(tǒng)調(diào)用號,number后面應順序接上該系統(tǒng)調(diào)用的所有參數(shù)。

  #include <stdio.h>

  #include <stdlib.h>

  #include

  #include "../linux-3.2/arch/x86/include/asm/unistd_32.h"

  int main(int argc, char *argv[])

  {

  syscall(349);

  return 0;

  }

  (2)測試

  測試代碼寫完后編譯

  gcc test.c -o test

  注意 系統(tǒng)調(diào)用里的打印printk是有優(yōu)先級的,在使用printk時可指定printk的優(yōu)先級,只有printk的優(yōu)先級大于終端時,終端上才會顯示出printk打印出的內(nèi)容。

  打印方法1:

  切換至字符模式

  打印方法2:

  使用dmesg函數(shù)

  Ubuntu切換到字符模式下的方法:

  按 ctl + alt + F1 (F1~F6)

  切換回圖形界面的方法

  按 alt + F7

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉載。
10年以上業(yè)內(nèi)強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
亚洲综合欧美在线一区在线播放| 特级毛片A级毛片免费观看网站| 日本工口里番H彩色无遮挡全彩| 日韩精品视频一区二区| 无码人妻精品一区二区桃蜜| 亚洲国产精品一区二区第四页| 在线观看无码AV网站永久| VPSWINDOWS另类乱| 国产成人精品日本亚洲第一区| 好男人在线观看无遮挡版| 麻豆国产96在线 | 日韩| 人人超人人超碰超国产| 无码人妻精品一二三区免费| 亚洲日韩精品无码专区加勒比海 | 欧美成人在线视频| 四季亚洲Av日韩AV无码中文| 亚洲欧洲国产码专区在线观看| 97在线视频免费观看| 丰满妇女强高潮18ⅩXXX在线| 激情综合激情五月俺也去| 女儿国免费观看完整版在线 | 女主播屁G裸露W身曝光| 忘忧草WWW中文在线资源| 野花香电视剧全集免费观看| 成人女人爽到高潮的Av在线| 国内精品伊人久久久久妇| 女人的抉择全集免费播放| 无码人妻精品一区二区三区蜜桃91| 亚洲色欲色欲综合网站色偷偷| 爱丫爱丫影院在线看免费| 国内精品综合久久久40P| 欧美xxxxx久久短视频| 无遮挡呻吟娇喘视频免费播放 | 女人扒开屁股桶爽6O分钟| 无码H肉男男在线观看免费| 在床上拔萝卜又疼又叫什么病 | 99无码熟妇丰满人妻啪啪| 国产巨大爆乳在线观看| 女儿儿媳陪自己玩的心情说说| 西方37大但人文艺术任汾A级| 中文字幕V亚洲日本| 国产精品私密保养| 女人18毛片A级毛片免费视频| 无码人妻精品一区二区蜜桃百度 | 国产欧美日韩精品A在线观看| 女女女女女裸体处开BBB| 亚洲AV无码乱码国产精品老妇| OLDGRANNY日本老熟:妇| 精品久久无码中文字幕| 色综合久久久无码中文字幕波多 | 蜜桃av秘 无码一区二区三区| 无码精品一区二区三区免费视频| 696969大但人文艺术正道| 国精产品一线二线三线区别| 日本19禁啪啪无遮挡免费| 亚洲色成人网站WWW永久| 高校美女内射含羞草| 美女内射在线观看| 亚洲AV极品熟妇一品二品三品| 拜托了老师动漫第二季| 久久水蜜桃亚洲AV无码精品| 玩弄JAPAN白嫩少妇HD小说| 99久久精品无码专区| 精品久久人妻AV中文字幕| 深入浅出糙汉X软妹V1V| 99精品国产在热久久婷婷| 久久99热只有频精品8| 玩弄秘书的奶又大又软| А√天堂8资源中文在线| 久热中文字幕无码视频| 亚洲AV无码AV日韩AV网站| 俄罗斯另类ZOZO| 男生女生一起相差差差| 亚洲国产最大AV| 国产精品不卡AⅤ在线播放| 人妻被按摩到潮喷中文不卡| 再深点灬舒服灬太大了下载| 很嫩很紧直喷白浆在线| 双人床上做剧烈运动可以吗| V与子敌伦刺激对白播放| 麻豆国产VA免费精品高清在线| 亚洲精品欧美综合二区| 国产精品亚洲污污网站入口| 日韩欧美一区二区三区视频| 99久久婷婷国产综合亚洲| 看成年女人午夜毛片免费| 亚洲乱码一区AV春药高潮 | 午夜天堂一区人妻| 丰满人妻被黑人中出849| 欧美日日日日BBBBB视频| 中文字幕成人精品久久不卡| 久久精品国产99精品国产亚洲性| 亚洲AⅤ精品无码一区二区嫖妓| 高H禁伦餐桌上的肉伦| 人妻系列无码专区无码专区 | 亚洲精品无码AV专区最新| 国产人成视频在线观看| 四虎国产精品永久入口| 第九午夜不卡影院| 日本少妇自慰高清喷浆| JEALOUSVUE成熟| 欧美日韩精品一区二区三区不卡| 中国大陆高清AⅤ毛片| 久久无码AV三级| 亚洲日韩激情无码一区| 精品人妻伦一二三区久久| 亚洲AV无码精品色午夜| 国产熟女老妇300部MP4| 小SAO货CAO得你舒服吗男男| 国产精品久久久久久久久爆乳| 熟睡入侵JEALOUSVUE| 国产69精品久久久久观看软件| 色情ⅩXXX欧美色妇HD| 成人区人妻精品一区二区不卡网站 | 国产成人无码一区二区在线播放 | 韩漫嘿啾漫画进入| 亚洲AV网站在线观看| 国自产拍精品偷拍视频| 亚洲成A人片在线观看无码下载| 国内精品一线二线三线黄| 亚洲AV综合色区无码一二三区 | 亚洲—本道 在线无码AV发| 国色天香精品一卡2卡3卡| 亚洲AV无码成人专区片在线观看 | 亚洲AV无码有乱码在线观看| 韩国乱码片免费看| 亚洲国产精品不卡AV在线| 精品亚洲国产成人AV在线| 亚洲日韩高清AⅤ在线观看| 久久精品国产清自在天天线 | 里番本子库绅士ACG全彩无码 | 亚洲美女高潮久久久久| 久久人妻少妇嫩草AV无码专区 | 国产 在线 | 日韩| 无遮挡啪视频APP| 精品国产乱码一区二区三区APP| 亚洲色成人一区二区三区| 巨胸美乳无码人妻在线| 2022最新韩国理伦片在线观看| 欧美日韩久久中文字幕| 波多野结衣无码中文字幕18禁| 日韩无码av一区二区| 国产成人综合亚洲AV| 亚洲AV综合AV一区二区三区| 久久久AV波多野一区二区| √天堂资源最新版中文资源最新版| 欧美IPHONEXSMAX免费| 成年女人A级毛片免费观看 | 欧美黑人又大又粗又长久久久| 白嫩无码人妻熟妇啪啪区| 天堂…在线最新版在线| 含着奶头搓揉深深挺进| 野花香高清在线观看视频播放免费 | 欧美人与禽XOXO牲伦交| 成人女人A级毛片免费软件| 午夜A级理论片在线播放不卡| 精品女同一区二区三区免费站| 泳池里强摁做开腿呻吟| 人妻激情偷乱频一区二区三区| 国产成人亚洲综合无码精品| 亚洲AV午夜成人片精品网站| 老男人吃奶疯狂啃肿奶头| YY111111人妻影院| 无码AV在线一区二区| 精品人妻VA出轨中文字幕| 1000部拍拍拍18勿入免费视频下载| 人妻人人添人人爽夜夜欢视频| 国产精品对白刺激久久久| 亚洲欧美色国产综合| 欧美日韩一区精品视频一区二| 国产AⅤ激情无码久久| 亚洲毛片无码专区亚洲乱| 欧美熟妇搡BBBB搡BBBB| 国产精品久久久久久久久久免费| 亚洲色欲色欲综合网站色偷偷| 欧美日韩精品一区二区三区不卡 | 无码国产精品一区二区免费模式| 九月婷婷亚洲综合成人| WWW射我里面在线观看| 无码免费一区二区三区免费播放| 久久久国产精品VA麻豆| 波多野结衣50连登视频| 亚洲AV综合永久无码精品天堂| 男女做爰高清免费直播网站| 国产A级毛多妇女视频| 亚洲综合国产成人无码| 日本无人区码一码二码三码四码 | 综合无码一区二区三区| 天美传媒在线观看果冻传媒视频 | 久久久久久国产精品美女| 差差差无掩盖视频30分钟| 亚洲国产成人AV在线电影播放| 欧美性受XXXX88喷潮| 国内毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 无码夫の前で人妻を犯す中字| 老翁的大肉蟒进进出出| 国产黄 色 网 站 成 人免费| 在线看片无码永久AV| 无码精品一区二区三区在线| 免费夜色污私人影院在线观看|