首頁 > 軟體

Ubuntu 16.10新增系統呼叫

2020-06-16 17:11:52

系統呼叫(System Call)是作業系統為在使用者態執行的進程與硬體裝置(如CPU、磁碟、印表機等)

我們需要完成:

  • 下載最新版本的Linux核心原始碼,在Linux系統中解壓縮,大致觀察核心原始碼的組成結構。然後編譯這個版本的核心程式碼,並嘗試用編譯出的核心重新引導系統。
  • 新增一個新的系統呼叫,完成任意一個功能,重新編譯和執行核心,使新的系統呼叫可用。
  • 編寫一個使用者態的程式,使用增加的系統呼叫,以證明它確實可以用。

開發環境:

  • Linux 發行版 Ubuntu 16.10
  • VMware Workstation Pro 12.6
  • Linux 核心版本 4.11.6
  • 虛擬機器分配記憶體:4GB
  • 虛擬機器分配空間:50GB SSD

1.? 在VMware Workstation上安裝Ubuntu 16.10;

1.png

?

2. 進入Ubuntu系統,更新軟體原始碼.

sudo apt-get install update ?

?3. 下載編譯過程中的所需的軟體依賴包.

sudo apt-get install libncurses5-dev libssl-dev  

sudo apt-get install build-essential openssl  

sudo apt-get install zlibc minizip  

sudo apt-get install libidn11-dev libidn11

4. 通過git下載Linux 核心 4.11.6.

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

5.以root管理許可權解壓核心到 /usr/src/.

sudo cd /usr/src

sudo tar -xvf linux-4.11.6.tar.xz

6. Ubuntu安裝Vim編輯器.

sudo apt-get install vim

7.用Vim開啟/kernel/sys.c檔案,加入linkage.h的標頭檔案,在檔案末尾加入要加入的系統呼叫函數.

sudo vim linux-4.11.6/kernel/sys.c

2.png

 

3.png

8.加入系統呼叫函數宣告。在linux-4.11.6/arch/x86/include/asm/syscalls.h中加入asmlinkage void sys_quicksort(int [],int,int);

sudo vim linux-4.11.6/arch/x86/include/asm/syscalls.h

4.png

9.加入系統呼叫號。在linux-4.11.6/arch/x86/entry/syscalls/syscall_64.tbl

sudo vim linux-4.11.6/arch/x86/entry/syscalls/syscall_64.tbl

5.png

10. 編譯核心和安裝核心.

sudo make mrproper

sudo make clean

sudo make menuconfig

11. 根據自己處理器的最大執行緒數目來編譯.

sudo make -j4

12. 編譯後安裝核心到系統中.

sudo make modules_install  

sudo make install

13. 重新啟動載入核心.

6.png

14. 編寫程式驗證系統呼叫.

#include<stdio.h>

#define QUICK_SORT 334

int main()

{

    int i,a[]={9,20,36,10,1,2,6,4,5,8};

    syscall(QUICK_SORT,a,0,9);

    for(i=0;i<10;i++)

    {

        printf(“%dt”,a[i]);

    }

    return 0;

}

15. 編譯C程式:

 gcc -o test test.c

./test

7.png

.呼叫成功!


IT145.com E-mail:sddin#qq.com