亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于QNX操作系統(tǒng)的多主橋PCIE總線驅(qū)動開發(fā)

        2021-10-28 10:35:50王吉平
        汽車實用技術(shù) 2021年19期
        關(guān)鍵詞:主橋驅(qū)動程序寄存器

        王吉平

        (中車青島四方車輛研究所有限公司技術(shù)中心,山東 青島 266031)

        前言

        QNX軟件系統(tǒng)公司建立于1980年,是實時嵌入式操作系統(tǒng)主要提供商之一。QNX產(chǎn)品作為高可靠性的微內(nèi)核系統(tǒng),經(jīng)過了近30年的發(fā)展,已經(jīng)遍及全球100多個國家和地區(qū),成功應(yīng)用在各種嵌入式系統(tǒng)中。PCIE(PCI-Express)總線是取代PCI總線的第三代I/O技術(shù),作為處理器系統(tǒng)的局部總線,目的是連接高速外部設(shè)備,采用高速差分總線,端對端的連接方式,因此PCIE總線與PCI總線的拓?fù)浣Y(jié)構(gòu)有所不同。

        1 QNX操作系統(tǒng)驅(qū)動程序架構(gòu)

        在基于QNX構(gòu)建的系統(tǒng)中,為了使裁剪的系統(tǒng)占用盡可能小的存儲空間,同時還具有相當(dāng)?shù)撵`活性,能夠同時處理系統(tǒng)中的各種硬件設(shè)備,因此QNX允許用戶編寫用戶進(jìn)程作為資源管理器,管理各種設(shè)備[1]。圖1為QNX內(nèi)核和用戶進(jìn)程關(guān)系。

        圖1 QNX內(nèi)核和用戶進(jìn)程關(guān)系

        QNX內(nèi)核通過消息總線可以實現(xiàn)進(jìn)程管理、Flash驅(qū)動、串口驅(qū)動、PCI驅(qū)動、網(wǎng)絡(luò)驅(qū)動和應(yīng)用程序[1]。

        QNX允許設(shè)備驅(qū)動程序單獨(dú)編譯為一個可執(zhí)行程序,并在自己的進(jìn)程空間中單獨(dú)運(yùn)行,這樣體系結(jié)構(gòu)不會因為驅(qū)動程序故障導(dǎo)致系統(tǒng)崩潰,保證系統(tǒng)的安全性,同時也給驅(qū)動程序的設(shè)計和調(diào)試帶來方便[2]。

        QNX驅(qū)動程序的實現(xiàn)的流程為[3]:

        (1)初始化系統(tǒng):啟動系統(tǒng),為系統(tǒng)中各設(shè)備分配資源,設(shè)置系統(tǒng)需要的接口。

        (2)獲取硬件接口參數(shù):獲取系統(tǒng)為硬件分配的資源,包含終端號、內(nèi)存映射地址、I/O端口地址。

        (3)設(shè)置硬件寄存器:根據(jù)硬件手冊設(shè)置寄存器值,從而控制硬件行為。

        (4)實現(xiàn)接口函數(shù):驅(qū)動程序介于硬件和上層應(yīng)用之間,同時提供硬件和應(yīng)用程序接口,從而在兩者之間建立聯(lián)系。

        (5)啟動消息循環(huán):接收應(yīng)用進(jìn)程的消息,解析消息,然后根據(jù)消息調(diào)用相應(yīng)的處理功能。

        2 PCIE總線系統(tǒng)

        PCIE總線采用串行連接方式,并使用數(shù)據(jù)包(Packet)進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)報文在接收和發(fā)送過程中,需要通過多個層次,包括事務(wù)層、數(shù)據(jù)鏈路層和物理層。PCIE總線的層次結(jié)構(gòu)如圖2所示。

        圖2 PCIE總線層次結(jié)構(gòu)

        PCIE中,數(shù)據(jù)報文首先在設(shè)備的核心層(Device Core)中產(chǎn)生,然后經(jīng)過該設(shè)備的事務(wù)層(Transaction Layer)、數(shù)據(jù)鏈路層(Data Link Layer)和物理層(Physical Layer),最終發(fā)送出去。在接收端的數(shù)據(jù)也需要經(jīng)過物理層、數(shù)據(jù)鏈路層和事務(wù)層,最終到達(dá)核心層。

        在PCIE的數(shù)據(jù)鏈路層使用Switch擴(kuò)展PCIE鏈路后,PCIE鏈路能夠連接多個設(shè)備,從而擴(kuò)展整個PCIE系統(tǒng)。

        PCIE總線規(guī)定訪問PCIE設(shè)備配置空間的總線事務(wù),即配置讀寫總線事務(wù),使用ID號進(jìn)行尋址,PCI設(shè)備的ID號是由總線號(Bus Number)、設(shè)備號(Device Number)和功能號(Function Number)組成[4]??偩€號是在主橋遍歷PCIE總線時確定,是由驅(qū)動程序及PCIE中總線中中Switch橋的個數(shù)決定的,主橋相連的總線編號為0。設(shè)備號由PCI設(shè)備的IDSEL信號與PCI總線地址線的連接關(guān)系確定,功能號與PCI設(shè)備的具體設(shè)計相關(guān)。

        3 CPU平臺

        本文中使用的CPU平臺為自研的基于Freescal PowerPC P1022處理器的板卡,板載一片F(xiàn)PGA作為協(xié)處理器,兩者之間通過PCIE總線進(jìn)行通信,板載PCIE設(shè)備拓?fù)淙鐖D3所示:

        圖3 板載PCIE拓?fù)浣Y(jié)構(gòu)

        CPU平臺通過CPCI連接器連接PCI總線背板,從而擴(kuò)展CPU的外設(shè),PCI外設(shè)和CPU之間的通信過程為:背板PCI總線->PCI8250橋->PLX8112橋-> HOST 1->CPU。

        FPGA協(xié)處理器通過PCIE總線與 HOST 3連接。

        4 QNX的多主橋PCIE總線驅(qū)動實現(xiàn)

        4.1 創(chuàng)建底層硬件接口

        在POWERPC P1022處理器的HOST主橋中,與PCIE設(shè)備相關(guān)的寄存器為CONFIG_ADDR和CONFIG_DATA。驅(qū)動程序使用CONFIG_ADDR和CONFIG_DATA寄存器訪問PCI設(shè)備的配置空間,P1022處理器中PCIE總線配置寄存器地址偏移和屬性如表1所示:

        表1 寄存器地址偏移和屬性表

        驅(qū)動程序定義硬件接口結(jié)構(gòu)體pdrvr_entry_t p2020_ entry,結(jié)構(gòu)體內(nèi)容如圖4所示:

        圖4 驅(qū)動程序硬件接口結(jié)構(gòu)體

        p2020_attach函數(shù)獲取系統(tǒng)分配給PCI總線的資源;p2020_detach函數(shù)作用釋放系統(tǒng)分配給PCI總線的資源;p2020_cnfg_bridge函數(shù)設(shè)置PCI主橋的地址;p2020_read_ cnfg函數(shù)通過寫CONFIG_ADDR寄存器,然后再讀寄存器CONFIG_DATA獲取PCI設(shè)備配置空間的值;p2020_write_ cnfg函數(shù)通過寫CONFIG_ADDR寄存器,然后再寫寄存器CONFIG_DATA修改PCI設(shè)備配置空間的值;p2020_map_ addr函數(shù)將PCI域空間地址轉(zhuǎn)換為存儲器域空間地址;p2020_bus_info函數(shù)設(shè)置PCI主橋以及映射的內(nèi)存和I/O資源信息。

        4.2 初始化PCI設(shè)備樹

        創(chuàng)建PCI設(shè)備樹需要對整個PCI系統(tǒng)進(jìn)行遍歷,采用DFS(深度優(yōu)先搜索:Depth-First Search)算法進(jìn)行遍歷,遍歷過程的程序流程圖如圖5所示:

        圖5 遍歷過程流程圖

        在遍歷設(shè)備的過程中需要為樹中設(shè)備分配內(nèi)存資源和I/O資源,為PCI橋分配的內(nèi)存資源和I/O資源是橋下掛載的設(shè)備的總和。將遍歷搜索到的設(shè)備存放在設(shè)備鏈表中,定義設(shè)備鏈表的頭指針和尾指針Device* DeviceHead *Device- Tail,結(jié)構(gòu)體Device定義如圖6所示:

        圖6 Device結(jié)構(gòu)體

        結(jié)構(gòu)體中記錄了指向下一個設(shè)備的指針,設(shè)備所在總線號、設(shè)備的功能號、設(shè)備廠商ID、設(shè)備ID、設(shè)備類型、設(shè)備分配的內(nèi)存基地址、I/O基地址以及指向設(shè)備所在總線信息結(jié)構(gòu)體的指針等設(shè)備重要信息。

        4.3 創(chuàng)建上層應(yīng)用進(jìn)程接口

        上層應(yīng)用進(jìn)程通過消息調(diào)用本驅(qū)動程序的接口函數(shù)完成對PCI總線訪問,因此需要在驅(qū)動程序設(shè)置的上層應(yīng)用進(jìn)程接口含義如表2所示:

        表2 應(yīng)用接口函數(shù)

        上層應(yīng)用進(jìn)程通過向本驅(qū)動程序發(fā)送相應(yīng)的消息來調(diào)用接口函數(shù)去訪問PCI總線。

        4.4 創(chuàng)建消息通道

        驅(qū)動程序需要建立消息通道,以使上層應(yīng)用進(jìn)程能夠向驅(qū)動程序發(fā)送消息[2]。首先通過dispatch_create()函數(shù)創(chuàng)建并返回一個dispatch數(shù)據(jù)結(jié)構(gòu),在這個數(shù)據(jù)結(jié)構(gòu)中包含通道的ID。初始化消息屬性結(jié)構(gòu)體resmgr_attr_t、resmgr_attr,使用函數(shù)iofunc_attr_init()函數(shù)初始化使用設(shè)備屬性,使用iofunc_ func_init()函數(shù)初始化處理消息的功能,使用resmgr_attach()函數(shù)進(jìn)行連接,建立真正的消息通道,使設(shè)備和文件能夠相連,最后使用函數(shù)dispatch_block()接收消息,dispatch_handler()函數(shù)解析消息,根據(jù)接收到的消息調(diào)用相應(yīng)的處理功能。

        4.5 系統(tǒng)創(chuàng)建PCIE設(shè)備樹

        在P1022中啟動QNX系統(tǒng),運(yùn)行編譯生成的驅(qū)動pci- p2020-vv,得到的結(jié)果如圖7所示,經(jīng)過和設(shè)計的PCI樹比較,本驅(qū)動能夠準(zhǔn)確生成設(shè)備樹,滿足驅(qū)動程序要求。

        圖7 編譯結(jié)果

        5 小結(jié)

        在QNX系統(tǒng)下開發(fā)設(shè)計PCIE總線驅(qū)動程序,能夠擴(kuò)展P1022處理器外設(shè)。PCIE驅(qū)動程序具有良好的硬件和應(yīng)用程序接口,應(yīng)用程序通過本驅(qū)動方便訪問底層PCI/PCIE設(shè)備,便于對整個系統(tǒng)進(jìn)行擴(kuò)展,本驅(qū)動程序已經(jīng)用于軌道交通的列車牽引系統(tǒng)中,效果良好。

        猜你喜歡
        主橋驅(qū)動程序寄存器
        Lite寄存器模型的設(shè)計與實現(xiàn)
        北海市西村港跨海大橋主橋總體設(shè)計
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        平頂山市神馬路湛河橋主橋方案設(shè)計
        上海公路(2017年4期)2017-03-01 07:04:19
        閬中市嘉陵江三橋主橋設(shè)計及計算
        西安富裕路灃河大橋主橋結(jié)構(gòu)設(shè)計
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        一種可重構(gòu)線性反饋移位寄存器設(shè)計
        驅(qū)動程序更新與推薦
        驅(qū)動程序更新與推薦
        国产激情视频在线观看你懂的| 亚洲精品成人区在线观看| 国产jizzjizz视频免费看| 亚洲一区二区三区在线中文| 丝袜av乱码字幕三级人妻| 日本中国内射bbxx| 国产精自产拍久久久久久蜜 | 中文字幕有码在线亚洲| 中文字幕在线观看| 永久免费的av在线电影网无码| 国产成年无码久久久免费| 日本黄网色三级三级三级| 特级做a爰片毛片免费看| 无码人妻精品一区二区三区在线| 久久久久一| 亚洲中文字幕乱码在线观看| 国产a级毛片久久久精品毛片| 日本护士吞精囗交gif| 无码人妻中文中字幕一区二区| 精品国产日韩亚洲一区在线| 精品国产乱码久久久久久郑州公司| 亚洲av无码一区二区三区在线| 亚洲黄片久久| 国产自拍视频在线观看免费| 国产在线观看无码免费视频| 国产中文制服丝袜另类| 久久本道久久综合一人| 新婚少妇无套内谢国语播放| 亚洲av无码日韩精品影片| 亚洲精品综合色区二区| 亚洲一区二区三区av资源| 亚洲va无码va在线va天堂| 精品四虎免费观看国产高清| 国产亚洲精品一区二区在线播放| www夜插内射视频网站| 日韩人妻无码一区二区三区久久99| 官网A级毛片| 久久人妻一区二区三区免费 | 老太脱裤让老头玩ⅹxxxx| 九九日本黄色精品视频| 伊人久久这里只有精品|