这里【参考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。
同样,虚拟机中需要打开串口,我是采用 pipe通讯的方法在虚拟机中模拟出来com1。
之后再打开putty,设置如下:
双方连接之后即可进行通讯。
本文提到的代码下载:
SerialTest
制作好的 ISO下载
test
特别提醒:VirtualBox 的BIOS有一些问题(至少5.0.20 r106931依然如此),无法彻底关闭Redirection功能,所以如果你要用它来实验一些串口相关内容时,需要特别注意,显示在虚拟机EFI Shell下面的东西还会发送一份到串口上。
参考:
1. https://github.com/tianocore/edk2/tree/master/OptionRomPkg/Bus/Usb/FtdiUsbSerialDxe
常拜讀您的文章, 想請問您有研究過 如何從SerialIO Protocol 得知所使用的IO為何呢?
ex : SerialIO Protocol port 1 , IO = 0x3F8
SerialIO Protocol port 2 , IO = 0x2F8 ….etc
我没有研究过,不过你可以看一下 \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
回头我研究一下。
請問
SerialTest
test
還能下載嗎?,點擊沒有反應
可以下载,我刚测试过。你试试 copy 下来 link ,然后粘贴在新的窗口看看。
网站打开了反盗链的机制,有时候正常下载也会被误判
謝謝搂,可以了
複製連結去新視窗下載即可