Linux嵌入式 核心 系統呼叫

2021-06-17 21:17:27 字數 1397 閱讀 9315

1. 系統呼叫 定義

linux核心中設定了一組用於實現各種系統功能的子程式,稱為系統呼叫。使用者可以通過系統呼叫命令在自己的應用程式中呼叫它們。

系統呼叫和普通的函式呼叫非常相似,區別僅僅在於,系統呼叫由作業系統核心實現,執行於核心態;而普通的函式呼叫由函式庫或使用者自己提供,執行於使用者態。

2. 系統呼叫原理

#include

main()

/* 從格林尼治時間2023年1月1日0:00開始到現在的秒數。 */

工作原理 :一般情況下,使用者程序是不能訪問核心的。它既不能訪問核心所在的記憶體空間,也不能呼叫核心中的函式。系統呼叫是乙個例外。其原理是程序先用適當的值填充暫存器,然後呼叫乙個特殊的指令,這個指令會讓使用者程式跳轉到乙個事先定義好的核心中的乙個位置:v在intel cpu中,這個指令由中斷0x80實現。在arm中,這個指令swi。

3. 實現系統呼叫

向核心中新增新的系統呼叫,需要執行 3 個步驟:

1. 核心**kernel/sys.c中 新增新的核心函式

2. 更新標頭檔案unistd.h,在arch/arm/include/asm/unistd.h 中新增編號, #define __nr_add (__nr_syscall_base+361)

3. 針對這個新函式更新系統呼叫表,arch/arm/kernel/calls.s 指向新的系統呼叫函式:call(sys_add);

重新編譯核心 使用!!

示例程式:

1. 在kernel/sys.c中新增函式:

asmlinkage int sysmul(int a, int b)

/* asmlinkage:使用棧傳遞引數 */

2. 在arch/arm/include/asm/unistd.h中新增如下**: #define __nr_sysmul 361

3.在arch/arm/kernel/calls.s中新增**,指向新實現的系統呼叫函式:call(sysmul)

4. 使用系統呼叫

#include

#include

main()

嵌入式Linux系統移植(Linux核心初步分析)

嵌入式linux系統移植 linux核心初步分析 核心概述 linux是類似unix的作業系統,而linux系統的核心稱為linux kernel,這個作業系統的核心部分提供了對硬體的統一介面。核心是在引導時裝入的程式。核心識別硬體,初始化啟動指令碼,並且執行網路和終端守護程式 當啟動完畢之後,核心...

嵌入式Linux系統移植(Linux核心配置)

嵌入式linux系統移植 linux核心配置 linux移植是把linux作業系統針對具體的目標平台做必要改寫之後,安裝到該目標平台使其正確的執行起來。基本內容 1.獲取某版本的linux核心原始碼,根據我們的具體目標平台對這原始碼進行必要的改寫 主要是修改體系結構相關部分 2.新增一些外設的驅動,...

Linux核心系統呼叫的新增

本文通過自身實踐,介紹了在linux下為核心新增系統呼叫的簡單例項。系統呼叫 作業系統為使用者態程序與硬體及核心資源進行互動提供的一組介面 系統呼叫可被看成是乙個核心與使用者空間程式互動的介面。優點 極大的提高了系統的安全性 使使用者程式具有可移植性。系統呼叫與核心函式 核心函式在形式上與普通函式一...