一个让你轻松配置ESP32 WIFI的库

ESP32 带有 WIFI 功能,而众所周知要想让一个设备连接WIFI AP 需要告知设备对应 AP 的名称和密码,简单实验的话,可以直接在代码中写死这两个参数,但这种情况下烧写之后设备只能在固定的环境下使用。https://github.com/tzapu/wifimanager 这个项目可以解决上述问题。先说一下这个东西如何使用:

  1. 编译下载Arduino\libraries\WiFiManager-master\examples\OnDemand下面的代码
  2. 上电运行之后短接 Pin0
  3. 用手机查找OnDemandAP 这个 AP
  4. 连接之后自动打开下面的界面

5.选择 Configu[......]

阅读全文

Step to UEFI (263)实验:直接修改QEMU的启动顺序

当我们使用如下 Command 启动 QEMU 的时候,能够将 d:\tmp 目录映射为 fs0:

之后,可以在这个目录中看到一个名为 NvVars 的文件。这次实验的目标是直接修改 NvVars 文件来实现调整启动顺序。例如:启动之后在 Setup 中可以看到如下4个启动设备:

1.进入Shell 后使读取变量的命令,将变量保存在 Result.txt 文件中:

2.在 Debug Log 中可以看到如下字样,就是说 OVMF 在启动过程中会读取NvVars这个文件作为变量:

3.进一步分析,读取动作来自 ovmfpkg\library\nvvarsf[......]

阅读全文

Step to UEFI (262)给 QEMU 的 BIOS 增加 BootMenu快捷键

在实验中,我发现 QEMU 启动的虚拟机并不支持调出 BootMenu,为此研究一下如何修改BIOS 添加这个功能。

前面的实验中,我们在启动项目中插入了自定义的 Application,主要代码在BdsPlatform.c 中。继续查看这个文件,可以看到分配快捷键的代码:

和EmulatorPkg 中的PlatformBdsRegisterStaticBootOptions() 函数进行对比(代码位于 \EmulatorPkg\Library\PlatformBmLib\PlatformBm.c中),可以看到后者注册了多个快捷键对应着不同的功能:

最终修改\Ovmf[......]

阅读全文

NASM Assert 一个错误的方法

有时候为了确定代码是否编译到,我们需要在代码中添加让编译器报错的指令,对于 MASM 来说是 .ERR。在 NASM 中是”%error”【参考1】。编写例子如下:

编译时会自动报错如下:

此外,从我的实验来看,在 BIOS 代码中的 NASM 代码中随意插入字符并不能使得编译过程报错停止下来,所以如果有需要务必使用上述方法。

参考:

  1. https://www.nasm.us/doc/nasmdoc4.html#section-4.9

4.9 Reporting User-Defined Errors: %error, %warning, %fata[......]

阅读全文

Windows 全自动安装

之前介绍过的通过WinPE启动,通过软件将安装好的硬盘制作成镜像,然后当有需要时直接恢复的方法。但是更多时候我们出于测试的目的,需要安装最新版本的 Pure OS​。 这次介绍的全自动安装也就是无人值守模式安装,就是说只需要启动到安装盘上,Windows会自动完成包括分区格式化在内的全部工作。这是Windows自带的功能,只需要将特定的autounattend.xml 放置在启动盘的根目录下即可。具体做法如下:

1. 在 https://schneegans.de/windows/unattend-generator/ 根据需要生成 autounattend.xml 文件;

[......]

阅读全文

Step to UEFI (261)BootMenu插入自己的Application

在QEMU 的Boot Manager/Menu 中可以看到”EFI Internal Shell” 这个选项,选中之后会跳转到其中执行 Shell.efi,这次就尝试编代码在其中插入能够启动到自己Application的选项。

首先我们研究一下这个选项是如何插入的。在\ovmfpkg\library\platformbootmanagerlib\BdsPlatform.c 的 PlatformBootManagerAfterConsole()函数中有:

其中gUefiShellFileGuid 的定义在 \ShellPkg\ShellPkg.dec

也可以在\S[......]

阅读全文

ESP32 创建图片 WebServer

这次介绍一个比较好玩的:通过 ESP32 创建一个 WebServer ,通过浏览器访问的时候自动播放预先定义好的图片序列。

制作方法:

1.创建一个 640x480的图片,放上彩色文字,便于观察,保存为 JPG 格式

2.旋转文字,再保存成另外一个文件

3.重复上述动作我们能获得4个文件

4.使用 bin2c 工具将四个文件转化为4个C语言h文件

5.文件头定义中做一点调整,图片大小命名为  picN_size, 内容命名为 picN 这种

6.接下来就可以编写我们的代码了

7.运行之后串口监视器会输出当前 WebSe[......]

阅读全文

Max3421e 避雷指南

熟悉我的朋友都知道这些年我玩的最多的就是 Arduino USB Host Shield,它的核心就是 MAX3421e芯片,没想到这次居然碰到了假芯片的问题。

差不多半年前,偶然间我在网上看到一个优惠活动,这款芯片芯片只要35.049元/个。随即下单购买了10个芯片:

拿到手之后发现买到的并非我经常使用的封装。这款芯片有2种封装:

带爪的 32 TQFP

不带爪的 32TQFN-EP

一般情况下,最好购买带爪的那种对于DIY来说更友好,容易焊接。因为买错了,正好之前的还没有消耗殆尽,于是将这十个放进了干燥箱,直到前几天那个炎热的下午。设计的板子到[......]

阅读全文

Step to UEFI (260)Section Alignment(0x20) is not 4K

查看 Log 的过程中,发现在 DXE 阶段有错误报出,本文针对这个问题进行了一点研究。

首先,遇到的错误信息如下:

接下来定位。输出错误的代码位于 \mdemodulepkg\core\dxe\misc\MemoryAttributesTable.c 中的InsertImageRecord() 函数中:

在\MdePkg\Include\X64\ProcessorBind.h 有如下定义:

可以看到,SectionAlignment 来自 Hdr.Pe32Plus->OptionalHeader.SectionAlignment,使用 CFF 查看[......]

阅读全文