# AOS assignment2 ## Specfication same as assignment1 | Category | Virtual Machine | |:---:|---| | Type | VirtualBox with Ubuntu 20.04.1| | CPU Cores | 2 CPU cores allocated| | RAM | 4GB RAM allocated| | Storage |40GB Size of the virtual disk| | Category | Linux Kernel Environment | |:---:|---| | Version |Linux 6.10.9 | | Distribution | Ubuntu | | Category | Used Packages | |:---:|---| | Key Packages | build-essential, flex, bison, libncurses-dev, libelf-dev, elfutils, libssl-dev, bc| ## step1 修改system call table加入新的system call name | 步驟 | 說明 | |:------:|:------:| | 1.1 | 進入system call table的路徑</br>**cd /usr/src/linux-6.10.9/arch/x86/entry/syscalls** | | 1.2 | 修改它**sudo gedit syscall_64.tbl** <br/> | | 1.3 | 加入一個system call而system call號碼為**463** <br/>  | **欄位分成以下** |syscall號碼|分別在32 or 64 or common版本|syscall_name|syscall| |:---:|:---:|:---:|:---:| | 463 | common | print_studentid | sys_print_studentid | ## step2 | 步驟 | 說明 | |:------:|:------:| | 2.1 | define a system call,因不需要任何的輸入所以用**SYSCALL_DEFINE0(system_call_name)** | | 2.2 | **KERN_EMERG**對應到的函示為**pr_emerg("message");** 訊息如下 <br/> | ## step3 | 步驟 | 說明 | |:------:|:------:| | 3.1 | 進入system call header file的路徑**cd /usr/src/linux-6.10.9/include/linux** | | 3.2 | 修改它**sudo gedit syscalls.h** | | 3.3 | 加入**asmlinkage long sys_print_studentid(void);**  | ## step4 | 步驟 | 說明 | |:------:|:------:| | 4.1 |因為修改了kernel加入了新的system call,所以需要重新make new kernel **sudo make -j16 >/dev/null** <br/>  | | 4.2 | **sudo make install** <br/>  | | 4.3 | **reboot** <br/>  | | 4.4 | 選擇了剛剛make install好的新的kernel <br/>  | | 4.5 | 寫一個test program來測試system call **463** <br/>  | | 4.6 |用**sudo gcc test.c -o test**來編譯test.c,編譯完後會產生test可執行檔。<br/> 執行test檔 **./test** <br/> 若我的system call 成功的話會在螢幕上收到**system call returned 1**的訊息。 <br/>  | | 4.7 | 進入**diagnostic message**查看**kernel log,** <br/> 輸入 **dmesg --level=emerg** 查看**KERN_EMERG** level訊息,而上面確實有顯示我在SYSCALL_DEFINE0時寫的內容。<br/>**studentid : 61347109S** <br/>  | | 4.8 | 再來輸入**dmesg**會顯示所有的current level以上的kernel log訊息,而且找到**KERN_EMERG**訊息也有吻合。 <br/>  <br/>  | ## Challenging part 根據作業要求,我需要加入一個簡單的系統呼叫到kernel中,且必須以 KERN_EMERG最高優先權的系統呼叫打印訊息在kernel log當中, 原本用**printk**有誤,但是我找到利用**pr_emerg**的函示也可以達到**printk(KERN_EMERG"")** 的效果,而後面就沒有太大難度了。 <div style="page-break-after: always;"></div> ## Reference [Message logging with printk](https://www.kernel.org/doc/html/latest/core-api/printk-basics.html#c.pr_fmt) [printk紀錄](https://www.kernel.org/doc/html/next/translations/zh_CN/core-api/printk-basics.html) 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up