如何向Linux0 11新增乙個系統呼叫?

2021-10-06 17:49:22 字數 1061 閱讀 4575

我們假設這個呼叫是foo(),返回值型別是void。

linux0.11實現系統呼叫的基本過程如下:

舉例說明:

include/linux/sys.h:

extern

intsys_iam()

;...

, sys_iam}

include/unistd.h:

#define __nr_iam    72

intiam

(const

char

*name)

;

kernel/system_call.s:

nr_system_calls = nr_system_calls+

1

+kernel/who.c:

完成的功能是將字串引數 name 的內容拷貝到核心中儲存下來。要求 name 的長度不能超過 23 個字元。返回值是拷貝的字元數。如果 name 的字元個數超過了 23,則返回 「-1」,並置 errno 為 einval。

#define __library__

#include

#include

#include

#define max_size 23

char username[max_size+1]

;int

sys_iam

(const

char

*name)

makefile:

objs  =..

. who.o..

....

### dependencies:

who.s who.o: who.c .

./include/unistd.h \

../include/

asm/segment.h .

./include/errno.h..

....

從linux0 11看乙個程序的誕生

系統有乙個gdt表。該錶儲存了系統和所有程序的tss和ldt描述符資訊。tss就是我們平時說的程序上下文。每個程序有乙個ldt陣列,裡面儲存了 段和資料段的描述符資訊。首先,從乙個程序的誕生說起。我們知道,通過fork可以建立乙個程序。下面我們來看一下fork的過程都做了什麼事情。先通過find e...

如何新增乙個提醒

下面的說明適合pluto 和 cosmos,在10a1108mp之後的版本上新增乙個提醒。具體步驟如下 1,在 srv reminder type 中新增type 例如 注意,定義的鬧鐘響應完了,需要執行 srv reminder notify finish 來清除定時器。取消alarm,使用srv...

Linux0 11原始碼研讀(1)(一點廢話)

這是第一次寫部落格文章,同時也是第一次在csdn上留下自己的足跡,我希望在大二往後的時間裡,我可以研讀完linux0.11的 同時自己也可以製作乙個簡陋的作業系統,作為研讀 的作業吧。關於linux的 我已經讀了大概1 4左右,從最開始的彙編讀到了c語言 中filesystem的 了,因為我不是順著...