Step to UEFI (91) Shell下的串口测试软件

这里【参考1】提供了一个Shell下调用 SerialIO Protocol 进行通讯的 Application。下面介绍一下如何重新编译和使用这个程序。

这里我使用UDK2014下面的 EADK作为编译环境:
1. 将代码目录copy到EADK的AppPkg\Application 下面
2. 需要在 AppPkg.dsc中加入下面的代码
[LibraryClasses] 下面加入
UefiHandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
3. 同样使用 build –a IA32 –p AppPkg\AppPkg.dsc 进行编译
4. 编译之后即生成了 Serial-Test.efi

我选择在 VirtualBox 中测试这个 Application。把它放在一个 ISO 之中,挂接启动到 UEFI虚拟机中,然后在 FS0: 下面即可看到这个 Application。

image001

同样,虚拟机中需要打开串口,我是采用 pipe通讯的方法在虚拟机中模拟出来com1。

image002
之后再打开putty,设置如下:
image003
双方连接之后即可进行通讯。
image004

image005

可以看到双方能够进行正常的通讯。
image006

本文提到的代码下载:
SerialTest
制作好的 ISO下载
test

特别提醒:VirtualBox 的BIOS有一些问题(至少5.0.20 r106931依然如此),无法彻底关闭Redirection功能,所以如果你要用它来实验一些串口相关内容时,需要特别注意,显示在虚拟机EFI Shell下面的东西还会发送一份到串口上。
参考:
1. https://github.com/tianocore/edk2/tree/master/OptionRomPkg/Bus/Usb/FtdiUsbSerialDxe

Step to UEFI (91) Shell下的串口测试软件》上有 2 条评论

  1. KaoTuz

    常拜讀您的文章, 想請問您有研究過 如何從SerialIO Protocol 得知所使用的IO為何呢?

    ex : SerialIO Protocol port 1 , IO = 0x3F8
    SerialIO Protocol port 2 , IO = 0x2F8 ....etc

    回复
    1. ziv2013 文章作者

      我没有研究过,不过你可以看一下 \UDK2017\IntelFrameworkModulePkg\Bus\Isa\IsaSerialDxe\Serial.h

      这个定义
      #define SERIAL_DEV_FROM_THIS(a) CR (a, SERIAL_DEV, SerialIo, SERIAL_DEV_SIGNATURE)

      如果一个 SerialIo 能够满足 SERIAL_DEV 定义,那么就可以取得他的baseaddress

      回头我研究一下。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注