色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

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

當前位置:首頁  >  技術干貨  > ubuntu如何添加系統調用

ubuntu如何添加系統調用

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

  【目的】

  理解系統調用的概念,熟悉系統調用的用法。

  【環境】

  PC:ubuntu 12.04

  內核:Linux:3.2.0

  【要求】

  編程創建系統調用sunpluscall(),實現功能是顯示字符串到屏幕上。

  編譯3.2.0內核,用新內核引導系統。

  編程調用自己創建的系統調用。

  【原理】

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

  1、 程序接口

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

  2、 系統調用

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

  1、 系統調用和普通過程的區別

  (1)運行于不同的系統狀態

  如前所述,用戶程序可以通過系統調用進入系統空間,而普通過程則只能在用戶空間當中運行。

  (2)通過軟中斷切換

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

  2、 系統調用的類型

  系統調用的作用與它所在的操作系統有密切關系,根據操作系統的性質不同,它們所提供的系統調用會有一定的差異,不過對于普通操作系統而言,應該具有下面幾類系統調用。

  (1)進程控制類型。

  (2)文件操縱類型。

  (3)進程通信類型。

  (4)數據管理類型。

  3、 系統調用的實現機制。

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

  (1)設置系統調用號

  在系統當中,往往設置多條系統調用命令,并賦予每條系統調用命令一個唯一的系統調用號。

  (2)處理系統調用

  操作系統當中有個一張系統調用入口表。表中的每個表目都對應一條系統調用命令,它包含有該系統調用自帶參數的數目、系統調用命令處理程序的入口地址等等。操作系統內核便是根據所輸入的系統調用號在該表中查找到到相應的系統調用,進而轉入它的入口地址去執行它。

  【實現步驟】

  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。在此文件中添加系統調用函數源代碼,該函數的名稱應該是新的系統調用名稱前面加上sys_標志。假設新加的系統調用為sunpluscall,則該函數應該這樣寫

  #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(編譯內核時編譯源代碼)

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

  #vi linux-3.2/kernel/Makefile

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

  obj-y += sunplus.o

  如圖:

ubuntu如何添加系統調用1

  5、鏈接新的系統調用

  添加新的系統調用之后,下一個任務是讓LINUX內核的其余部分知道該程序的存在。增加新函數的鏈接,需要進行下面的操作。

  (1)為新的系統調用添加系統調用號

  系統調用號的定義格式如下:

  #define __NR_name NNN

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

  LINUX內核自身用到的系統調用號已經用到348了。而如果讀者還要自行增加系統調用,就必須從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 這個宏表示系統調用的總個數。

  如圖:

ubuntu如何添加系統調用2

  (2)修改系統調用的指針列表

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

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

  .long sys_sunpluscall

  如圖:

ubuntu如何添加系統調用3

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

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

  .quad sys_sunpluscall

  如圖:

ubuntu如何添加系統調用4

  6、重新編譯、安裝

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

  在linux-3.2 目錄下 輸入命令

  #make mrproper

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

  (2)配置編譯選項

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

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

  1)輸入命令:

  sudo apt-get install libncurses5-dev

  更新安裝ncurses。 注意一定要聯網。

  2)輸入命令 :

  make menuconfig

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

ubuntu如何添加系統調用5

  選擇exit,保存默認配置

ubuntu如何添加系統調用6

  (3)編譯內核

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

  make clean

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

  make bzImage

  3)編譯modules 輸入命令:

  make modules

  4)安裝modules 就是把剛才編譯生產的modules拷到系統文件夾下,以供新內核調用。 輸入命令:

  make modules_install

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

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

  切換至/usr/src目錄

  輸入命令:

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

  (4)安裝內核

  輸入命令:

  make install

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

  7、配置grub

  配置grub引導程序

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

  修改系統文件/etc/default/grub

  將GRUB_HIDDEN_TIMEOUT=0改為GRUB_HIDDEN_TIMEOUT=10

  如圖:

ubuntu如何添加系統調用7

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

  執行

  sudo update-grub

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

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

  在125行 加入一個 {

  如圖:

ubuntu如何添加系統調用8

  8、重啟ubuntu

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

  如圖:

ubuntu如何添加系統調用9

  9、測試

  (1)編寫測試代碼

  調用系統調用的方式是使用_syscall宏。2.6.18版本之前的內核,在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函數,通過指定系統調用號和一組參數來調用系統調用。

  syscall函數原型為:

  int syscall(int number, ...);

  其中number是系統調用號,number后面應順序接上該系統調用的所有參數。

  #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

  注意 系統調用里的打印printk是有優先級的,在使用printk時可指定printk的優先級,只有printk的優先級大于終端時,終端上才會顯示出printk打印出的內容。

  打印方法1:

  切換至字符模式

  打印方法2:

  使用dmesg函數

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

  按 ctl + alt + F1 (F1~F6)

  切換回圖形界面的方法

  按 alt + F7

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您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
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
亚洲一区二区欧美日韩| 欧美v国产在线一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 国产精品888| 国产农村妇女毛片精品久久麻豆| 美脚の诱脚舐め脚责91| 欧美撒尿777hd撒尿| 日日摸夜夜添夜夜添国产精品 | k8久久久一区二区三区| 精品播放一区二区| 国产成人综合网站| 自拍偷在线精品自拍偷无码专区| 91一区在线观看| 偷拍一区二区三区四区| 日韩欧美亚洲国产另类| 成人av网址在线| 亚洲精品国产一区二区精华液| 日本国产一区二区| 免费精品视频最新在线| 26uuu亚洲| 色悠悠亚洲一区二区| 亚洲r级在线视频| 久久久一区二区| 欧美日韩一区久久| 风间由美性色一区二区三区| 一区二区三区精品视频在线| 精品剧情在线观看| 91成人网在线| 国产成人免费在线观看| 婷婷开心激情综合| 亚洲精选视频免费看| 久久综合狠狠综合久久激情| 欧美午夜寂寞影院| av不卡免费电影| 另类综合日韩欧美亚洲| 亚洲免费观看高清| 国产欧美一区二区精品仙草咪| 欧美日精品一区视频| 国产东北露脸精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲欧美一区二区三区久本道91| 91精品国产欧美一区二区| 一本色道亚洲精品aⅴ| 国产精品1区二区.| 久久精品国产免费| 日韩在线一区二区三区| 亚洲一卡二卡三卡四卡无卡久久| 日本一区二区电影| 欧美韩国日本综合| 久久久蜜臀国产一区二区| 欧美哺乳videos| 欧美一级欧美一级在线播放| 欧美群妇大交群中文字幕| 欧美日韩一区二区三区高清| 欧美亚洲另类激情小说| 91久久人澡人人添人人爽欧美| 99在线精品免费| 日本电影欧美片| 欧美亚洲动漫另类| 欧美日韩精品一区二区三区| 欧美视频中文一区二区三区在线观看| 99精品欧美一区二区蜜桃免费| 色狠狠一区二区| 欧美丰满一区二区免费视频| 日本乱人伦aⅴ精品| 欧美精品视频www在线观看| 欧美乱妇23p| 欧美精品一区二区三区蜜桃视频 | 日韩亚洲欧美中文三级| 日韩欧美123| 国产亚洲一区字幕| 国产精品蜜臀av| 亚洲成av人片一区二区三区| 免费成人av在线播放| 国产伦理精品不卡| 在线免费观看日韩欧美| 精品国产免费久久| 一区二区不卡在线播放| 麻豆国产一区二区| 91理论电影在线观看| 欧美福利一区二区| 国产精品久久久久久久久免费樱桃| 亚洲精品中文字幕在线观看| 日日嗨av一区二区三区四区| 成人综合在线网站| 欧美男同性恋视频网站| 中文字幕欧美激情| 日本美女一区二区三区视频| av成人动漫在线观看| 久久综合九色综合久久久精品综合 | 欧美电影免费提供在线观看| 国产精品天美传媒| 日本色综合中文字幕| 99这里都是精品| 久久久精品2019中文字幕之3| 亚洲一区二区三区四区中文字幕| 久久成人综合网| 91麻豆精品国产91| 亚洲最大成人综合| av中文一区二区三区| 国产日韩成人精品| 久久成人麻豆午夜电影| 欧美日韩国产综合久久 | 在线看一区二区| 亚洲三级在线播放| 大胆亚洲人体视频| 日本一区二区三级电影在线观看 | 亚洲成av人影院| 欧洲激情一区二区| 一区二区三区四区中文字幕| 成人av在线影院| 国产精品乱子久久久久| 国产精品亚洲综合一区在线观看| 欧美一区二区三区视频免费| 午夜精品福利视频网站| 在线成人午夜影院| 乱一区二区av| 欧美激情一区二区三区在线| 国产电影一区二区三区| 欧美国产精品v| 色综合久久六月婷婷中文字幕| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 丁香桃色午夜亚洲一区二区三区| 久久―日本道色综合久久| 国产精品一区二区不卡| 国产精品嫩草影院av蜜臀| 色婷婷综合久久久久中文| 亚洲成人av电影在线| 日韩欧美国产电影| www.在线成人| 日本va欧美va精品发布| 欧美成人精品3d动漫h| 成人免费福利片| 亚洲国产美国国产综合一区二区| 欧美精品乱码久久久久久| 国内精品久久久久影院一蜜桃| 欧美国产激情二区三区| 色成人在线视频| 国产在线精品一区在线观看麻豆| 国产精品福利一区| 欧美一区午夜视频在线观看 | 久久久久久久久久电影| 91麻豆蜜桃一区二区三区| 五月天欧美精品| 国产精品久久久久aaaa| 欧美精品aⅴ在线视频| 日韩免费福利电影在线观看| 中文字幕乱码久久午夜不卡| 国产夜色精品一区二区av| 国产精品久久久久天堂| 亚洲国产精品ⅴa在线观看| 色素色在线综合| 国产精品一品视频| 偷窥少妇高潮呻吟av久久免费| 久久久99久久精品欧美| 色综合天天性综合| 久久精品国产一区二区三区免费看| 亚洲欧洲日产国产综合网| 91麻豆精品国产自产在线| 色呦呦一区二区三区| 国产成人精品影视| 日韩精品乱码免费| 亚洲乱码中文字幕| 国产清纯白嫩初高生在线观看91| 欧美一区二区三区免费在线看 | jlzzjlzz欧美大全| 高清视频一区二区| 国产.欧美.日韩| 成人午夜视频在线观看| 国产在线播放一区| 国产精品18久久久| 国产福利一区二区三区在线视频| 日韩精品亚洲一区二区三区免费| 亚洲精品国产一区二区精华液 | 蜜桃一区二区三区在线观看| 一区二区高清在线| 一区二区三区在线观看动漫| 亚洲一区二区三区视频在线播放 | 欧美亚洲综合在线| 91精彩视频在线| 欧美日韩国产免费| 日韩三区在线观看| 国产日韩视频一区二区三区| 中文字幕一区二区三区蜜月| 亚洲人成人一区二区在线观看| 亚洲一卡二卡三卡四卡| 六月婷婷色综合| 国产精品538一区二区在线| 97国产一区二区| 69堂成人精品免费视频| 精品少妇一区二区三区在线播放| 国产三级久久久| 亚洲永久精品大片| 九色|91porny| 91亚洲精品久久久蜜桃网站 | 成人免费观看av| 欧美日韩不卡一区二区| 久久久三级国产网站| 亚洲成人自拍偷拍| 国产成人精品三级|