Cstyle的UEFI导读之Text Console Driver Stack

   

===================================================================== 

固件C字营·版权所有·欢迎转载
敬请关注微信公众号:“固件C字营”
敬请关注QQ群:1052307
敬请关注CSDN博客:Cstyle_0x007

图片

===================================================================== 

        终端服务,所谓的Text 终端服务就UEFI提供给用户和机器打交道的接口,主要包括输入和输出两个部分。输入就是我们的键盘,输出当然就是显示器文本模式输出了,如果显示设备不支持文本模式,就需要模拟文本模式,不过还有一个用来作为debug和远程监视控制的 字符流设备(类似串口) 也是作为输出的一部分。
Simple Text Input Protocol:
    如下是数据结构的定义,里面我们需要特别注意到的一个是EFI_EVENT WatiForKey,在SimpleTextInput.c中有参考的实例。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:Reset()   
    reset 输入设备,比如说键盘
EFI_SIMPLE_TEXT_INPUT_PROTOCOL: ReadKeyStroke() /ReadKeyStrokeEx()
    非阻塞的输入方式,执行完后立即返回,不会等待键盘的输入。输入的数据需要进行转换成EFI_INPUT_KEY 、EFI_KEY_DATA
EFI_SIMPLE_TEXT_INPUT_PROTOCOL: WaitForKey/ WaitForKeyEx:
    一旦EVENT被创建,他们必须要与EVENT notification function链接起来,一旦输入设备的缓冲中有我们需要的数据的时候,那么这两        种EVENT就会被UEFI BS服务 SignalEvent()设置为signaled状态。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL: SetState()
    设置输入设备的状态,比如键盘的大小写指示灯,数字键盘锁定灯等等。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL: RegisterKeyNotify()
    用来注册一个notification 函数,当按键被按下的时候,执行该函数。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL: UnregisterKeyNotify()
    执行RegisterKeyNotify()相反的动作。
Simple Text Output Protocol:
    如下是数据结构的定义,SimpleTextOutput.c有参考实例:
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:Reset()
    重设显示模式,和清除显示屏。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: OutputString()
    输出Unicode字符串到终端,同时需要检测设备显示模式的设置,输出的字符串是否合法,输出完成后,设置光标位置。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: TestString()
    检测输出的字符串是否合法。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: QueryMode()
    检测设备支持的输出模式,最少需要支持80x25的文字模式。可以侦测支持的所有的模式和当前的模式(RowsXColumns)。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: SetMode()
    设置输出的模式,可以提供给上层的服务来调用。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: SetAttribute()
    设置如何把字符显示在终端上,主要是指前景色和背景色等等。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: ClearScreen()
    清屏,清除所有的显示的字符,把屏幕设置成背景色,设置光标到原点(0.0)
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: SetCursorPosition()
    设置光标的位置,或者说是下次输出的位置,注意不要超出,显示模式的行和列的范围。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: EnableCursor()
    设置是否要显示光标,但是不会影响上面提到的输出的光标定位。
Serial I/O Protocol:
如下是数据结构的定义,SerialIo.c有参考实例:
EFI_SERIAL_IO_PROTOCOL:Reset()
    重置硬件。
EFI_SERIAL_IO_PROTOCOL: SetAttributes()
    设置串口的BaudRate, ReceiveFifoDepth, Timeout, Parity, DataBits, and StopBits等参数。
EFI_SERIAL_IO_PROTOCOL: SetControl() and GetControl()
    设置和读取串口设备的各种控制位。
EFI_SERIAL_IO_PROTOCOL: Write() and Read()
    往串口设备写数据,或者从其读数据。有提供超时机制,一旦超时就好反馈给上层EFI_TIMEOUT错误;有些串口还提供了FIFO,也可能你刚好运气不佳,在写入的时候刚好FIFO是满的,那么你就需要先刷新FIFO,然后根据FIFO的深度,做一个合理的比设置的延时时间稍长的时间,而不是简单的返回超时错误。
OK,Done!
转载请注明出处Cstyle.z.zhou@gmail.com//http://blog.csdn.net/CStyle_0x007

===================================================================== 

固件C字营·版权所有·欢迎转载
敬请关注微信公众号:“固件C字营”
敬请关注QQ群:1052307
敬请关注CSDN博客:Cstyle_0x007

图片

===================================================================== 

@微信公众号《固件C字营》不定期更新状态,关注&订阅公众号不迷路。

完整PDF版整理中,可以在CSDN下载频道搜索”UEFI内核导读“下载样张......

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值