Android深度探索第七章心得

來源:互聯網
上載者:User

標籤:

從上到下,一個軟體系統可以分為:應用程式、庫、作業系統(核心)、驅動程式。開發人員可以專註於自己熟悉的部分,對於相鄰層,只需要瞭解它的介面,無需關注它的實現細節。以點亮LED為例,這4層軟體的協作關係如下:

  1、應用程式使用庫提供的open函數開啟代表LED的裝置檔案。  

  2、庫資料open函數傳入的參數執行“swi”指令,這條指令會引起CPU異常,進入核心。   

  3、核心的異常處理函數根據這些參數找到相應的驅動程式,返回一個檔案控制代碼給庫,進而返回給應用程式。 

  4、應用程式得到檔案控制代碼後,使用庫提供的write或ioclt函數發出的控制命令。  

  5、庫根據write或ioclt函數傳入的參數執行“swi”指令,這條指令會引起異常,進入核心。 

  6、核心的異常處理函數根據這些參數調用驅動程式的相關函數,點亮LED。 

 7、庫(比如glibc)給應用程式提供的open、read、write、ioctl、mmap等介面函數被稱為系統調用,它們都是設定好相關寄存器後,執行某條指令引發異常進入核心。對於ARM架構的 CPU,這條指令為swi。除系統調用介面外,庫還提供其他函數,比如字串處理函數(strepy、strcmp等)、輸入/輸出函數(scanf、printf等)、資料庫,還有應用程式的啟動代碼等。 在異常處理函數中,核心會根據傳入的參數執行各種操作,比如根據裝置檔案名稱找到對應的驅動程式,調用驅動程式的相關函數等。

 LED驅動的實現原理

  儘管Linux驅動直接與硬體打交道,但並不是Linux驅動直接向硬體中的記憶體寫資料,而是與原生I/O記憶體(I/O Memory,位於核心空間)進行互動。所謂I/O記憶體是通過各種借口(PCI、USB、藍芽、乙太網路口等)串連到主機(PC、手機)的硬體(網卡、音效卡、網路攝影機等)

  在主機記憶體中的映射。 例如,在Ubuntu Linux上啟動並執行驅動只需要訪問運行Ubuntu Linux的主機中的I/O記憶體即可,然後Linux核心會利用I/O記憶體中的資料硬體互動。

Android深度探索第七章心得

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.