Linux 系統調用(system call)


1 系統調用:(SYSTEM CALL)

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

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

    系統調用是用戶態進入內核態的唯一入口

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

  Linux中的系統調用接口:https://www.cnblogs.com/dongry/p/10650620.html

2 系統調用分析:

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

  在這個函數中得到調用標號

  根據標號找到一個調用表

  然后找到進入表

  打開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

  燒寫到開發板運行:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM