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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 采用ARM+Linux 的儀器控制系統(tǒng)設(shè)計(jì)

          采用ARM+Linux 的儀器控制系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2010-12-12 來源:網(wǎng)絡(luò) 收藏

            在初始化函數(shù)中,首先進(jìn)行設(shè)備的注冊。主設(shè)備號表示對應(yīng)的驅(qū)動(dòng)程序,次設(shè)備號由內(nèi)核使用,用于正確確定設(shè)備文件所指的設(shè)備??梢詣?dòng)態(tài)申請或者靜態(tài)申請?jiān)O(shè)備號。動(dòng)態(tài)申請使用下面的函數(shù):

          程序

            dev是一個(gè)只輸出的參數(shù),它在函數(shù)成功完成時(shí)持有分配范圍的第一個(gè)數(shù);firstminor是請求的第一個(gè)要用的次編號;count是請求的連續(xù)設(shè)備編號的總數(shù);name為設(shè)備名,返回值小于0表示分配失敗。然后通過major=MMOR(dev)獲取主設(shè)備號。如果注冊不成功或者卸載驅(qū)動(dòng)時(shí)需要取消設(shè)備的注冊,使用下面的函數(shù)實(shí)現(xiàn)(其參數(shù)含義同上):

          程序

            對于字符型設(shè)備還要定義一個(gè)cdev結(jié)構(gòu)體變量,并使用cdev_init()初始化,然后調(diào)用cdev_add()通知內(nèi)核添加一個(gè)字符設(shè)備。同樣在卸載時(shí)要使用cdev_del()移除,否則用戶使用驅(qū)動(dòng)時(shí),有時(shí)不能打開設(shè)備。因?yàn)椴皇褂胏dev或者cdev在模塊卸載時(shí)不刪除會導(dǎo)致內(nèi)核處在一個(gè)不穩(wěn)定狀態(tài),在用戶層可能無法打開設(shè)備文件。  1.3 I/O端口訪問

            在系統(tǒng)控制要求中,需要訪問的I/O端口,包括普通I/O口和復(fù)用為IRQO的PB29引腳,然而中對I/O端12和I/0內(nèi)存的讀寫指令中使用的都是虛擬地址,所以在訪問前要先將物理寄存器地址映射到I/O內(nèi)存。有兩種方法實(shí)現(xiàn)地址映射,一種是使用ioremap為I/O內(nèi)存區(qū)域分配虛擬地址,用iounmap取消,另一種是使用內(nèi)核已經(jīng)定義好的虛擬地址。這里主要介紹第二種方式。

            對于AT91RM9200利用如下轉(zhuǎn)換函數(shù)獲取虛擬地址,其中宏AT91_VA_BASE_SYS是系統(tǒng)虛擬基地址:

          程序

            讀寫端口對于AT91RM9200還可使用專門函數(shù)

            int at9 1_set_gpio_value(unsigned pin,int value),并包含頭文件asm-arm/arch-at91/gpio.h。一般端口的訪問在驅(qū)動(dòng)模塊初始化時(shí)申請資源,在卸載時(shí)釋放資源,而對于I/O口的使能則在open方法中實(shí)現(xiàn),相應(yīng)的禁用在release方法中實(shí)現(xiàn)。

            1.4 ioctl方法的實(shí)現(xiàn)

            用戶可以通過ioctl方法向內(nèi)核發(fā)送各種命令,必要時(shí)傳遞參數(shù),下面展示一個(gè)簡單實(shí)例。

          程序

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(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); })();