為linux添加系統調用

來源:互聯網
上載者:User

    這篇文章簡單的介紹了如何為linux添加一個系統調用。也就是為linux增加一個api函數。通過這篇文章,應該學會如何 簡單的修改linux原始碼、編譯核心。

    首先:1:  cd  /usr/src/linux/kernel

               2: vi sys.c 並添加如下一個函數:

                       asmlinkage int sys_mycall(int num) { return num;}

              3.  cd /usr/src/linux/arch/i386/kernel

              4:  vi entry.S  並添加如下代碼

                .long SYMBOL_NAME(sys_mycall)

            5.  在標頭檔中增加申明:

              cd /usr/include/asm

             vi unistd.h

           添加:   #define __NR_mycall     222

---------------------------------------

OK , 以下開始編譯核心。

     make mrproper

   make menuconfig

   make dep

   make bzImage

  make modules

  make  modules_install

編譯完成後,將新核心檔案和新的系統符號表拷貝到/boot目錄,如下:

   cp /usr/src/linux/arch/i386/boot/bzImage /boot/bzImage-new

  cp  /usr/src/linux/System.map  /boot/System.map-new

  然後將System.map-new,軟連結到/boot/System.map,如下:

   ln -sf /bbot/System.map-new /boot/System.map

下面開始配置lilo(/etc 目錄下):

   新lilo.conf檔案如下:

    default = linux-new

     image = /boot/bzImage-2.4.7

   label=linux-new

   ..........(略)

 然後使用超級使用者運行 /sbin/lilo

好,重新啟動 。 reboot

重新啟動機器後,我們來編寫一個測試程式來調用我們剛才添加的api。如下test.c:

   #include <linux/unistd.h>   ///-----看見這裡了吧

  _syscall1(int,mycall,int,ret)   //// 申明系統調用

main()

{

printf("%d  /n",mycall(100));

}

存檔編譯。

gcc -o  test test.c

編譯好運行。

:)    -----全文玩

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.