网站大量收购闲置独家精品文档,联系QQ:2885784924

终端机是核心与使用者间重要的通讯模式.ppt

终端机是核心与使用者间重要的通讯模式.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
终端机是核心与使用者间重要的通讯模式

* OS Project final report Terminal 組員: 696415083 李明翰 696415055 陳正澤 outline Introduction Code Analysis Conclusion Introduction 終端機是核心與使用者間重要的通訊模式 在Linux下看到的console是由幾個設備所完成,分別是/dev/ttyN 其中tty0就是/dev/console,tty1、tty2就是不同的virtual console Introduction(cont.) 所有的這些tty設備都是由linux/drivers/char/console.c和vt.c對應。 console.c負責繪制螢幕上的字元,同時也負責接收終端的輸入﹐然後把接收到的輸入放到緩衝區。 vt.c負責管理不同的虛擬終端﹐並且負責提供console.c需要繪制的內容,管理著這樣一個緩衝區的陣列﹐並且負責在其間切換﹐以指定哪一個緩衝區是被動作的。你所看到的虛擬終端就對應著被動作的緩衝區。 Introduction(cont.) Framebuffer Framebuffer是把顯存抽象後的一種設備﹐可以通過這個設備的讀寫直接對顯存進行操作。這種操作是抽象的﹐統一的。用戶不必關心物理顯存的位置﹑換頁機制等等具體細節。這些都是由Framebuffer設備驅動來完成的。 對應的來源檔案在linux/drivers/video/目錄下。抽象設備檔案為fbcon.c﹐在這個目錄下還有與各種顯卡驅動相關的源檔案。在使用時﹐Linux是將顯卡置於圖形模式下的· Code Analysis 敘述字元顯示的過程 在tty1下執行一簡單程式 main ( ) { puts(hello, world.\n); } Code Analysis(cont.) Step 1. Puts函數向預設輸出檔案(/dev/tty1)發出寫的系統呼叫,呼叫核心裡面所對應的函數是vt.c中的con_write() Code Analysis(cont.) Step 2. con_write()最終會呼叫do_con_write(),在期中把”hello , world.\n”這個字串放到tty對應的緩衝區中 其中tty是指向tty_struct結構的指標,這個結構裡面存放著關於這個tty的所有資訊(linux/include/linux/tty.h) Code Analysis(cont.) driver_data是一個vt_struct指標,在vt_struct結構中包含這個tty的序列號,使用tty1,則序號為1。 Code Analysis(cont.) 要存取虛擬終端的私有數據﹐需使用vc_cons〔currcons〕.d指標。這個指標指向的結構含有目前虛擬終端上遊標的位置﹑緩衝區的起始位址﹑緩衝區大小等等。 Code Analysis(cont.) Step 3. hello, world.\n中的每一個字元都要經過conv_uni_to_pc( ) Code Analysis(cont.) Step 4. 經過conv_uni_to_pc( )轉換之後﹐“hello, world.\n”中的字元被一個一個地填寫到tty1的緩衝區中。然後do_con_write( )呼叫下層的驅動﹐把緩衝區中的內容輸出到顯示器上,也就相當於把緩衝區的內容拷貝到VGA顯存中去。 之所以要呼叫底層驅動﹐是因為存在不同的顯示設備﹐其對應VGA顯存的存取方式也不一樣。 Code Analysis(cont.) Sw-con_putcs( )就會呼叫到fbcon.c中的fbcon_putcs()函數con_putcs是一個函數的指標﹐在Framebuffer模式下指向fbcon_putcs()函數),也就是說在do_con_write( )函數中是直接呼叫了fbcon_putcs()函數來進行字元的繪制。 Validation 顯示中文 Q:我們試圖輸出一句中文︰putcs(“你好\n” ),這時候會怎麼樣呢? A:有一點可以肯定﹐”你好”肯定不會出現在螢幕上﹐因為︰核心裡並沒有漢字字庫。 Validation(cont.) 嘗試方案 加載漢字字庫 Ubuntu 安裝完畢後,預設已經安裝兩個中文字型 「文鼎 PL 中楷 Uni (AR PL Zenkai Uni)」 「文鼎 PL 細上海宋 Uni (AR PL ShanHeiSun Uni)」 Validation(cont.) 需要修改……. 自己定制unicode映射表 修改底層函數 kernel-consolemap.c Linux-unicode IBM Codepage 4

您可能关注的文档

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档