more: Jollen 的 Embedded Linux 教育訓練

« September 2006 | (回到Blog入口) | November 2006 »

October 2006 歸檔

October 2, 2006

嵌入式 Linux 應用: Mesh Networking 演講稿 (精簡版部份內容)

#2: 今天 Jollen 要介紹的題目是 "Mesh Router",實作平臺是 Kendin KS8695P 與 embedded Linux 系統。我們在 Kendin KS8695P (ARM9) 的平臺上嵌入 embedded Linux 系統,透過此平臺與 mesh wireless 的 embedded Linux 系統,將能實作出 mesh networking 的系統。

今天我們的重點 (Lecture 8) 是介紹 open source 解決方案與 mesh networking;同時我們也會做一個簡單的 demo。

簡報下載

#3: mesh networking 可以取代 Wi-Fi "hot spots" 的架構,並且簡省無線網路的佈署成本,由於我們以現有的 802.11a+g 的無線網卡來實作,因此可以使用許多現成的 open source 軟體來配合。以藉此達成單點對多點 (point to multipoint)、多點對多點 (multipoint to multipoint) 或是單點對單點 (point-to-point) 的架構實作。

#6: 這是我們所期望做到的規格 (specification),很有趣的是,開放源碼套件居然能滿足我們所開出的所有規格,這意謂我們的 project 需要自己開發軟體的機會幾乎是 0%;事實上,我們 90% 以上的工作都是在做系統整合 (Linux administration) 和 UI (web-based) 的開發。

#7: 這是一個實際 (real-world) 的案例,讓我們來說明我們倒底在 root filesystem 裡放了哪些東西,以及「如何加入」這些東西。

#8: 要 build 一個基本的 wireless 嵌入式 Linux 系統 (root filesystem),我們會需要這些基本的開放源碼套件,另外由於 zeroconf 遭遇到專利問題,因此我們並沒有在這份簡單裡展示 zeroconf IP 的功能。

#9: 再來是 Linux 的無線網路解決方案,在驅動程式方面,我們使用的 Atheros 與 Prism 晶片都有支援。在 user application 方面,wireless routing protocol 的解決方案是 quagga,這是一個相當知名的 open source 專案。另外,wireless tools 是必備的,因此我們要透過它來設定無線網路。

#16: 這是我們利用 iwconfig 在 Kendin 平臺上啟動無線網路的畫面,ath0 介面是 Atheros 網卡 (802.11g),eth2 是 Intersil 網路 (802.11b/g)。

#17: 我們把 ath0 設定成 "ad-hoc" 模式。

#18: 利用 'iwlist' 指令偵測 channel。

#19: 利用 'iwlist' 掃描 eth2 介面。

ps. 不知道大家還想要哪一頁的詳細講稿 @@"

October 3, 2006

Library Dependency 的議題要點

在建立 embedded Linux 系統 (root filesystem) 時,程式庫相依 (library dependencies) 的議題是相當重要的一個題目。

當 root filesystem 缺少必要的 library 時,程式當然是無法執行的,甚致系統也會無法順利啟動。依據 Jollen 在「Embedded Linux / ARM9 開發實戰」的課程所提的幾個觀念,我們可以了解到在建構 embedded Linux 系統時,應具備的正確觀念與基本能力。

我們把「如何找出所需的 library」方法整理出 3 項的基本要點,依照這 3 種基本款來加入 library 將能解決幾乎所有的 library dependency 問題,這 3 種項基本要點為:

(1) 先利用 cross toolchain 的 objdump 觀察「NEEDED」的項目,加入 library。
(2) 再檢查這些 library 是否相依其它 library。
(3) 最後要檢視應用程式是否使用到需要特定 library 的「service」。

要點 1. 跟 2. 對大家來說沒有什麼問題,要點 3. 在我們的 training 課程裡,我們以建構 thttpd (embedded Web server) 的實際案例來做講解。

關於建構 thttpd 的案例

thttpd 使用到 NSS (Name Service Switch),因此若沒有將 libnss_SERVICE.so 加到 root filesystem,thttpd 在執行時可能會遇到一些奇怪的問題。舉個例子,當 thttpd 透過 /etc/passwd 去尋找 (查詢) UNIX user 時,會用到 libnss_files.so (不讀 /etc/shadow),因此會看到以下的錯誤訊息:

unknown user - root

出現這個錯誤的原因是 thttpd 讀不到 'root' 使用者,要深入探討這個問題的原理,必須從以下的程式碼片斷開始探討:

    403     /* If we're root and we're going to become another user, get the uid        /gid
    404     ** now.
    405     */
    406     if ( getuid() == 0 )
    407         {
    408         pwd = getpwnam( user );
    409         if ( pwd == (struct passwd*) 0 )
    410             {
    411             syslog( LOG_CRIT, "unknown user - '%.80s'", user );
    412             (void) fprintf( stderr, "%s: unknown user - '%s'\n", argv0,         user );
    413             exit( 1 );
    414             }
    415         uid = pwd->pw_uid;
    416         gid = pwd->pw_gid;
    417         }

這段程式碼是 thttpd 2.25b 的程式片斷,位於 thttpd.c 的 main() 函數裡。關於 libnss_SERVICE.so 的議題,Jollen 打算另外再做討論,因為還會與 libc 有關係。

在這裡我們由系統建構的角度來看這個問題。因為我們已經習慣用 objdump 來觀察程式的相依 library,所以當 objdump 的畫面跟我們預期的不同時,經常一時無法反應過來。例如,以下的訊息是我們所「預期」的:

# /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-objdump -x thttpd|more
...
Dynamic Section:
  NEEDED      libcrypt.so.1
  NEEDED      libnss_files.so.2
  NEEDED      libc.so.6
...

但是實際的訊息卻是像這樣的:

# /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-objdump -x thttpd|more
...
Dynamic Section:
  NEEDED      libcrypt.so.1
  NEEDED      libc.so.6
...

我們可以用一知半解的思考邏輯來解決問題:thttpd 呼叫到 getpwnam() 函數,此函數由 libnss_compat 提供,因此解決方案是把 libnss_files.so 加到 root filesystem 裡即可。

且慢!前面才講到 libnss_compat,怎麼後面是把 libnss_files 加到 root filesystem?是這樣的,libnss_compat 用來讀 /etc/shadow,但是現在我們只需要由 /etc/passwd 讀 Unix user,所以使用 libnss_files.so 就行了。

執行 thttpd 的話,再加上指定 username 的參數來執行:

# thttpd -p 80 -d /var/www -u root

libnss_SERVICE.so 是包含在 glibc 裡的程式庫,因此可以直接由 cross toolchain 裡取得,不必再另行建置。

有關 NSS (Name Service Switch) 可參考以下網頁:

Linux / Unix Command: nsswitch.conf - http://linux.about.com/od/commands/l/blcmdl5_nsswitc.htm

其它網路資源:

http://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html
http://mirrors.usc.edu/pub/gnu/Manuals/glibc-2.2.3/html_chapter/libc_28.html

此處我們以「service」的角度來探討這個問題:因為 thttpd 使用到 Name Service Switch,所以需要加入 libnss_SERVICE.so。另外一種探討的角度是:由 programming 的角度來思考,大家可以試著去研究這個問題,還挺好玩的!

附帶一提,如果要讀 shadow passwd 的話,是使用 libnss_compat.so。

Name Service Switch 程式設計:基本觀念

有些 C 函數的運作會依據 localhost 的設定而有不同行為,而這些設定的做法是透過「設定檔」(eg. /etc/services) 來實現。目前在 GNU/Linux 系統底下,可以看到許多這樣的設定檔,我們把這些設定檔稱為 system database,這些資料庫主要是以文字檔方式儲存重要的系統資訊,例如: /etc/passwd 存放使用者名稱、/etc/services 存放網路服務的通訊埠 (port) 設定等等。

GNU C library 實作的 "Name Service Switch" 函數群便是用來讀取所有 system database 內容的介面!

System Database

NSS 支援 11 種資料庫名稱:aliases、ethers、group、hosts、netgroup、networks、protocols、passwd、rpc、services 與 shadow。分別說明如下。

aliases: Mail 別名

ethers: Ethernet 號碼

group: 使用者群組資料庫,即 /etc/group

hosts: Host names 與 IP 對應資料庫,即 /etc/hosts 或是利用 name server 轉換

netgroup: "hostname username domainname" 的組合稱為 netgroup

networks: 即 /etc/networks

protocols: 通訊協定資料庫,即 /etc/protocols

passwd: 使用者名稱資料庫,即 /etc/passwd

rpc: Remote procedure call 資料庫

services: 即 /etc/services 資料庫

shadow: 即 /etc/shadow 檔

NSS Service 與 Lookup

NSS 支援 7 種服務類型,說明如下。

1. nisplus (or nis+): 使用 NIS+ (NIS version 3) 服務
2, nis (or yp): 使用 NIS (NIS version 2) 服務 (也叫 YP, YellowPage)
3. dns: 使用 DNS (Domain Name Service) 服務
4. files: 使用一般的檔案讀取服務
5. db: 使用 database (.db) 檔案讀取服務
6. compat: 使用 NIS compat mode 服務
7. hesiod: 使用 Hesiod 服務做 user lookups

GNU 的實作是把每一個服務 (service) 實作成不同的 module (shared library),因此可以在 GNU/Linux 系統底下找到這些相對應的 shared libraries:

libnss_nisplus.so.2
libnss_nis.so.2
libnss_dns.so.2
libnss_files.so.2
libnss_compat.so.2
libnss_hesiod.so.2

不過其實還有下面 3 個:

/lib/libnss_ldap.so.2
/lib/libnss_winbind.so.2
/lib/libnss_wins.so.2

GNU 的 NSS module 是以 libnss_SERVICE.so.2 來命名。

在這些 module (library) 裡的函數,是無法讓程式直接使用的,因此了解這些 module 裡的函數如何被使用 (呼叫) 是一個重要且有趣的題目。

查詢前面所提 11 種資料庫資訊的動作稱為 lookup,lookup 的方法便是 NSS 的服務類型 (NSS service),也就是我們可以利用以上共 7 種方式來查詢 system database;不過,以 files、db、nis 與 nisplus 這 4 種方式是比較常用的。

由此可知,不同的 system database 可以用不同的服務來做查詢。因此,系統管理員必須告訴 NSS,我們想要他利用哪一種服務類型,來查詢 (lookup) 指定的 system database。這個動作的管理方式便是透過 /etc/nsswitch.conf 設定檔來完成。

/etc/nsswitch.conf

看一下 glibc-2.3.3 預設定 nsswitch.conf 設定檔內容如下:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
#
passwd:         db files
group:          db files
shadow:         db files
hosts:          files dns
networks:       files dns
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       db files

這樣其實就很清楚了,例如:passwd 資料庫 (/etc/passwd) 的讀取方式 (lookup service) 有 db/files 二種。以 embedded Linux 系統來說,我們會這樣設定:

passwd: files

也就是說,直接以檔案讀取方式來查詢 /etc/passwd。那麼,之前提過的 embedded Linux 系統建置之 thttpd 個案分析,為何需要 libnss_files.so.2 檔案,觀念就很清楚了。

此外,大家也可以了解一下 red hat linux 或其它 Linux distribution 的 nsswitch.conf 設定佈署方式。

這個部份的文件主要是 glibc 的手冊,大家可參考 http://www.gnu.org/software/libc/manual/html_node/Name-Service-Switch.html#Name-Service-Switch

-- jollen
作者/陳俊宏
http://www.jollen.org

October 4, 2006

Name Service Switch 程式設計:原理探討

我們以一個 'gethostbyname' 的例子來說明 NSS 的運作原理

假設我們想要查詢網路上某台 host 的 IP 位址,那麼 GNU C Library 手冊告訴我們說,有一個 gethostbyname() 的函數可以使用。

不過,在真正寫 code 時,其實並不建議呼叫此函數,在說明原因前,有一句必名言是大家一定要銘記在心的:

Multi-threaded safe code must be reentrant.

由於 gethostbyname() 並非 reentrant 的版本;所以,呼叫 gethostbyname() 並不是正確寫法,我們必須改成呼叫 reentrant 的版本:gethostbyname_r()。

NSS module 裡 non-reentrant 的函數,是不能使用在 multi-threaded applications 的設計上的,但是根據 NSS manual 的解釋,其實 gethostbyename() 與 gethostbyname_r() 都會呼叫到 NSS module 裡相同的函數,原因是 NSS module 只提供 reentrant 版本的 gethostbyname() 服務。

接下來讓我們來討論,gethostbyname() 與 gethostbyname_r() 倒底會呼叫到 NSS module 裡的哪一個函數。

_nss_service_function

當我們呼叫 gethostbyname_r() 函數時 (或 gethostbyname),假設我們在 /etc/nsswitch.conf 裡有一行這樣的設定:

hosts: files

那麼根據之前 Jollen 在 Blog 裡的說明,此時會使用到的 NSS module 會是 libnss_files.so.2,並且以下的 routine 會被呼叫:

_nss_files_gethostbyname_r

查看一下:

# nm /lib/libnss_files.so.2 |egrep "gethostbyname"
00004320 T _nss_files_gethostbyname2_r
00003ba0 T _nss_files_gethostbyname_r

現在我們終於知道了,當我們呼叫查詢的函數 'function' 時,在 libnss_SERVICE.so.2 裡的相對應函數便會被呼叫,此函數的 naming 方式為:

_nss_service_function

另外,NSS module 僅包含 reentrant 的版本。

最後我們要講的是,gethostbyename() 與 gethostbyname_r(),或是之前提到的 getpwnam() 都是實作在 libc.so.6 裡的。For example:

# nm /lib/libc.so.6 |egrep "T.gethostbyname"
000f72b0 T gethostbyname
000f7480 T gethostbyname2
000f78c0 T gethostbyname2_r@GLIBC_2.0
000f7660 T gethostbyname2_r@@GLIBC_2.1.2
000f7b80 T gethostbyname_r@GLIBC_2.0
000f7930 T gethostbyname_r@@GLIBC_2.1.2

# nm /lib/libc.so.6 |egrep "T.getpwnam"
000acf50 T getpwnam
000ad5c0 T getpwnam_r@GLIBC_2.0
000ad440 T getpwnam_r@@GLIBC_2.1.2

這就是為什麼我們在 ldd (or objdump) 時,都看不到 libnss_SERVICE.so.6 的道理.當我們做查詢時,NSS 才去載入對應的 service module。

October 7, 2006

Linux 2.4.29 System Calls Table (LSCT)

以下是 Linux 2.4.29 的 system call 整理表格,提供給「Embedded Linux 嵌入式系統實作演練」的讀者您做參考。這是一張很方便的表格,可以取代 unistd.h 與 "man"。

這張工具表格可以幫助我們:

1. 最主要的目的:當然是研究作業系統,了解 Linux 提供的 sytsem call service。
2. Trace kernel.
3. Writing shellcode.

供您參考 :)
Linux (kernel 2.4.29) System Call Table

1. sys_ni_syscall 為保留號碼
2. 更新日期: 2006/10/07
3. 其實與 linux 2.4.22 是相同的,因此亦可參考我們之前 (3 年前) 整理的 LSCT。

no Syscall Prototype decl.
0 sys_ni_syscall long sys_ni_syscall(void) 
1 sys_exit long sys_exit(int error_code) 
2 sys_fork int sys_fork(struct pt_regs regs) 
3 sys_read ssize_t sys_read(unsigned int fd, char *buf, size_t count) 
4 sys_write ssize_t sys_write(unsigned int fd, const char *buf, size_t count) 
5 sys_open long sys_open(const char *filename, int flags, int mode) 
6 sys_close long sys_close(unsigned int fd) 
7 sys_waitpid long sys_waitpid(pid_t pid, unsigned int *stat_addr, int options) 
8 sys_creat long sys_creat(const char *pathname, int mode) 
9 sys_link long sys_link(const char *oldname, const char *newname) 
10 sys_unlink long sys_unlink(const char *pathname) 
11 sys_execve int sys_execve(struct pt_regs regs) 
12 sys_chdir long sys_chdir(const char *filename) 
13 sys_time long sys_time(int *tloc) 
14 sys_mknod long sys_mknod(const char *filename, int mode, dev_t dev) 
15 sys_chmod long sys_chmod(const char *filename, mode_t mode) 
16 sys_lchown16 long sys_lchown16(const char *filename, old_uid_t user, old_gid_t group) 
17 sys_ni_syscall long sys_ni_syscall(void) 
18 sys_stat long sys_stat(char *filename, struct __old_kernel_stat *statbuf) 
19 sys_lseek off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin) 
20 sys_getpid long sys_getpid(void) 
21 sys_mount long sys_mount(char *dev_name, char *dir_name, char *type, unsigned long flags, void *data) 
22 sys_oldumount long sys_oldumount(char *name) 
23 sys_setuid16 long sys_setuid16(old_uid_t uid) 
24 sys_getuid16 long sys_getuid16(void) 
25 sys_stime long sys_stime(int *tptr) 
26 sys_ptrace int sys_ptrace(long request, long pid, long addr, long data) 
27 sys_alarm unsigned long sys_alarm(unsigned int seconds) 
28 sys_fstat long sys_fstat(unsigned int fd, struct __old_kernel_stat *statbuf) 
29 sys_pause int sys_pause(void) 
30 sys_utime long sys_utime(char *filename, struct utimbuf *times) 
31 sys_ni_syscall long sys_ni_syscall(void) 
32 sys_ni_syscall long sys_ni_syscall(void) 
33 sys_access long sys_access(const char *filename, int mode) 
34 sys_nice long sys_nice(int increment) 
35 sys_ni_syscall long sys_ni_syscall(void) 
36 sys_sync long sys_sync(void) 
37 sys_kill long sys_kill(int pid, int sig) 
38 sys_rename long sys_rename(const char *oldname, const char *newname) 
39 sys_mkdir long sys_mkdir(const char *pathname, int mode) 
40 sys_rmdir long sys_rmdir(const char *pathname) 
41 sys_dup long sys_dup(unsigned int fildes) 
42 sys_pipe int sys_pipe(unsigned long *fildes) 
43 sys_times long sys_times(struct tms *tbuf) 
44 sys_ni_syscall long sys_ni_syscall(void) 
45 sys_brk unsigned long sys_brk(unsigned long brk) 
46 sys_setgid16 long sys_setgid16(old_gid_t gid) 
47 sys_getgid16 long sys_getgid16(void) 
48 sys_signal unsigned long sys_signal(int sig, __sighandler_t handler) 
49 sys_geteuid16 long sys_geteuid16(void) 
50 sys_getegid16 long sys_getegid16(void) 
51 sys_acct long sys_acct(const char *name) 
52 sys_umount long sys_umount(char *name, int flags) 
53 sys_ni_syscall long sys_ni_syscall(void) 
54 sys_ioctl long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) 
55 sys_fcntl long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) 
56 sys_ni_syscall long sys_ni_syscall(void) 
57 sys_setpgid long sys_setpgid(pid_t pid, pid_t pgid) 
58 sys_ni_syscall long sys_ni_syscall(void) 
59 sys_olduname int sys_olduname(struct oldold_utsname *name) 
60 sys_umask long sys_umask(int mask) 
61 sys_chroot long sys_chroot(const char *filename) 
62 sys_ustat long sys_ustat(dev_t dev, struct ustat *ubuf) 
63 sys_dup2 long sys_dup2(unsigned int oldfd, unsigned int newfd) 
64 sys_getppid long sys_getppid(void) 
65 sys_getpgrp long sys_getpgrp(void) 
66 sys_setsid long sys_setsid(void) 
67 sys_sigaction int sys_sigaction(int sig, const struct old_sigaction *act, struct old_sigaction *oact) 
68 sys_sgetmask long sys_sgetmask(void) 
69 sys_ssetmask long sys_ssetmask(int newmask) 
70 sys_setreuid16 long sys_setreuid16(old_uid_t ruid, old_uid_t euid) 
71 sys_setregid16 long sys_setregid16(old_gid_t rgid, old_gid_t egid) 
72 sys_sigsuspend int sys_sigsuspend(int history0, int history1, old_sigset_t mask) 
73 sys_sigpending long sys_sigpending(old_sigset_t * set) 
74 sys_sethostname long sys_sethostname(char *name, int len) 
75 sys_setrlimit long sys_setrlimit(unsigned int resource, struct rlimit *rlim) 
76 sys_old_getrlimit long sys_old_getrlimit(unsigned int resource, struct rlimit *rlim) 
77 sys_getrusage long sys_getrusage(int who, struct rusage *ru) 
78 sys_gettimeofday long sys_gettimeofday(struct timeval *tv, struct timezone *tz) 
79 sys_settimeofday long sys_settimeofday(struct timeval *tv, struct timezone *tz) 
80 sys_getgroups16 long sys_getgroups16(int gidsetsize, old_gid_t * grouplist) 
81 sys_setgroups16 long sys_setgroups16(int gidsetsize, old_gid_t * grouplist) 
82 old_select int old_select(struct sel_arg_struct *arg) 
83 sys_symlink long sys_symlink(const char *oldname, const char *newname) 
84 sys_lstat long sys_lstat(char *filename, struct __old_kernel_stat *statbuf) 
85 sys_readlink long sys_readlink(const char *path, char *buf, int bufsiz) 
86 sys_uselib long sys_uselib(const char *library) 
87 sys_swapon long sys_swapon(const char *specialfile, int swap_flags) 
88 sys_reboot long sys_reboot(int magic1, int magic2, unsigned int cmd, void *arg) 
89 old_readdir int old_readdir(unsigned int fd, void *dirent, unsigned int count) 
90 old_mmap int old_mmap(struct mmap_arg_struct *arg) 
91 sys_munmap long sys_munmap(unsigned long addr, size_t len) 
92 sys_truncate long sys_truncate(const char *path, unsigned long length) 
93 sys_ftruncate long sys_ftruncate(unsigned int fd, unsigned long length) 
94 sys_fchmod long sys_fchmod(unsigned int fd, mode_t mode) 
95 sys_fchown16 long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) 
96 sys_getpriority long sys_getpriority(int which, int who) 
97 sys_setpriority long sys_setpriority(int which, int who, int niceval) 
98 sys_ni_syscall long sys_ni_syscall(void) 
99 sys_statfs long sys_statfs(const char *path, struct statfs *buf) 
100 sys_fstatfs long sys_fstatfs(unsigned int fd, struct statfs *buf) 
101 sys_ioperm int sys_ioperm(unsigned long from, unsigned long num, int turn_on) 
102 sys_socketcall long sys_socketcall(int call, unsigned long *args) 
103 sys_syslog long sys_syslog(int type, char *buf, int len) 
104 sys_setitimer long sys_setitimer(int which, struct itimerval *value, struct itimerval *ovalue) 
105 sys_getitimer long sys_getitimer(int which, struct itimerval *value) 
106 sys_newstat long sys_newstat(char *filename, struct stat *statbuf) 
107 sys_newlstat long sys_newlstat(char *filename, struct stat *statbuf) 
108 sys_newfstat long sys_newfstat(unsigned int fd, struct stat *statbuf) 
109 sys_uname int sys_uname(struct old_utsname *name) 
110 sys_iopl int sys_iopl(unsigned long unused) 
111 sys_vhangup long sys_vhangup(void) 
112 sys_ni_syscall long sys_ni_syscall(void) 
113 sys_vm86old int sys_vm86old(struct vm86_struct *v86) 
114 sys_wait4 long sys_wait4(pid_t pid, unsigned int *stat_addr, int options, struct rusage *ru) 
115 sys_swapoff long sys_swapoff(const char *specialfile) 
116 sys_sysinfo long sys_sysinfo(struct sysinfo *info) 
117 sys_ipc int sys_ipc(uint call, int first, int second, int third, void *ptr, long fifth) 
118 sys_fsync long sys_fsync(unsigned int fd) 
119 sys_sigreturn int sys_sigreturn(unsigned long __unused) 
120 sys_clone int sys_clone(struct pt_regs regs) 
121 sys_setdomainname long sys_setdomainname(char *name, int len) 
122 sys_newuname long sys_newuname(struct new_utsname *name) 
123 sys_modify_ldt int sys_modify_ldt(int func, void *ptr, unsigned long bytecount) 
124 sys_adjtimex long sys_adjtimex(struct timex *txc_p) 
125 sys_mprotect long sys_mprotect(unsigned long start, size_t len, unsigned long prot) 
126 sys_sigprocmask long sys_sigprocmask(int how, old_sigset_t * set, old_sigset_t * oset) 
127 sys_create_module unsigned long sys_create_module(const char *name_user, size_t size) 
128 sys_init_module long sys_init_module(const char *name_user, struct module *mod_user) 
129 sys_delete_module long sys_delete_module(const char *name_user) 
130 sys_get_kernel_syms long sys_get_kernel_syms(struct kernel_sym *table) 
131 sys_quotactl long sys_quotactl(unsigned int cmd, const char *special, qid_t id, caddr_t addr) 
132 sys_getpgid long sys_getpgid(pid_t pid) 
133 sys_fchdir long sys_fchdir(unsigned int fd) 
134 sys_bdflush long sys_bdflush(int func, long data) 
135 sys_sysfs long sys_sysfs(int option, unsigned long arg1, unsigned long arg2) 
136 sys_personality long sys_personality(u_long personality) 
137 sys_ni_syscall long sys_ni_syscall(void) 
138 sys_setfsuid16 long sys_setfsuid16(old_uid_t uid) 
139 sys_setfsgid16 long sys_setfsgid16(old_gid_t gid) 
140 sys_llseek long sys_llseek(unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t * result, unsigned int origin) 
141 sys_getdents long sys_getdents(unsigned int fd, void *dirent, unsigned int count) 
142 sys_select long sys_select(int n, fd_set * inp, fd_set * outp, fd_set * exp, struct timeval *tvp) 
143 sys_flock long sys_flock(unsigned int fd, unsigned int cmd) 
144 sys_msync long sys_msync(unsigned long start, size_t len, int flags) 
145 sys_readv ssize_t sys_readv(unsigned long fd, const struct iovec * vector, unsigned long count) 
146 sys_writev ssize_t sys_writev(unsigned long fd, const struct iovec * vector, unsigned long count) 
147 sys_getsid long sys_getsid(pid_t pid) 
148 sys_fdatasync long sys_fdatasync(unsigned int fd) 
149 sys_sysctl long sys_sysctl(struct __sysctl_args *args) 
150 sys_mlock long sys_mlock(unsigned long start, size_t len) 
151 sys_munlock long sys_munlock(unsigned long start, size_t len) 
152 sys_mlockall long sys_mlockall(int flags) 
153 sys_munlockall long sys_munlockall(void) 
154 sys_sched_setparam long sys_sched_setparam(pid_t pid, struct sched_param *param) 
155 sys_sched_getparam long sys_sched_getparam(pid_t pid, struct sched_param *param) 
156 sys_sched_setscheduler long sys_sched_setscheduler(pid_t pid, int policy, struct sched_param *param) 
157 sys_sched_getscheduler long sys_sched_getscheduler(pid_t pid) 
158 sys_sched_yield long sys_sched_yield(void) 
159 sys_sched_get_priority_max long sys_sched_get_priority_max(int policy) 
160 sys_sched_get_priority_min long sys_sched_get_priority_min(int policy) 
161 sys_sched_rr_get_interval long sys_sched_rr_get_interval(pid_t pid, struct timespec *interval) 
162 sys_nanosleep long sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp) 
163 sys_mremap unsigned long sys_mremap(unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr) 
164 sys_setresuid16 long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) 
165 sys_getresuid16 long sys_getresuid16(old_uid_t * ruid, old_uid_t * euid, old_uid_t * suid) 
166 sys_vm86 int sys_vm86(unsigned long subfunction, struct vm86plus_struct *v86) 
167 sys_query_module long sys_query_module(const char *name_user, int which, char *buf, size_t bufsize, size_t * ret) 
168 sys_poll long sys_poll(struct pollfd *ufds, unsigned int nfds, long timeout) 
169 sys_nfsservctl  
170 sys_setresgid16 long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) 
171 sys_getresgid16 long sys_getresgid16(old_gid_t * rgid, old_gid_t * egid, old_gid_t * sgid) 
172 sys_prctl long sys_prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) 
173 sys_rt_sigreturn int sys_rt_sigreturn(unsigned long __unused) 
174 sys_rt_sigaction long sys_rt_sigaction(int sig, const struct sigaction *act, struct sigaction *oact, size_t sigsetsize) 
175 sys_rt_sigprocmask long sys_rt_sigprocmask(int how, sigset_t * set, sigset_t * oset, size_t sigsetsize) 
176 sys_rt_sigpending long sys_rt_sigpending(sigset_t * set, size_t sigsetsize) 
177 sys_rt_sigtimedwait long sys_rt_sigtimedwait(const sigset_t * uthese, siginfo_t * uinfo, const struct timespec *uts, size_t sigsetsize) 
178 sys_rt_sigqueueinfo long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t * uinfo) 
179 sys_rt_sigsuspend int sys_rt_sigsuspend(sigset_t * unewset, size_t sigsetsize) 
180 sys_pread ssize_t sys_pread(unsigned int fd, char *buf, size_t count, loff_t pos) 
181 sys_pwrite ssize_t sys_pwrite(unsigned int fd, const char *buf, size_t count, loff_t pos) 
182 sys_chown16 long sys_chown16(const char *filename, old_uid_t user, old_gid_t group) 
183 sys_getcwd long sys_getcwd(char *buf, unsigned long size) 
184 sys_capget long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) 
185 sys_capset long sys_capset(cap_user_header_t header, const cap_user_data_t data) 
186 sys_sigaltstack int sys_sigaltstack(const stack_t * uss, stack_t * uoss) 
187 sys_sendfile ssize_t sys_sendfile(int out_fd, int in_fd, off_t * offset, size_t count) 
188 sys_ni_syscall long sys_ni_syscall(void) 
189 sys_ni_syscall long sys_ni_syscall(void) 
190 sys_vfork int sys_vfork(struct pt_regs regs) 
191 sys_getrlimit long sys_getrlimit(unsigned int resource, struct rlimit *rlim) 
192 sys_mmap2 long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) 
193 sys_truncate64 long sys_truncate64(const char *path, loff_t length) 
194 sys_ftruncate64 long sys_ftruncate64(unsigned int fd, loff_t length) 
195 sys_stat64 long sys_stat64(char *filename, struct stat64 *statbuf, long flags) 
196 sys_lstat64 long sys_lstat64(char *filename, struct stat64 *statbuf, long flags) 
197 sys_fstat64 long sys_fstat64(unsigned long fd, struct stat64 *statbuf, long flags) 
198 sys_lchown long sys_lchown(const char *filename, uid_t user, gid_t group) 
199 sys_getuid long sys_getuid(void) 
200 sys_getgid long sys_getgid(void) 
201 sys_geteuid long sys_geteuid(void) 
202 sys_getegid long sys_getegid(void) 
203 sys_setreuid long sys_setreuid(uid_t ruid, uid_t euid) 
204 sys_setregid long sys_setregid(gid_t rgid, gid_t egid) 
205 sys_getgroups long sys_getgroups(int gidsetsize, gid_t * grouplist) 
206 sys_setgroups long sys_setgroups(int gidsetsize, gid_t * grouplist) 
207 sys_fchown long sys_fchown(unsigned int fd, uid_t user, gid_t group) 
208 sys_setresuid long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) 
209 sys_getresuid long sys_getresuid(uid_t * ruid, uid_t * euid, uid_t * suid) 
210 sys_setresgid long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) 
211 sys_getresgid long sys_getresgid(gid_t * rgid, gid_t * egid, gid_t * sgid) 
212 sys_chown long sys_chown(const char *filename, uid_t user, gid_t group) 
213 sys_setuid long sys_setuid(uid_t uid) 
214 sys_setgid long sys_setgid(gid_t gid) 
215 sys_setfsuid long sys_setfsuid(uid_t uid) 
216 sys_setfsgid long sys_setfsgid(gid_t gid) 
217 sys_pivot_root long sys_pivot_root(const char *new_root, const char *put_old) 
218 sys_mincore long sys_mincore(unsigned long start, size_t len, unsigned char *vec) 
219 sys_madvise long sys_madvise(unsigned long start, size_t len, int behavior) 
220 sys_getdents64 long sys_getdents64(unsigned int fd, void *dirent, unsigned int count) 
221 sys_fcntl64 long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) 
222 sys_ni_syscall long sys_ni_syscall(void) 
223 sys_ni_syscall long sys_ni_syscall(void) 
224 sys_gettid long sys_gettid(void) 
225 sys_readahead ssize_t sys_readahead(int fd, loff_t offset, size_t count) 
226 sys_setxattr long sys_setxattr(char *path, char *name, void *value, size_t size, int flags) 
227 sys_lsetxattr long sys_lsetxattr(char *path, char *name, void *value, size_t size, int flags) 
228 sys_fsetxattr long sys_fsetxattr(int fd, char *name, void *value, size_t size, int flags) 
229 sys_getxattr ssize_t sys_getxattr(char *path, char *name, void *value, size_t size) 
230 sys_lgetxattr ssize_t sys_lgetxattr(char *path, char *name, void *value, size_t size) 
231 sys_fgetxattr ssize_t sys_fgetxattr(int fd, char *name, void *value, size_t size) 
232 sys_listxattr ssize_t sys_listxattr(char *path, char *list, size_t size) 
233 sys_llistxattr ssize_t sys_llistxattr(char *path, char *list, size_t size) 
234 sys_flistxattr ssize_t sys_flistxattr(int fd, char *list, size_t size) 
235 sys_removexattr long sys_removexattr(char *path, char *name) 
236 sys_lremovexattr long sys_lremovexattr(char *path, char *name) 
237 sys_fremovexattr long sys_fremovexattr(int fd, char *name) 
238 sys_tkill long sys_tkill(int pid, int sig) 
239 sys_sendfile64 ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t * offset, size_t count) 
240 sys_ni_syscall long sys_ni_syscall(void) 
241 sys_ni_syscall long sys_ni_syscall(void) 
242 sys_ni_syscall long sys_ni_syscall(void) 
243 sys_ni_syscall long sys_ni_syscall(void) 
244 sys_ni_syscall long sys_ni_syscall(void) 
245 sys_ni_syscall long sys_ni_syscall(void) 
246 sys_ni_syscall long sys_ni_syscall(void) 
247 sys_ni_syscall long sys_ni_syscall(void) 
248 sys_ni_syscall long sys_ni_syscall(void) 
249 sys_ni_syscall long sys_ni_syscall(void) 
250 sys_ni_syscall long sys_ni_syscall(void) 
251 sys_ni_syscall long sys_ni_syscall(void) 
252 sys_ni_syscall long sys_ni_syscall(void) 
253 sys_ni_syscall long sys_ni_syscall(void) 
254 sys_ni_syscall long sys_ni_syscall(void) 
255 sys_ni_syscall long sys_ni_syscall(void) 
256 sys_ni_syscall long sys_ni_syscall(void) 
257 sys_ni_syscall long sys_ni_syscall(void) 
258 sys_ni_syscall long sys_ni_syscall(void) 
259 sys_ni_syscall long sys_ni_syscall(void) 

Linux 2.6.11 System Calls Table (LSCT)

以下是 Linux 2.6.11 的 system call 整理表格,提供給「Embedded Linux 嵌入式系統實作演練」的讀者您做參考。這是一張很方便的表格,可以取代 unistd.h 與 "man"。

這張工具表格可以幫助我們:

1. 最主要的目的:當然是研究作業系統,了解 Linux 提供的 sytsem call service。
2. Trace kernel.
3. Writing shellcode.

供您參考 :)

Linux (kernel 2.6.11) System Call Table

1. sys_ni_syscall 為保留號碼
2. 更新日期: 2006/10/07
3. 第一次發佈 2.6 kernel 的 LSCT

no Syscall Prototype decl.
0 sys_restart_syscall long sys_restart_syscall(void) 
1 sys_exit long sys_exit(int error_code) 
2 sys_fork int sys_fork(struct pt_regs regs) 
3 sys_read ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) 
4 sys_write ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count) 
5 sys_open long sys_open(const char __user * filename, int flags, int mode) 
6 sys_close long sys_close(unsigned int fd) 
7 sys_waitpid long sys_waitpid(pid_t pid, int __user * stat_addr, int options) 
8 sys_creat long sys_creat(const char __user * pathname, int mode) 
9 sys_link long sys_link(const char __user * oldname, const char __user * newname) 
10 sys_unlink long sys_unlink(const char __user * pathname) 
11 sys_execve int sys_execve(struct pt_regs regs) 
12 sys_chdir long sys_chdir(const char __user * filename) 
13 sys_time long sys_time(time_t __user * tloc) 
14 sys_mknod long sys_mknod(const char __user * filename, int mode, unsigned dev) 
15 sys_chmod long sys_chmod(const char __user * filename, mode_t mode) 
16 sys_lchown16 long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group) 
17 sys_ni_syscall long sys_ni_syscall(void) 
18 sys_stat long sys_stat(char __user * filename, struct __old_kernel_stat __user * statbuf) 
19 sys_lseek off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin) 
20 sys_getpid long sys_getpid(void) 
21 sys_mount long sys_mount(char __user * dev_name, char __user * dir_name, char __user * type, unsigned long flags, void __user * data) 
22 sys_oldumount long sys_oldumount(char __user * name) 
23 sys_setuid16 long sys_setuid16(old_uid_t uid) 
24 sys_getuid16 long sys_getuid16(void) 
25 sys_stime long sys_stime(time_t __user * tptr) 
26 sys_ptrace int sys_ptrace(long request, long pid, long addr, long data) 
27 sys_alarm unsigned long sys_alarm(unsigned int seconds) 
28 sys_fstat long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf) 
29 sys_pause long sys_pause(void) 
30 sys_utime long sys_utime(char __user * filename, struct utimbuf __user * times) 
31 sys_ni_syscall long sys_ni_syscall(void) 
32 sys_ni_syscall long sys_ni_syscall(void) 
33 sys_access long sys_access(const char __user * filename, int mode) 
34 sys_nice long sys_nice(int increment) 
35 sys_ni_syscall long sys_ni_syscall(void) 
36 sys_sync long sys_sync(void) 
37 sys_kill long sys_kill(int pid, int sig) 
38 sys_rename long sys_rename(const char __user * oldname, const char __user * newname) 
39 sys_mkdir long sys_mkdir(const char __user * pathname, int mode) 
40 sys_rmdir long sys_rmdir(const char __user * pathname) 
41 sys_dup long sys_dup(unsigned int fildes) 
42 sys_pipe int sys_pipe(unsigned long __user * fildes) 
43 sys_times long sys_times(struct tms __user * tbuf) 
44 sys_ni_syscall long sys_ni_syscall(void) 
45 sys_brk unsigned long sys_brk(unsigned long brk) 
46 sys_setgid16 long sys_setgid16(old_gid_t gid) 
47 sys_getgid16 long sys_getgid16(void) 
48 sys_signal unsigned long sys_signal(int sig, __sighandler_t handler) 
49 sys_geteuid16 long sys_geteuid16(void) 
50 sys_getegid16 long sys_getegid16(void) 
51 sys_acct long sys_acct(const char __user * name) 
52 sys_umount long sys_umount(char __user * name, int flags) 
53 sys_ni_syscall long sys_ni_syscall(void) 
54 sys_ioctl long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) 
55 sys_fcntl long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) 
56 sys_ni_syscall long sys_ni_syscall(void) 
57 sys_setpgid long sys_setpgid(pid_t pid, pid_t pgid) 
58 sys_ni_syscall long sys_ni_syscall(void) 
59 sys_olduname int sys_olduname(struct oldold_utsname __user * name) 
60 sys_umask long sys_umask(int mask) 
61 sys_chroot long sys_chroot(const char __user * filename) 
62 sys_ustat long sys_ustat(unsigned dev, struct ustat __user * ubuf) 
63 sys_dup2 long sys_dup2(unsigned int oldfd, unsigned int newfd) 
64 sys_getppid long sys_getppid(void) 
65 sys_getpgrp long sys_getpgrp(void) 
66 sys_setsid long sys_setsid(void) 
67 sys_sigaction int sys_sigaction(int sig, const struct old_sigaction __user * act, struct old_sigaction __user * oact) 
68 sys_sgetmask long sys_sgetmask(void) 
69 sys_ssetmask long sys_ssetmask(int newmask) 
70 sys_setreuid16 long sys_setreuid16(old_uid_t ruid, old_uid_t euid) 
71 sys_setregid16 long sys_setregid16(old_gid_t rgid, old_gid_t egid) 
72 sys_sigsuspend int sys_sigsuspend(int history0, int history1, old_sigset_t mask) 
73 sys_sigpending long sys_sigpending(old_sigset_t __user * set) 
74 sys_sethostname long sys_sethostname(char __user * name, int len) 
75 sys_setrlimit long sys_setrlimit(unsigned int resource, struct rlimit __user * rlim) 
76 sys_old_getrlimit long sys_old_getrlimit(unsigned int resource, struct rlimit __user * rlim) 
77 sys_getrusage long sys_getrusage(int who, struct rusage __user * ru) 
78 sys_gettimeofday long sys_gettimeofday(struct timeval __user * tv, struct timezone __user * tz) 
79 sys_settimeofday long sys_settimeofday(struct timeval __user * tv, struct timezone __user * tz) 
80 sys_getgroups16 long sys_getgroups16(int gidsetsize, old_gid_t __user * grouplist) 
81 sys_setgroups16 long sys_setgroups16(int gidsetsize, old_gid_t __user * grouplist) 
82 old_select int old_select(struct sel_arg_struct __user * arg) 
83 sys_symlink long sys_symlink(const char __user * oldname, const char __user * newname) 
84 sys_lstat long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) 
85 sys_readlink long sys_readlink(const char __user * path, char __user * buf, int bufsiz) 
86 sys_uselib long sys_uselib(const char __user * library) 
87 sys_swapon long sys_swapon(const char __user * specialfile, int swap_flags) 
88 sys_reboot long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user * arg) 
89 old_readdir long old_readdir(unsigned int fd, struct old_linux_dirent __user * dirent, unsigned int count) 
90 old_mmap int old_mmap(struct mmap_arg_struct __user * arg) 
91 sys_munmap long sys_munmap(unsigned long addr, size_t len) 
92 sys_truncate long sys_truncate(const char __user * path, unsigned long length) 
93 sys_ftruncate long sys_ftruncate(unsigned int fd, unsigned long length) 
94 sys_fchmod long sys_fchmod(unsigned int fd, mode_t mode) 
95 sys_fchown16 long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) 
96 sys_getpriority long sys_getpriority(int which, int who) 
97 sys_setpriority long sys_setpriority(int which, int who, int niceval) 
98 sys_ni_syscall long sys_ni_syscall(void) 
99 sys_statfs long sys_statfs(const char __user * path, struct statfs __user * buf) 
100 sys_fstatfs long sys_fstatfs(unsigned int fd, struct statfs __user * buf) 
101 sys_ioperm long sys_ioperm(unsigned long from, unsigned long num, int turn_on) 
102 sys_socketcall long sys_socketcall(int call, unsigned long __user * args) 
103 sys_syslog long sys_syslog(int type, char __user * buf, int len) 
104 sys_setitimer long sys_setitimer(int which, struct itimerval __user * value, struct itimerval __user * ovalue) 
105 sys_getitimer long sys_getitimer(int which, struct itimerval __user * value) 
106 sys_newstat long sys_newstat(char __user * filename, struct stat __user * statbuf) 
107 sys_newlstat long sys_newlstat(char __user * filename, struct stat __user * statbuf) 
108 sys_newfstat long sys_newfstat(unsigned int fd, struct stat __user * statbuf) 
109 sys_uname int sys_uname(struct old_utsname __user * name) 
110 sys_iopl long sys_iopl(unsigned long unused) 
111 sys_vhangup long sys_vhangup(void) 
112 sys_ni_syscall long sys_ni_syscall(void) 
113 sys_vm86old int sys_vm86old(struct pt_regs regs) 
114 sys_wait4 long sys_wait4(pid_t pid, int __user * stat_addr, int options, struct rusage __user * ru) 
115 sys_swapoff long sys_swapoff(const char __user * specialfile) 
116 sys_sysinfo long sys_sysinfo(struct sysinfo __user * info) 
117 sys_ipc int sys_ipc(uint call, int first, int second, int third, void __user * ptr, long fifth) 
118 sys_fsync long sys_fsync(unsigned int fd) 
119 sys_sigreturn int sys_sigreturn(unsigned long __unused) 
120 sys_clone int sys_clone(struct pt_regs regs) 
121 sys_setdomainname long sys_setdomainname(char __user * name, int len) 
122 sys_newuname long sys_newuname(struct new_utsname __user * name) 
123 sys_modify_ldt int sys_modify_ldt(int func, void __user * ptr, unsigned long bytecount) 
124 sys_adjtimex long sys_adjtimex(struct timex __user * txc_p) 
125 sys_mprotect long sys_mprotect(unsigned long start, size_t len, unsigned long prot) 
126 sys_sigprocmask long sys_sigprocmask(int how, old_sigset_t __user * set, old_sigset_t __user * oset) 
127 sys_ni_syscall long sys_ni_syscall(void) 
128 sys_init_module long sys_init_module(void __user * umod, unsigned long len, const char __user * uargs) 
129 sys_delete_module long sys_delete_module(const char __user * name_user, unsigned int flags) 
130 sys_ni_syscall long sys_ni_syscall(void) 
131 sys_quotactl long sys_quotactl(unsigned int cmd, const char __user * special, qid_t id, void __user * addr) 
132 sys_getpgid long sys_getpgid(pid_t pid) 
133 sys_fchdir long sys_fchdir(unsigned int fd) 
134 sys_bdflush long sys_bdflush(int func, long data) 
135 sys_sysfs long sys_sysfs(int option, unsigned long arg1, unsigned long arg2) 
136 sys_personality long sys_personality(u_long personality) 
137 sys_ni_syscall long sys_ni_syscall(void) 
138 sys_setfsuid16 long sys_setfsuid16(old_uid_t uid) 
139 sys_setfsgid16 long sys_setfsgid16(old_gid_t gid) 
140 sys_llseek long sys_llseek(unsigned int fd, unsigned long offset_high, unsigned long offset_low, loff_t __user * result, unsigned int origin) 
141 sys_getdents long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count) 
142 sys_select long sys_select(int n, fd_set __user * inp, fd_set __user * outp, fd_set __user * exp, struct timeval __user * tvp) 
143 sys_flock long sys_flock(unsigned int fd, unsigned int cmd) 
144 sys_msync long sys_msync(unsigned long start, size_t len, int flags) 
145 sys_readv ssize_t sys_readv(unsigned long fd, const struct iovec __user * vec, unsigned long vlen) 
146 sys_writev ssize_t sys_writev(unsigned long fd, const struct iovec __user * vec, unsigned long vlen) 
147 sys_getsid long sys_getsid(pid_t pid) 
148 sys_fdatasync long sys_fdatasync(unsigned int fd) 
149 sys_sysctl long sys_sysctl(struct __sysctl_args __user * args) 
150 sys_mlock long sys_mlock(unsigned long start, size_t len) 
151 sys_munlock long sys_munlock(unsigned long start, size_t len) 
152 sys_mlockall long sys_mlockall(int flags) 
153 sys_munlockall long sys_munlockall(void) 
154 sys_sched_setparam long sys_sched_setparam(pid_t pid, struct sched_param __user * param) 
155 sys_sched_getparam long sys_sched_getparam(pid_t pid, struct sched_param __user * param) 
156 sys_sched_setscheduler long sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user * param) 
157 sys_sched_getscheduler long sys_sched_getscheduler(pid_t pid) 
158 sys_sched_yield long sys_sched_yield(void) 
159 sys_sched_get_priority_max long sys_sched_get_priority_max(int policy) 
160 sys_sched_get_priority_min long sys_sched_get_priority_min(int policy) 
161 sys_sched_rr_get_interval long sys_sched_rr_get_interval(pid_t pid, struct timespec __user * interval) 
162 sys_nanosleep long sys_nanosleep(struct timespec __user * rqtp, struct timespec __user * rmtp) 
163 sys_mremap unsigned long sys_mremap(unsigned long addr, unsigned long old_len, unsigned long new_len, unsigned long flags, unsigned long new_addr) 
164 sys_setresuid16 long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) 
165 sys_getresuid16 long sys_getresuid16(old_uid_t __user * ruid, old_uid_t __user * euid, old_uid_t __user * suid) 
166 sys_vm86 int sys_vm86(struct pt_regs regs) 
167 sys_ni_syscall long sys_ni_syscall(void) 
168 sys_poll long sys_poll(struct pollfd __user * ufds, unsigned int nfds, long timeout) 
169 sys_nfsservctl  
170 sys_setresgid16 long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) 
171 sys_getresgid16 long sys_getresgid16(old_gid_t __user * rgid, old_gid_t __user * egid, old_gid_t __user * sgid) 
172 sys_prctl long sys_prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) 
173 sys_rt_sigreturn int sys_rt_sigreturn(unsigned long __unused) 
174 sys_rt_sigaction long sys_rt_sigaction(int sig, const struct sigaction __user * act, struct sigaction __user * oact, size_t sigsetsize) 
175 sys_rt_sigprocmask long sys_rt_sigprocmask(int how, sigset_t __user * set, sigset_t __user * oset, size_t sigsetsize) 
176 sys_rt_sigpending long sys_rt_sigpending(sigset_t __user * set, size_t sigsetsize) 
177 sys_rt_sigtimedwait long sys_rt_sigtimedwait(const sigset_t __user * uthese, siginfo_t __user * uinfo, const struct timespec __user * uts, size_t sigsetsize) 
178 sys_rt_sigqueueinfo long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user * uinfo) 
179 sys_rt_sigsuspend int sys_rt_sigsuspend(struct pt_regs regs) 
180 sys_pread64 ssize_t sys_pread64(unsigned int fd, char __user * buf, size_t count, loff_t pos) 
181 sys_pwrite64 ssize_t sys_pwrite64(unsigned int fd, const char __user * buf, size_t count, loff_t pos) 
182 sys_chown16 long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group) 
183 sys_getcwd long sys_getcwd(char __user * buf, unsigned long size) 
184 sys_capget long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) 
185 sys_capset long sys_capset(cap_user_header_t header, const cap_user_data_t data) 
186 sys_sigaltstack int sys_sigaltstack(unsigned long ebx) 
187 sys_sendfile ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user * offset, size_t count) 
188 sys_ni_syscall long sys_ni_syscall(void) 
189 sys_ni_syscall long sys_ni_syscall(void) 
190 sys_vfork int sys_vfork(struct pt_regs regs) 
191 sys_getrlimit long sys_getrlimit(unsigned int resource, struct rlimit __user * rlim) 
192 sys_mmap2 long sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, unsigned long fd, unsigned long pgoff) 
193 sys_truncate64 long sys_truncate64(const char __user * path, loff_t length) 
194 sys_ftruncate64 long sys_ftruncate64(unsigned int fd, loff_t length) 
195 sys_stat64 long sys_stat64(char __user * filename, struct stat64 __user * statbuf) 
196 sys_lstat64 long sys_lstat64(char __user * filename, struct stat64 __user * statbuf) 
197 sys_fstat64 long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) 
198 sys_lchown long sys_lchown(const char __user * filename, uid_t user, gid_t group) 
199 sys_getuid long sys_getuid(void) 
200 sys_getgid long sys_getgid(void) 
201 sys_geteuid long sys_geteuid(void) 
202 sys_getegid long sys_getegid(void) 
203 sys_setreuid long sys_setreuid(uid_t ruid, uid_t euid) 
204 sys_setregid long sys_setregid(gid_t rgid, gid_t egid) 
205 sys_getgroups long sys_getgroups(int gidsetsize, gid_t __user * grouplist) 
206 sys_setgroups long sys_setgroups(int gidsetsize, gid_t __user * grouplist) 
207 sys_fchown long sys_fchown(unsigned int fd, uid_t user, gid_t group) 
208 sys_setresuid long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) 
209 sys_getresuid long sys_getresuid(uid_t __user * ruid, uid_t __user * euid, uid_t __user * suid) 
210 sys_setresgid long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) 
211 sys_getresgid long sys_getresgid(gid_t __user * rgid, gid_t __user * egid, gid_t __user * sgid) 
212 sys_chown long sys_chown(const char __user * filename, uid_t user, gid_t group) 
213 sys_setuid long sys_setuid(uid_t uid) 
214 sys_setgid long sys_setgid(gid_t gid) 
215 sys_setfsuid long sys_setfsuid(uid_t uid) 
216 sys_setfsgid long sys_setfsgid(gid_t gid) 
217 sys_pivot_root long sys_pivot_root(const char __user * new_root, const char __user * put_old) 
218 sys_mincore long sys_mincore(unsigned long start, size_t len, unsigned char __user * vec) 
219 sys_madvise long sys_madvise(unsigned long start, size_t len_in, int behavior) 
220 sys_getdents64 long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) 
221 sys_fcntl64 long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) 
222 sys_ni_syscall long sys_ni_syscall(void) 
223 sys_ni_syscall long sys_ni_syscall(void) 
224 sys_gettid long sys_gettid(void) 
225 sys_readahead ssize_t sys_readahead(int fd, loff_t offset, size_t count) 
226 sys_setxattr long sys_setxattr(char __user * path, char __user * name, void __user * value, size_t size, int flags) 
227 sys_lsetxattr long sys_lsetxattr(char __user * path, char __user * name, void __user * value, size_t size, int flags) 
228 sys_fsetxattr long sys_fsetxattr(int fd, char __user * name, void __user * value, size_t size, int flags) 
229 sys_getxattr ssize_t sys_getxattr(char __user * path, char __user * name, void __user * value, size_t size) 
230 sys_lgetxattr ssize_t sys_lgetxattr(char __user * path, char __user * name, void __user * value, size_t size) 
231 sys_fgetxattr ssize_t sys_fgetxattr(int fd, char __user * name, void __user * value, size_t size) 
232 sys_listxattr ssize_t sys_listxattr(char __user * path, char __user * list, size_t size) 
233 sys_llistxattr ssize_t sys_llistxattr(char __user * path, char __user * list, size_t size) 
234 sys_flistxattr ssize_t sys_flistxattr(int fd, char __user * list, size_t size) 
235 sys_removexattr long sys_removexattr(char __user * path, char __user * name) 
236 sys_lremovexattr long sys_lremovexattr(char __user * path, char __user * name) 
237 sys_fremovexattr long sys_fremovexattr(int fd, char __user * name) 
238 sys_tkill long sys_tkill(int pid, int sig) 
239 sys_sendfile64 ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user * offset, size_t count) 
240 sys_futex long sys_futex(u32 __user * uaddr, int op, int val, struct timespec __user * utime, u32 __user * uaddr2, int val3) 
241 sys_sched_setaffinity long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long __user * user_mask_ptr) 
242 sys_sched_getaffinity long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long __user * user_mask_ptr) 
243 sys_set_thread_area int sys_set_thread_area(struct user_desc __user * u_info) 
244 sys_get_thread_area int sys_get_thread_area(struct user_desc __user * u_info) 
245 sys_io_setup long sys_io_setup(unsigned nr_events, aio_context_t __user * ctxp) 
246 sys_io_destroy long sys_io_destroy(aio_context_t ctx) 
247 sys_io_getevents long sys_io_getevents(aio_context_t ctx_id, long min_nr, long nr, struct io_event __user * events, struct timespec __user * timeout) 
248 sys_io_submit long sys_io_submit(aio_context_t ctx_id, long nr, struct iocb __user * __user * iocbpp) 
249 sys_io_cancel long sys_io_cancel(aio_context_t ctx_id, struct iocb __user * iocb, struct io_event __user * result) 
250 sys_fadvise64 long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) 
251 sys_ni_syscall long sys_ni_syscall(void) 
252 sys_exit_group void sys_exit_group(int error_code) 
253 sys_lookup_dcookie long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len) 
254 sys_epoll_create long sys_epoll_create(int size) 
255 sys_epoll_ctl long sys_epoll_ctl(int epfd, int op, int fd, struct epoll_event __user * event) 
256 sys_epoll_wait long sys_epoll_wait(int epfd, struct epoll_event __user * events, int maxevents, int timeout) 
257 sys_remap_file_pages long sys_remap_file_pages(unsigned long start, unsigned long size, unsigned long __prot, unsigned long pgoff, unsigned long flags) 
258 sys_set_tid_address long sys_set_tid_address(int __user * tidptr) 
259 sys_timer_create long sys_timer_create(clockid_t which_clock, struct sigevent __user * timer_event_spec, timer_t __user * created_timer_id) 
260 sys_timer_settime long sys_timer_settime(timer_t timer_id, int flags, const struct itimerspec __user * new_setting, struct itimerspec __user * old_setting) 
261 sys_timer_gettime long sys_timer_gettime(timer_t timer_id, struct itimerspec __user * setting) 
262 sys_timer_getoverrun long sys_timer_getoverrun(timer_t timer_id) 
263 sys_timer_delete long sys_timer_delete(timer_t timer_id) 
264 sys_clock_settime long sys_clock_settime(clockid_t which_clock, const struct timespec __user * tp) 
265 sys_clock_gettime long sys_clock_gettime(clockid_t which_clock, struct timespec __user * tp) 
266 sys_clock_getres long sys_clock_getres(clockid_t which_clock, struct timespec __user * tp) 
267 sys_clock_nanosleep long sys_clock_nanosleep(clockid_t which_clock, int flags, const struct timespec __user * rqtp, struct timespec __user * rmtp) 
268 sys_statfs64 long sys_statfs64(const char __user * path, size_t sz, struct statfs64 __user * buf) 
269 sys_fstatfs64 long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user * buf) 
270 sys_tgkill long sys_tgkill(int tgid, int pid, int sig) 
271 sys_utimes long sys_utimes(char __user * filename, struct timeval __user * utimes) 
272 sys_fadvise64_64 long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) 
273 sys_ni_syscall long sys_ni_syscall(void) 
274 sys_mbind long sys_mbind(unsigned long start, unsigned long len, unsigned long mode, unsigned long __user * nmask, unsigned long maxnode, unsigned flags) 
275 sys_get_mempolicy long sys_get_mempolicy(int __user * policy, unsigned long __user * nmask, unsigned long maxnode, unsigned long addr, unsigned long flags) 
276 sys_set_mempolicy long sys_set_mempolicy(int mode, unsigned long __user * nmask, unsigned long maxnode) 
277 sys_mq_open long sys_mq_open(const char __user * u_name, int oflag, mode_t mode, struct mq_attr __user * u_attr) 
278 sys_mq_unlink long sys_mq_unlink(const char __user * u_name) 
279 sys_mq_timedsend long sys_mq_timedsend(mqd_t mqdes, const char __user * u_msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user * u_abs_timeout) 
280 sys_mq_timedreceive ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user * u_msg_ptr, size_t msg_len, unsigned int __user * u_msg_prio, const struct timespec __user * u_abs_timeout) 
281 sys_mq_notify long sys_mq_notify(mqd_t mqdes, const struct sigevent __user * u_notification) 
282 sys_mq_getsetattr long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user * u_mqstat, struct mq_attr __user * u_omqstat) 
283 sys_ni_syscall long sys_ni_syscall(void) 
284 sys_waitid long sys_waitid(int which, pid_t pid, struct siginfo __user * infop, int options, struct rusage __user * ru) 
285 sys_ni_syscall long sys_ni_syscall(void) 
286 sys_add_key long sys_add_key(const char __user * _type, const char __user * _description, const void __user * _payload, size_t plen, key_serial_t ringid) 
287 sys_request_key long sys_request_key(const char __user * _type, const char __user * _description, const char __user * _callout_info, key_serial_t destringid) 
288 sys_keyctl long sys_keyctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5) 

October 11, 2006

Linux 2.6 的 System Call:12 大類

把 Linux 提供的 sytsem call service 依分類做整理,並提供實作檔案。本表使用於 Jollen 的「2. GNU Toolchains 與 Embedded Linux Programming」課程中,在此提供給大家做參考。目前依據 Linux 2.6.11 原始碼製成,請搭配 2.6.11 以上的版本做研究。

no Syscall name Implementation file in Linux 2.6.11 (or above)

目前大致把 Linux 2.6.11 的 system call 分成