主機:ubuntu 11.04
現在核心版本:2.6.38.9
編譯的目標核心版本:2.6.39
編譯成功後修改核心,新增個系統呼叫,並重新編譯核心,編寫c程式,呼叫自己新增的系統呼叫
首先編譯核心
2、解壓核心到任意目錄(這裡不用必須解壓到/usr/src/下,linus也說不必那樣做,況且自己也試驗成功)
3、進入核心目錄
4、首先配置make menuconfig配置裁剪核心(如果沒有什麼必要可以複製/boot/config-***,這是現在的核心配置)
cp /boot/config-*** ./.config
5、開始編譯,可以執行make all,當然也可以分步完成
make dep
make clean
make bzimahe
make modules
6、安裝核心驅動
make modules_install
7、安裝核心
make install
8、生成引導映象檔案,並將其複製到/boot目錄下
mkinitramfs -o initrd.img-2.6.39 2.6.39
cp initrd.img-2.6.39
9、最後更新grub
update-grub2
啟動新的核心,成功。
下面是新增系統呼叫。
1、首先開啟檔案./arch/x86/include/asm/unistd_32.h
在最後新增系統呼叫號,如下:
#define __nr_name_to_handle_at 341
#define __nr_open_by_handle_at 342
#define __nr_clock_adjtime 343
#define __nr_syncfs 344
#define __nr_my_call 345 /*this is added by yan,this is a test for system call*/
2、開啟./arch/x86/kernel/syscall_table_32.s
末尾新增系統呼叫的函式位址項,如下:
.long sys_prlimit64 /* 340 */
.long sys_name_to_handle_at
.long sys_open_by_handle_at
.long sys_clock_adjtime
.long sys_syncfs
.long sys_my_call
3、開啟./include/linux/syscalls.h新增系統呼叫函式的宣告
asmlinkage long sys_my_call(int num); /*this is added by yan*/
注意新增位置,因為其中有選擇編譯#ifdef和#ifndef
4、開啟./kernel/sys.c檔案新增
syscall_define1(my_call,int,num)
這函式是巨集定義,在./include/linux/syscalls.h裡。
5、重新編譯核心,這次只需編譯核心,驅動部分沒有改變不用再編譯一遍,以節省時間。
執行make bzimage,然後參考上面的核心編譯步驟即可。
測試**:
#include #include #include #define __nr_my_sys_call 345 int main(void)
編譯執行
結果如下:
Linux核心編譯及新增系統呼叫
1 總體設計思路 系統呼叫的本質是呼叫核心函式,以核心態執行程式。為了在核心態下執行,本實驗針對linux的核心進行修改,增加自定義系統呼叫函式實現使用者態程式對任意程序的nice值進行修改或者讀取來進行測試。2 主要函式的介面設計 核心態程式 syscall define3 mysetnice,p...
Linux編譯核心 4 2 6 並新增系統呼叫
1.檢視系統核心版本 ubuntu 12.04 uname a或者cat proc version 將壓縮包linux 4.2.6.tar.gz 放至 usr src中後解壓 sudo cp linux 4.2.6.tar.gz usr src tar zxvf linux 4.2.6.tar.gz...
核心新增系統呼叫
在 windows 下新增系統呼叫不像 linux 那樣容易,windows 系統呼叫與使用者程式之間還有 ntdll.dll 層,而這一層微軟沒有提供源 但是我們從系統呼叫的實現機制出發,不管是在 linux 還是windows 系統呼叫的實現都是通過中斷來實現的,可以利用中斷的方式呼叫新新增的系...