1. 程式人生 > >作業系統實驗一:linux核心編譯及新增系統呼叫

作業系統實驗一:linux核心編譯及新增系統呼叫

編譯環境

  1. VMWare
  2. Ubuntu Desktop Ubuntu 18.04.1映象下載地址:點我下載 裝ubuntu很簡單,網上教程一大堆,記憶體分配多點。

新增系統呼叫步驟

  1. 解壓linux核心 想辦法,把上面的linux核心弄到ubuntu裡面,可以從主機拖拽,可以用wget命令直接從網站下載,也可以用git下載。之後開啟終端,開始搞事
//切換到管理員賬號,然後輸入密碼
su root

//cd 到linux壓縮包目錄下,tar命令解壓
tar -xJf linux-4.16.3.tar.xz
  1. 安裝軟體
/*確保在root使用者下*/
//安裝gcc編譯器和gdb偵錯程式
apt-get gcc gdb
//安裝vim編輯器
apt-get vim

//安裝bison、flex、libssl-dev、libncurses5-dev,這一串軟體用來配置核心
apt-get bison flex libssl-dev libncurses5-dev

//安裝make,編譯核心需要用到
apt-get make

軟體大概裝完了,如果出現下圖類似bison:not found提示,安裝一下bison bison: not found

  1. 分配系統呼叫號
//cd 到剛剛解壓的linux核心目錄裡面

//vim 修改系統呼叫表,用tab鍵加快輸入速度
vim arch/x86/entry/syscalls/syscall_64.tbl
333        64        ywmsyscall        sys_ywmsyscall

分配系統呼叫號

  1. 申明系統呼叫服務例程原型
vim include/linux/syscalls.h
asmlinkage long sys_ywmsyscall(void);

申明系統呼叫服務例程原型

  1. 實現系統呼叫服務例程
vim kernel/sys.c
SYSCALL DEFINE0(ywmsyscall){
	printk("Hello, this is ywm's syscall test!\n");
	return 0;
}

實現系統呼叫服務例程

  1. 重新編譯核心 以上步驟已經完成新增一個新系統呼叫的所有工作,但是要讓這個系統呼叫真正在核心中執行起來,還需要重新編譯核心

①清除殘留的.config和.o檔案

make mrproper

②配置核心

make menuconfig

終端視窗不夠大可能會報錯,放大至少為19行 選擇Save儲存配置資訊,然後選擇Exit退出 ③編譯核心

//用j2、j4加快編譯
make -j2

④編譯模組

//第一次編譯模組要很長時間
make modules

⑤安裝模組

make modules_install

⑥安裝核心

make install

⑦更新grub載入程式

update-grub2

⑧快照!快照!快照!

⑨重啟

reboot

重啟出現out of memory,說明給虛擬機器分配的記憶體不夠,加! 在這裡插入圖片描述 成功啟動作業系統之後,開啟終端檢視新的核心版本為4.16.3

uname -r
  1. 編寫程式測試新系統呼叫
//cd到一個空一點的目錄
vim test.c
#define _GNU_SOUrce
#include<unistd.h>
#include<sys/syscall.h>
int main(){
	syscall(333);
	return 0;
}
//編譯c語言程式
gcc -o test test.c

//輸出程式結果
./test

未完待續,結果還沒跑出來