ARM Linux下新增自定義系統呼叫

2021-05-25 02:33:55 字數 2104 閱讀 1861

本文基於公司

uclinux

核心,詳細講述

3代終端

gpioctrl

的原理及應用。

arm linux

的系統中斷採用產生軟中斷,查詢系統呼叫表,呼叫系統呼叫函式的方式實現系統呼叫。

先講述,如何去查詢

gpioctrl

函式的實現。

1.通過查詢,找到函式定義。

在sg2klib.c

裡,有如下定義:

_syscall3(int,gpioctrl, int, op, int, addr, int, value)

_syscall3

是乙個巨集定義,如下:

#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3)/

type name(type1 arg1,type2 arg2,type3 arg3)

這個巨集定義,用來定義乙個內聯彙編的函式。名稱為

name

,傳入3

個引數arg1

、arg2

、arg3等3

個引數,並返回

type

型別資料。

說明:%0

:即__res

的引用%1、%2

、%3:輸入運算元,

arg1

、arg2

、arg3

的引用第乙個冒號:輸出運算元,「

=r」約束操作束,說明運算元是輸出運算元。

第二個冒號:輸入運算元,「

r」指定將運算元儲存在暫存器中。

第三個冒號:告訴編譯器將在內聯彙編中修改

"r0","r1","r2","lr"

的值,這樣

gcc

就不使用該暫存器儲存任何其它的值。

通過上述巨集定義,即可定義乙個函式

int gpioctrl(int op, int addr, int value);

函式功能是產生軟中斷,呼叫相應系統呼叫函式,並傳入引數r0、

r1、r2,返回值r0。

注意__syscall(name)

、__syscall_return

也是巨集定義,實現乙個軟中斷,和返回函式返回值。

/* unistd.h */

#define __sys2(x) #x

#define __sys1(x) __sys2(x)

#ifndef __syscall

#define __syscall(name) "swi/t" __sys1(__nr_##name) "/n/t"

#endif

#define __syscall_return(type, res)/

do /

return (type) (res);/

} while (0)

產生的系統呼叫表

定義在entry_common.s

,**包含在

calls.s

。/* entry_common.s */

.typesys_call_table, #object

entry(sys_call_table)

#include "calls.s"

/* calls.s */

.longsymbol_name(sys_gpioctrl) 2.

真正的函式實現

/* value :

引數位址*/

asmlinkage int sys_gpioctrl( int op, int addr, int value)

return 0; }

3.函式說明

系統呼叫執行於核心空間,使用者空間程式通過系統呼叫傳入操作

opt、位址

addr

、值value

,進行暫存器的讀取、設定等操作。

#define op_get0/*

獲取*/

#define op_set1/*

設定*/

#define op_err2/*

異或*/

#define op_orr3

/* 或*/

#define op_and4/* 與*/

arm linux3 0自定義系統呼叫

硬體 訊為4412核心板,os 訊為linux3.0.15 編譯環境 ubuntu1404 編譯器 訊為提供的arm 2009q3 gcc交叉編譯。參考一文。增加加減乘除等系統呼叫,並測試系統呼叫和使用者呼叫的效能差異。1 新增系統呼叫函式 在 kernel sys.c內新增 sys add sel...

android自定義控制項新增自定義屬性

1 如果是自定義控制項,請在style.xml中或attrs.xml中宣告屬性 attr declare styleable 2 在theme中使用自定義的屬性,可以再多個主題中定義不同的屬性值 customize your theme here.color colorprimaryitem col...

新增自定義模板

模板 當增加一些,固定,特有組伺服器的時候,增加一些特定的監控專案,這些專案就可以加到自定義的模板裡,再將機器加到這個模板裡。每次增加類似的機器,就可以加到這個模板裡。思路 建立模板 名字自定義 模板要歸屬到模板組裡。也可以鏈結其他的模板。建立出的模板,所有的都為空。可以增加一些監控專案。可以在其他...