Linux 系統調用(system call)

1 系統調用:(SYSTEM CALL)html

    操做系統(operating system)內核中有一組實現系統功能的過程,系統調用就是對上述過程的調用。程序員利用系統調用,向OS提出服務請求,由OS代爲完成。
linux

    通常狀況下進程是不可以存取系統內核的。它不能存取內核使用的內核段,也不能調用內核函數,CPU的硬件結構保證了這一點。只有系統調用是個例外。程序員

    系統調用是用戶態進入內核態的惟一入口函數

    Linux被分爲內核空間和用戶空間;若是想在內核空間實現了某個函數提供給應用程序去使用,好比sys_read()函數;而應用程序的read()實現是來源於sys_read(),這樣就造成一個系統調用。spa

  Linux中的系統調用接口:http://www.javashuo.com/article/p-knhkdntd-w.html操作系統

2 系統調用分析:3d

  打開entry_common.S;找到其中的ENTRY(vector_swi)code

  在這個函數中獲得調用標號htm

  根據標號找到一個調用表blog

  而後找到進入表

  打開calls.S文件,會獲得一張系統調用列表(部分圖示)

3 系統調用實例:

  實現功能:系統調用打印字符串

3.1 編寫系統調用函數(/mini2440/kernel/printk.c)

  添加一個新的系統調用(/mini2440/arch/arm/kernel/calls.S)

  添加到頭文件(/mini2440/arch/arm/include/asm/unistd.h)

3.2 make clean系統,從新編譯make uImage ARCH=arm CROSS_COMPILE=arm-linux- 並從新安裝到開發板上

 

  cp arch/arm/boot/uImage /tftpboot

3.3 編寫應用程序syscall.c

void pk()
{
            __asm__(
            "ldr r7,=365\n"
            "swi \n"
            :
            :
            :"memory"
            );
}

int main()
{
            pk();
            return 0;
}

  編譯:arm-linux-gcc -static syscall.c -o syscall

  燒寫到開發板運行:

相關文章
相關標籤/搜索