在linux-3.2.11/kernel下建立mysyscall.c檔案,內容如下:
#include asmlinkage long sys_mysyscall(void)
在linux-3.2.11/kernel/makefile中加入:
obj-y += mysyscall.o
在linux-3.2.11/include/linux/syscalls.h中加入:
asmlinkage long sys_mysyscall(void);
在linux-3.2.11/arch/x86/kernel/syscall_table_32.s(如果你編譯的是64位機器則32替換為64)中加入:
.long sys_mysyscall
在linux-3.2.11/arch/x86/ia32/ia32entry.s中加入:.quad sys_mysyscall
在linux-3.2.11/arch/x86/include/asm/unistd_32.h中加入:
#define __nr_mysyscall 349
並將#define nr_syscalls 349
替換為
#define nr_syscalls 350
(這裡根據實際情況,__nr_mysyscall為現有最大值,nr_syscalls加一即可)
重新編譯、安裝、重啟
檢視/proc/kallsyms中是否有mysyscall,如果有,表示符號已經匯出。
編寫測試程式:
#include #include #include #include int main()
編譯執行,輸出0即為正確,-1為錯誤。
若執行正確,用dmesg檢視,末尾有輸出:this is my sys call!
新版Linux核心新增系統呼叫的方法
在linux 3.2.11 kernel下建立mysyscall.c檔案,內容如下 include asmlinkage long sys mysyscall void 在linux 3.2.11 kernel makefile中加入 obj y mysyscall.o 在linux 3.2.11 ...
Linux 核心編譯 新增系統呼叫
主機 ubuntu 11.04 現在核心版本 2.6.38.9 編譯的目標核心版本 2.6.39 編譯成功後修改核心,新增個系統呼叫,並重新編譯核心,編寫c程式,呼叫自己新增的系統呼叫 首先編譯核心 2 解壓核心到任意目錄 這裡不用必須解壓到 usr src 下,linus也說不必那樣做,況且自己也...
核心新增系統呼叫
在 windows 下新增系統呼叫不像 linux 那樣容易,windows 系統呼叫與使用者程式之間還有 ntdll.dll 層,而這一層微軟沒有提供源 但是我們從系統呼叫的實現機制出發,不管是在 linux 還是windows 系統呼叫的實現都是通過中斷來實現的,可以利用中斷的方式呼叫新新增的系...