女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux終端初始化和tty驅動框架

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:Jasonangel ? 2023-09-28 16:33 ? 次閱讀

initcall機制

注意上述流程,我們來理解一下 initcall 機制:

普通我們寫一個程序,想要它被調用,需要在主流程中調用這個函數,才算被調用。

那么這種方式如果放在 Linux 中,是難以想象的,我們自己寫的代碼要在多少個地方聲明。

而你如果采用initcall機制,意思就是說,你使用一個字符串聲明你的驅動初始化函數,那么所有的驅動初始化函數都存在內存中一個連續的段中,系統啟動以后,會從這個段的第一個函數開始,一個一個遍歷,進而一個一個調用,這就是initcall 機制。這就是為什么我們寫驅動只需要使用 module_init 聲明,編譯進去即可自動被調用的原因!??!

System.map

編譯后的內核根目錄 System.map 文件記載了所有的驅動加載順序,如果你不確定驅動的加載順序,在這里查看就可以,每次編譯 Linux 內核就會產生一個新的 System.map。

tty 驅動

我們不要把 tty 驅動和 串口驅動 弄混了,tty 驅動架構如下:

圖片

其中 tty driver 等價于我們普通寫的驅動,可以自己寫。

也就是說,在 tty 驅動框架主要有三層:tty core、tty line discipline、tty driver,另外最上層是用戶空間,最下層是硬件。

tty core 稱之為 tty 核心,主要作用是向用戶提供統一的接口。

tty line discipline 稱之為 tty 線路規程,主要從上下兩層接收數據,并按照一定協議進行轉換,比如 ppp 或者藍牙協議,這樣你的tty 終端就不止可以用普通的串口,還可以通過其他協議訪問到我們的系統。比如手機鏈接 PCB 板子的 WiFi 接入系統控制終端,輸入 ls、cd等命令。這一層并不是必須的,你可以直接使用驅動和 tty core 進行通信,但一般這一層都會有。

tty driver 就是我們常說的串口驅動。

在 console_init 函數中,它做的兩件事,就是注冊 tty 線路規程,注冊 tty 驅動,tty 核心是包含在內核當中的。tty 線路規程和tty 驅動可以有很多個。

有的人會有疑問,為什么有了 tty 驅動了,還會有一個 tty 線路規程。得益于 Linux 模塊化的思想,這里主要是為了分層與隔離。tty驅動只和硬件相關,只解析基本的硬件信息,把硬件信息轉換成字符。所有的對字符的進一步處理包括加入藍牙協議傳輸,監控數據等都放在 tty 線路規程當中。這樣 tty
驅動是可以完美復用和移植的。

分享一張彭大佬的圖,本文我只講了概念,彭大佬講解過 tty 源碼:

圖片

這里只需要注意一點,在右下角,tty driver 是沒有 read 函數的,tty driver 層有 buffer,輸入的數據會存儲在buffer 中,被讀取。

原因很簡單,對于 tty 來說,輸入設備和輸出設備不是同一個設備,輸入設備是鍵盤,輸出設備是屏幕,這和普通的 IIC、SPI驅動同一個設備不一樣。因此在設計上 tty driver 沒有 read 函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1899

    瀏覽量

    86525
  • Linux
    +關注

    關注

    87

    文章

    11459

    瀏覽量

    212780
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    17788
  • 終端
    +關注

    關注

    1

    文章

    1193

    瀏覽量

    30631
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    手機模塊初始化向導

    手機模塊初始化向導:為了剛好的對手機模塊進行初始化,所以把最基本的向導寫下來.本向導適用于本公司的西門子TC35I和華為GT9000模塊。一、在初始化手機模塊前,請先確定DT
    發表于 09-18 09:41 ?17次下載

    LINUX系統引導和初始化-LINUX內核解讀

    Linux 的系統引導和初始化 ----------Linux2.4.22內核解讀之一 一、 系統引導和初始化概述 相關代碼(引導扇區的程序及其輔助程序,以 x86體系為例): \
    發表于 11-03 22:31 ?53次下載

    RDA1846S初始化設置

    RDA1846S初始化設置RDA1846S初始化設置RDA1846S初始化設置
    發表于 01-15 17:08 ?0次下載

    UCOS_III_配置與初始化

    UCOS_III_配置與初始化
    發表于 12-20 22:53 ?5次下載

    HX711初始化程序

    這是HX711的初始化程序
    發表于 02-08 01:51 ?92次下載

    Linux內存初始化

    之前有幾篇博客詳細介紹了Xen的內存初始化,確實感覺這部分內容蠻復雜的。這兩天在看Linux內核啟動中內存的初始化,也是看的云里霧里的,想嘗試下邊看邊寫,在寫博客的過程中慢慢思考,最后也能把自己
    發表于 10-12 11:16 ?0次下載

    8253初始化程序分享_8253應用案例

    本文首先介紹了8253概念及8253各通道的工作方式,其次詳細介紹了8253初始化要求及編程,最后用一個例子介紹了8253的初始化程序。
    發表于 05-23 15:52 ?2.3w次閱讀
    8253<b class='flag-5'>初始化</b>程序分享_8253應用案例

    IIC總線初始化基本驅動參考程序應用代碼免費下載

    本文檔的主要內容詳細介紹的是IIC總線初始化基本驅動參考程序應用代碼免費下載。程序功能:為IIC總線的基本驅動程序(此程序沒有寫主函數,只是一些IIC必備的子函數)
    發表于 01-16 08:00 ?5次下載
    IIC總線<b class='flag-5'>初始化</b>基本<b class='flag-5'>驅動</b>參考程序應用代碼免費下載

    Linux內核初始化過程中的調用順序

    所有的__init函數在區段.initcall.init中還保存了一份函數指針,在初始化時內核會通過這些函數指針調用這些__init函數指針,并在整個初始化完成后,釋放整個init區段(包括.init.text,.initcall.init等)。
    發表于 05-12 08:40 ?1745次閱讀

    在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決

    本文檔的主要內容詳細介紹的是在51平臺下初始化文件的引入導致全局變量無法初始化的問題如何解決。
    發表于 08-20 17:31 ?0次下載
    在51平臺下<b class='flag-5'>初始化</b>文件的引入導致全局變量無法<b class='flag-5'>初始化</b>的問題如何解決

    C++之初始化列表學習的總結

    類中可以使用初始化列表對成員進行初始化。
    的頭像 發表于 12-24 17:39 ?1056次閱讀

    Nand Flash驅動(實現初始化以及讀操作)

    Nand Flash驅動(實現初始化以及讀操作)
    發表于 12-02 12:36 ?11次下載
    Nand Flash<b class='flag-5'>驅動</b>(實現<b class='flag-5'>初始化</b>以及讀操作)

    tty驅動接口分析

    tty這個名稱源于電傳打字節的簡稱,在linux表示各種終端終端通常都跟硬件相對應。比如對應于輸入設備鍵盤鼠標,輸出設備顯示器的控制終端
    的頭像 發表于 07-14 12:21 ?1439次閱讀
    <b class='flag-5'>tty</b><b class='flag-5'>驅動</b>接口分析

    MSP430F5529硬件IIC驅動OLED(初始化使用的寄存器)

    MSP430F5529硬件IIC驅動OLED(初始化使用的寄存器)
    發表于 11-24 16:36 ?1次下載

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?849次閱讀
    基于旋轉平移解耦<b class='flag-5'>框架</b>的視覺慣性<b class='flag-5'>初始化</b>方法