特色

招聘信息(更新Intel BIOS测试职位 3月31日)

●2022年3月更新一个 Intel BIOS 测试职位,具体要求可以在下面看到

●2022年1月更新 Ampere Computing职位,具体要求可以在下面看到

●2021年11月更新 Intel Shenzhen职位,具体要求可以在下面看到

LCFC 的一些职位,具体可以在以下页面看到

● AMD BIOS 的一个职位,具体要求在以下页面:

https://www.lab-z.com/amd-bios/

● Ampere Computing 的一个职位 ,要求在以下页面可以看到:

[......]

阅读全文

CH567 上USB0 HOST 实现

这次实现 CH567 USB0 的 USB Host 功能。基于 \EXAM\USB1_HOST 的代码进行修改。其中已经实现了 USB0 HOST HID 的枚举,我们只需要添加针对 ENDPOINT 的读取即可。

在Main中添加如下代码:

其中的 mDelayms() 数值应该根据描述符中的数值进行填写,这里我偷懒了直接使用 1ms。这对于功能没有 影响,USB KB 如果没有数据会直接 NAK 这次的请求。

完整代码:

[......]

阅读全文

Smart AMP

最近研究了一下 Audio 方面的 Smart AMP ,这里简单做一个总结。如果有不准确的地方欢迎大家讨论指出。

Smart AMP 是 TI 在 CES 2015上公布的一种音频技术【参考1】。

简单的说:Smart Amp 表示 Smart Amplifiers,是一种用来在功率小喇叭上播放更大声音的技术。比如:笔记本安装 2W 的喇叭(成本限制或者机构限制只能使用这个功率的),使用这种技术之后可以播放出来 10W 的声音。2W喇叭的意思是:这款只能按照2W功率使用,如果超过这个功率可能会导致喇叭烧毁。Smart Amp 的技术类似于 CPU Turbo,长时间可能会烧毁,我[......]

阅读全文

FireBeetle 帮你把手机变成键盘鼠标

这次做的项目能够帮你把手上的手机变成能够控制电脑的键盘和鼠标。

基本原理上是:用户通过手机应用程序经由BLE蓝牙和FireBeetle 进行通讯,FireBeetle收到之后再通过USB接口将数据发送到电脑上。从原理上看整体分作三部分:硬件的选择和设计,Arduino 代码的编写和手机端程序设计。

首先介绍硬件的选择和设计。FireBeetle是DFRobot 出品的基于 ESP32 的开发板,它能够支持蓝牙和 WIFI 的通讯,它带有USB转串口芯片但是无法将自身模拟为USB键盘鼠标设备,为了实现这个功能,还需要设计一个USB键盘鼠标Shield。经过研究,最终选择了 WCH 出[......]

阅读全文

Intel平台调试的几个概念

在这个页面 https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/secure-coding/intel-debug-technology.html有几个关于 Intel 平台调试基本概念。

首先,如同使用工具进行测量一定会有误差一样,产品天生会有Bug,一些用户要求的产品特性在另外一些用户严重就是Bug。比如,当Setup 中设置 USB Controller 为 Disable 之后,有些用户会发现仍然能够通过USB键盘进入 BIOS Setu[......]

阅读全文

EDK2 202205 来了

目前最新的 EDK2 是 edk2-stable202205,可以在下面的链接下载到:

https://github.com/tianocore/edk2/releases/tag/edk2-stable202205

这次更新了如下内容:

Teensy 3.6 触摸屏功能

Teensy 3.6 支持触摸屏,10指触摸,具体的库在\hardware\teensy\avr\cores\teensy3\usb_touch.c 文件中,下面是一个示例代码,使用了2个手指绘制直线:

特别的,需要在菜单中打开 Touch Screen

另外,如果你使用Windows 10 下面的画板进行测试,需要选中 Brushes,只有这个才支持多点触摸绘图:

[......]

阅读全文

Step to UEFI (265)QEMU ACPI Table 的来源

之前介绍过在 Shell 下面查看 ACPI Table 的工具,例如【参考1】提到的:ACPIView。

接下来的问题就是:上面的这个 DSDT 是从哪里来的?

首先,在代码中找了一圈,竟然一无所获;接下来在Debug Log中查找,发现如下信息,其中的一个 Table 长度是 0x1772(6002)非常接近我们在 Shell 下看到的 6009。

这一段 Log 对应的代码在\OvmfPkg\AcpiPlatformDxe\QemuFwCfgAcpi.c 中。

为了验证猜想,在对应代码中加入调试信息,输出读取到QEMU 的 ACPI DSDT,具体在Ovm[......]

阅读全文

内存的奇怪问题

最近遇到了一个奇怪的问题,经过化简得代码表示如下:

简单的说,在 foo1() 中分配100bytes的内存空间,0然后在foo2() 中在分配100Bytes,但是实践发现,前面分配的内存空间被“冲掉”了。更具体的说:

1.运行 foo1(), 之后查看到 value 的内存地址已经赋值为 0xaa

2.接下来执行 foo2(),但是运行之后,Value 对应的内存空间被覆盖为0x11。

有兴趣的朋友可以自己先琢磨五分钟看看能否找到问题。

最终,这个问题是分配内存的 alloca()导致的:alloca分配的是栈区(sta[......]

阅读全文

Step to UEFI (264)代码读取一个 FFS

最近有一个读取 FFS 的需求,具体来说就是在 DXE 阶段需要读取指定的 FFS 文件的内容。针对这个需求,使用QEMU 进行了一番研究。

OVMF 中继承了 Shell,读取这个的动作和我们需求非常类似,于是在 QEMU 的Log中搜索可以看到如下字样:

对应在代码中位于\mdemodulepkg\library\uefibootmanagerlib\BmLoadOption.c

经过追踪可以看到具体工作的是位于 \mdepkg\library\dxeserviceslib\DxeServicesLib.c的如下函数:

进一步研究,上述函数通过 EFI_[......]

阅读全文