MIPS Linux 下新增系統呼叫

2021-04-13 08:42:50 字數 2062 閱讀 9970

新增乙個系統呼叫有以下幾個步驟:

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...