Linux Project 1
Download
Report
Transcript Linux Project 1
Linux Project 1
中央大學資工系 碩士二年級
江瑞敏
Outline
Install fedora on Virtualbox
How to compile linux kernel
How to add a system call
Project hint
Solution
Install Fedora
Ftpes://140.115.53.23
Username: linux
Password: vm3zj4cl4
Install Fedora
新增一個Virtual Machine (1/9)
點選「下一步」
新增一個Virtual Machine (2/9)
輸入自訂的Virtual Machine名稱
作業系統選擇Linux,版本選擇Fedora
新增一個Virtual Machine (3/9)
允許的話就設定512MB以上,之後的OS安裝時是圖
形介面
新增一個Virtual Machine (4/9)
建立新的虛擬硬碟來存放所有的檔案
新增一個Virtual Machine (5/9)
點選「下一步」
新增一個Virtual Machine (6/9)
點選「下一步」
新增一個Virtual Machine (7/9)
選擇虛擬硬碟要存放的位置及大小
硬碟大小要選至少10GB以上,以免編Kernel編到沒
空間
新增一個Virtual Machine (8/9)
點選「建立」
新增一個Virtual Machine (9/9)
點選「建立」,這樣就完成Virtual Machine的建立
安裝Fedora (1/18)
安裝Fedora (1/18)
點選「下一步」
安裝Fedora (2/18)
選擇剛剛下載下來的ISO檔案
安裝Fedora (3/18)
點選「開始」
安裝Fedora (4/18)
按Enter開始圖形介面安裝
安裝Fedora (5/18)
選擇「Skip」跳過ISO檔的完整度檢查
安裝Fedora (6/18)
點選「Next」
安裝Fedora (7/18)
點選「Next」
安裝Fedora (8/18)
點選「Next」
安裝Fedora (9/18)
目前虛擬硬碟上都沒有資料也沒有格式化
點選「Yes」
安裝Fedora (10/18)
選擇系統預設的硬碟配置
點選「Next」
安裝Fedora (11/18)
點選「Yes」
安裝Fedora (12/18)
網路設定VirtualBox都幫我們弄好了
點選「Next」
安裝Fedora (13/18)
選擇「Asia/Taipei」時區
點選「Next」
安裝Fedora (14/18)
設定root的密碼,之後編譯Kernel完安裝時要用到這
組密碼
點選「Next」
安裝Fedora (15/18)
一定記得要勾選「Software Development」,不然
不能夠編譯Kernel
安裝Fedora (16/18)
等系統設定完Dependencies完後,點選「Next」開
始安裝
安裝Fedora (17/18)
安裝中,大概需要10~20分鐘左右,請稍後…
安裝Fedora (18/18)
安裝完成,點選「Reboot」
Compile Linux Kernel
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux2.6.18.tar.bz2
http://mike820324.blogspot.tw/2013/01/linux-kernel-1how-to-compile-linux.html
Compile Linux Kernel
1. make oldconfig
2. make –j[n]
3. make modules_install
4. make installl
5. reboot
Add a System call
http://in1.csie.ncu.edu.tw/~hsufh/COURSES/FALL2007/
syscall.html
Add a System Call
1. cd $kernel_src
2. cd arch/i386/kernel/syscall_table.S
3.
….
.long sys_tee
/* 315 */
.long sys_vmsplice
.long sys_move_pages
.long sys_project
/* 318 */
Add a System Call
cd linux/include/asm/unistd.h
#define __NR_vmsplice
316
#define __NR_move_pages
317
#define __NR_project
318
#ifdef __KERNEL__
#define NR_syscalls 319
Add a System Call
cd linux/include/linux/syscalls.h
asmlinkage long sys_set_robust_list(struct robust_list_head __user *head,
size_t len);
asmlinkage long sys_project( int i );
#endif
Add a System Call
cd linux/kernel
touch project.c
Makefile
obj-y = project.o sched.o fork.o exec_domain.o
panic.o printk.o profile.o
Add a System Call
Project.c
#include <linux/linkage.h>
#include <linux/kernel.h>
asmlinkage long sys_project( int i ){
printk( "Success!! -- %d\n", i );
return 0;
}
Add a System Call(optional)
/usr/include/asm/unistd.h
#define __NR_vmsplice
#define __NR_move_pages
#define __NR_project
316
317
318
#endif /* _ASM_I386_UNISTD_H_ */
Add a System Call
Recompile linux kernel
Reboot
Create a new file “test.c”
#include<syscall.h>
int main(){
syscall( __NR_project, 2 );
/* 如果沒有做步驟 5, 就用syscall( 318, 2 ); 代替 */
return 0;
}
Project Hint
How to find the process you want?
How to find Virtual Address that is being used by the
current process?
How to transfer Virtual Address to Physical Address?
Good luck!!
Solution
http://pastebin.com/wEVLaQyg