1. 程式人生 > >xenomai核心解析--雙核系統呼叫(三)--如何為xenomai新增一個系統呼叫

xenomai核心解析--雙核系統呼叫(三)--如何為xenomai新增一個系統呼叫

版權宣告:本文為本文為博主原創文章,轉載請註明出處。如有錯誤,歡迎指正。 @[toc] ### 一、新增系統呼叫 下面給xenomai新增一個系統呼叫`get_timer_hits()`,用於獲取應用程式執行CPU的定時器中斷產生的次數,類似於VxWorks裡的tickGet()。需要說明一下VxWorks是採用週期tick的方式來驅動系統運作,tickGet()獲取的也就是tick定時器中斷的次數,但xenomai使用的tickless,即定時器不是週期產生tick的。所以`get_timer_hits()`用於獲取定時器中斷次數,`get_timer_hits()`沒有具體用途,這裡主要用來舉例怎麼為xenomai新增一個實時系統呼叫。 在前兩篇文中說到,xenomai每個系統的系統系統呼叫號在`\cobalt\uapi\syscall.h`中: ```C #define sc_cobalt_bind 0 #define sc_cobalt_thread_create 1 #define sc_cobalt_thread_getpid 2 ...... #define sc_cobalt_extend 96 ``` 在此新增`sc_cobalt_get_timer_hits`的系統,為了避免與xenomai系統呼叫衝突(xenomai官方新增的系統呼叫號從小到大),那我們就從最後一個系統呼叫新增,即127號系統呼叫,如下。 ```C #define sc_cobalt_bind 0 #define sc_cobalt_thread_create 1 #define sc_cobalt_thread_getpid 2 ...... #define sc_cobalt_extend 96 #define sc_cobalt_ftrace_puts 97 #define sc_cobalt_recvmmsg 98 #define sc_cobalt_sendmmsg 99 #define sc_cobalt_clock_adjtime 100 #define sc_cobalt_thread_setschedprio 101 #define sc_cobalt_get_timer_hits 127 #define __NR_COBALT_SYSCALLS 128 /* Power of 2 */ ``` 先確定一下我們這個函式的API形式,由於是一個非標準的形式,這裡表示如下: >```C >int get_timer_hits(unsigned long *u_tick); >``` > >引數為儲存hits的變數地址; > >返回值:成功0;出錯 <0; 系統呼叫的標頭檔案,然後新增一個系統呼叫的**宣告**,覺得它和clock相關,那就放在`kernel\xenomai\posix\clock.h`中吧。 ```C #