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

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

3天內不再提示

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

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

initcall機制

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

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

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

而你如果采用initcall機制,意思就是說,你使用一個字符串聲明你的驅動初始化函數,那么所有的驅動初始化函數都存在內存中一個連續(xù)的段中,系統啟動以后,會從這個段的第一個函數開始,一個一個遍歷,進而一個一個調用,這就是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 線路規(guī)程,主要從上下兩層接收數據,并按照一定協議進行轉換,比如 ppp 或者藍牙協議,這樣你的tty 終端就不止可以用普通的串口,還可以通過其他協議訪問到我們的系統。比如手機鏈接 PCB 板子的 WiFi 接入系統控制終端,輸入 ls、cd等命令。這一層并不是必須的,你可以直接使用驅動和 tty core 進行通信,但一般這一層都會有。

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

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

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

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

圖片

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

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

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

    關注

    12

    文章

    1790

    瀏覽量

    84913
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207921
  • 框架
    +關注

    關注

    0

    文章

    396

    瀏覽量

    17270
  • 終端
    +關注

    關注

    1

    文章

    1080

    瀏覽量

    29726
收藏 人收藏

    評論

    相關推薦

    手機模塊初始化向導

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

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

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

    RDA1846S初始化設置

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

    UCOS_III_配置與初始化

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

    HX711初始化程序

    這是HX711的初始化程序
    發(fā)表于 02-08 01:51 ?89次下載

    Linux內存初始化

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

    Bootloader中LCD硬件初始化和軟件驅動程序設計

    Android系統在正常啟動中,刷屏功能一般在內核中執(zhí)行,而Bootloader的任務應該是執(zhí)行硬件初始化,并盡快跳轉到Linux內核。在Bootloader啟動過程中使能一個顯示驅動,實現刷屏功能
    的頭像 發(fā)表于 03-07 14:05 ?8818次閱讀
    Bootloader中LCD硬件<b class='flag-5'>初始化</b>和軟件<b class='flag-5'>驅動</b>程序設計

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

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

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

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

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

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

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

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

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

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

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

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

    tty驅動接口分析

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

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

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