作業系統實驗一:linux核心編譯及新增系統呼叫
阿新 • • 發佈:2018-12-14
編譯環境
- VMWare
- Ubuntu Desktop Ubuntu 18.04.1映象下載地址:點我下載 裝ubuntu很簡單,網上教程一大堆,記憶體分配多點。
新增系統呼叫步驟
- 解壓linux核心 想辦法,把上面的linux核心弄到ubuntu裡面,可以從主機拖拽,可以用wget命令直接從網站下載,也可以用git下載。之後開啟終端,開始搞事
//切換到管理員賬號,然後輸入密碼
su root
//cd 到linux壓縮包目錄下,tar命令解壓
tar -xJf linux-4.16.3.tar.xz
- 安裝軟體
/*確保在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
- 分配系統呼叫號
//cd 到剛剛解壓的linux核心目錄裡面
//vim 修改系統呼叫表,用tab鍵加快輸入速度
vim arch/x86/entry/syscalls/syscall_64.tbl
333 64 ywmsyscall sys_ywmsyscall
- 申明系統呼叫服務例程原型
vim include/linux/syscalls.h
asmlinkage long sys_ywmsyscall(void);
- 實現系統呼叫服務例程
vim kernel/sys.c
SYSCALL DEFINE0(ywmsyscall){
printk("Hello, this is ywm's syscall test!\n");
return 0;
}
- 重新編譯核心 以上步驟已經完成新增一個新系統呼叫的所有工作,但是要讓這個系統呼叫真正在核心中執行起來,還需要重新編譯核心
①清除殘留的.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
- 編寫程式測試新系統呼叫
//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
未完待續,結果還沒跑出來