【我所認知的BIOS】—>Decompression补充

本文是对BIOS解压缩的补充,详细介绍了BIOS中模块的LZH格式存在形式,解压缩后数据存放的内存位置,以及模块并非一次性全部解压缩,而是在需要时按需解压到4000:0处。

【我所認知的BIOS—>Decompression补充

By LightSeed

2009-6-4

这篇文章主要是对上一篇文章Decompression的补充,上一篇文章一是考虑到篇幅,二是考虑到还没有谈到反汇编BIOS二进制文件,所以没有讲的很详细。在这篇文章中举个BIOS的例子来详细说明AWxxx  code在运行过程中解压缩的过程。(筆者:不管是解壓還是PCI的資源分配我們在掌握的時候都要首先掌握其框架,這個才是最重要的。在掌握了框架的基礎上再去跟code才會有事半功倍的效果。而且這樣也能夠讓你的知識更加體系化。)這補充的文章著重從解壓的結構上講,沒有講很細節的東西。

1BIOS中模块存在形式

BIOS的二进制文件中我们可以用查看二进制文件的编辑器可以看到,各个模块存在的形式。上一章我们有详细讲LZH文件的格式,它们有固定的header和固定的模块结尾。(陌生的话建议先看看LZH

在遇到 **"decompression failed"** 类型的错误时,问题通常与压缩/解压过程中的数据完整性、硬件性能、网络下载中断或配置问题有关。以下是一些常见原因及对应的解决方法: ### 数据完整性问题 如果压缩文件本身存在损坏,例如在下载过程中网络中断或传输失败,可能会导致解压失败。可以通过以下方法解决: - **重新下载文件**:确保下载源的完整性,使用可靠的网络连接重新下载文件。 - **验证文件校验值**:通过 `md5sum` 或 `sha256sum` 验证文件的完整性[^2]。 ```bash sha256sum filename.gz ``` ### 压缩库或工具问题 某些解压错误可能由压缩库(如 zlib 或 xz)的问题引起。例如: - **zlib 数据错误**:当使用 zlib 解压时出现 `Z_DATA_ERROR`,可能是压缩数据格式不正确或损坏。可以尝试使用不同的工具或版本进行解压。 - **xz 解压失败**:Linux 内核中出现 `xz decompression failed` 错误可能与内核配置有关,例如 `CONFIG_NO_HZ_IDLE` 选项可能导致某些硬件上的解压失败。解决方法包括: - 禁用 `CONFIG_NO_HZ_IDLE` 和 `CONFIG_NO_HZ_COMMON` 选项。 - 启用 `CONFIG_HZ_PERIODIC=y` 以避免软中断处理延迟[^4]。 ### 网络与虚拟化问题 在虚拟化环境中(如使用 Vagrant 和 VirtualBox),解压失败可能与网络中断有关: - **网络超时**:如果遇到 `Failed to connect to vagrantcloud-files-production.s3.amazonaws.com` 错误,可以尝试以下方法: - 确保使用最新版本的 Vagrant。 - 在管理员权限下运行命令行工具(如 CMD)以提高网络访问权限。 - 手动下载相关文件并导入到虚拟化环境中[^3]。 ### 内存和缓冲区问题 - **缓冲区不足**:某些解压操作(如 SVN 解压)可能因缓冲区大小不足而失败。可以尝试增加缓冲区大小或优化解压逻辑。 - **内存不足**:确保系统有足够的内存资源,尤其是在处理大文件时。 ### 工具推荐 - **使用 `bsdtar` 或 `7z` 替代工具**:某些情况下,原生的 `tar` 或 `gzip` 工具可能无法正确处理损坏的压缩包,尝试使用 `bsdtar` 或 `7z` 提供更详细的错误信息和更强的容错能力[^3]。 ```bash 7z x filename.gz ``` ### 总结 解决 **"decompression failed"** 问题的关键在于排查数据完整性、压缩库兼容性、网络连接以及系统配置。根据具体场景选择合适的解决方法,如重新下载、验证校验值、调整内核配置或使用替代解压工具。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值