新增乙個系統呼叫有以下幾個步驟:
1. 在 kernel 的系統呼叫表 sys_call_table 中新增你的系統呼叫入口
根據你用的核心位數(32/64bit) 選擇需要修改的檔案:
arch/mips/kernel/scall32-o32.s ------> 32bit kernel
arch/mips/kernel/scall64-64.s ------> 64bit kernel
64bit核心,如果支援相容32 bit abi (o32, n32 ) 則還需修改 scall64-o32.s 或 scall64-n32.s
以32bit 核心為例,在 arch/mips/kernel/scall32-o32.s 中找到巨集定義
.macro syscalltable/*
系統呼叫號從 4000 開始 */
......
......
sys sys_timerfd 4
sys sys_eventfd 1
sys sys_fallocate 6 /* 4320 */
sys sys_comcat 0
/* 系統呼叫號為 4321 */
.endm
最後加入自定義的系統呼叫 sys_comcat 於 sys_call_table 中, sys 為輔助巨集,呼叫名後的數值 0 指示該系統呼叫所需的引數個數。
只能加在 sys_call_table 的最後,否則會擾亂標準的系統呼叫。
2. 實現系統呼叫
可以在 arch/mips/kernel/syscall.c 中給出乙個實現,如:
a**linkage void
sys_comcat
(void
)3. 修改 include/a**-mips/unistd.h
根據你的核心位和支援的abi版本修改相應的巨集定義,32bit 核心需修改:
#define __nr_linux_syscalls 320 ---------> 321 (the number of linux syscalls)
#define __nr_o32_linux_syscalls 320 ---------> 321 (the number of linux o32 syscalls)
相應的在其上的巨集集的最後加入:
.......
#define __nr_timerfd (__nr_linux + 318)
#define __nr_eventfd (__nr_linux + 319)
#define __nr_fallocate (__nr_linux + 320)
#define __nr_comcat (__nr_linux + 321)
4. 測試新的系統呼叫sys_comcat
用重新編譯後的核心啟動,如下程式測試之:
.text
.globl main
.ent main
main:
li $2,
4321 /* sys_comcat 的系統的呼叫號 */
syscall
.end main
其中 mips 下系統呼叫的約定為:
v0: 用於置系統呼叫號
a0~a3: 置前四個引數,後面的引數用棧傳
syscall 系統呼叫觸發指令
編譯 gcc cat.s -o cat
執行 ./cat
正確的話應有如下輸出:
message from syslogd@localhost at wed aug 29 13:15:37 2007 ...
localhost kernel: this's comcat syscall
系統的聯調
公司的票務系統都是已經做好的了,前天下午才拿到的程式,還沒有完全明白程式。昨天又要到門禁的廠商來對門禁的聯調。門禁廠商提供了他們門禁的api函式的dll和乙個dll的相關的說明數。由於公司的票務系統是vc開發的,上層也要求在原有 的系統上作改動,加上門禁即可。但是門禁廠商的dll是在delphi下開...
Winform 系統調優
小白鼠條件 以常見的樹形結構樹為例 有兩張結構相同的表table1 1w資料 table2 2w資料 需要對比資料差異。表結構如下 id parent id,col1,col2,col3 常規做法是 常規思想 迴圈table1,一 充分利用快取效果 作業系統的快取記憶體 磁碟快取等等,都是利用混存技...
linux系統調優
cpu 資源的調優 調整nice值改變程序優先順序 1.nice 概述 在 linux 系統中,nice 值的範圍從 20 到 19 不同系統的值範圍是不一樣的 正值表示低優先順序,負值表示高優先順序,值為零則表示不會調整該程序的優先順序。具有最高優先順序的程式,其 nice 值最低,所以在 lin...