<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM Linux下添加新的系統(tǒng)調(diào)用

          ARM Linux下添加新的系統(tǒng)調(diào)用

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          最近的項(xiàng)目需要在ARMLinux核心中添加新的系統(tǒng)調(diào)用,才能滿足項(xiàng)目的需要,于是乎打開google和百度去搜索,結(jié)果很不能令人滿意。結(jié)果自己只好解決!現(xiàn)將添加步驟公布如下(注:我用的核心是2.6.14.7,其他版本請(qǐng)讀者自行修改):
          一、打開arch/arm/kernel/calls.S,找到“#define NR_syscalls 328”這句修改之,需要特別注意的是,這里的系統(tǒng)調(diào)用數(shù)必須是4的倍數(shù)增加,否則編譯會(huì)有錯(cuò),比如:“#define NR_syscalls 332“。接下來(lái)添加系統(tǒng)調(diào)用的函數(shù)原型的指針,例如:.long sys_set_senda
          二、打開include/asm-arm/unistd.h,添加系統(tǒng)調(diào)用號(hào)的宏(個(gè)人感覺(jué)這步可以省略),例如:
          #define __NR_plan_set_senda (__NR_SYSCALL_BASE+323)
          這里的編號(hào)添加時(shí),必須按順序來(lái)。否則會(huì)導(dǎo)致核心運(yùn)行錯(cuò)誤。
          三、實(shí)例化該系統(tǒng)調(diào)用,即編寫新添加系統(tǒng)調(diào)用的實(shí)現(xiàn),這個(gè)就是你的事了,例如:
          asmlinkage long sys_set_senda(int iset)
          {
          if(iset)
          UART_PUT_CR(&at91_port[2],AT91C_US_SENDA);
          else
          UART_PUT_CR(&at91_port[2],AT91C_US_RSTSTA);
          return 0;
          }
          四、打開include/linux/syscalls.h添加函數(shù)聲明
          asmlinkage long sys_set_senda(int iset);
          五、在應(yīng)用程序中調(diào)用該系統(tǒng)調(diào)用
          int set_senda(int isset)
          {
          register long __r0 __asm__("r0") = (long)isset;
          register long __res __asm__("r0");
          __asm__ __volatile__ ( "swit" "0x900143" "nt" : "=r" (__res) : "r" (__r0) : "lr");
          do { if ((unsigned long)(__res) >= (unsigned long)(-125))
          { errno = -(__res); __res = -1; }
          return (int) (__res);
          } while (0);
          }
          六、結(jié)束(注:多參數(shù)的情況請(qǐng)讀者自行研究)



          關(guān)鍵詞: ARMLinux系統(tǒng)調(diào)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();