此仓库包含跟随博客 https://werwolv.net/posts/linux_bringup/ 所需的所有源代码。 /lib 包含完整的 rv32ima 指令集模拟器代码以及一组最小化的模拟设备。 /main 包含机器配置和为 WebAssembly 使用而暴露的函数。 构建 Linux 所需的所有配置文件均位于 /boot 目录下。主可执行文件也要求所有构建出的二进制文件存放在 boot 文件夹中。 riscv32-unknown-linux-gnu.config 是 crosstool-ng 工具链的配置文件。 riscv_emulator_defconfig 是 Linux 内核的配置文件。 device_tree.dts 是最小化的设备树。可以使用 `dtc -I dts -O dtb device_tree.dts -o device_tree.dtb` 编译为 dtb。 init.c 是初始化程序。可以使用 `riscv32-unknown-linux-gnu-gcc -static init.c -o init` 编译。 initramfs.txt 是用于生成 initramfs 的 gen_init_cpio 配置文件。可以使用 `usr/gen_init_cpio initramfs.txt -o initramfs.cpio` 编译为 cpio。
网页开发的历史伴随着浏览器渲染不一致的时代,尤其是 Internet Explorer(IE)时期。由于早期的浏览器缺乏标准化的 CSS 支持,开发者被迫使用各种“黑客手法”——利用特定浏览器在解析代码时的漏洞来应用条件样式。
常见的技术包括“星号黑客法”(使用 `*` 或 `_` 前缀来针对 IE)、执行 JavaScript 的 CSS 表达式,以及微软特有的“滤镜”(Filters)来处理透明度、渐变和透明 PNG 图片。开发者还必须应对诸如“双倍外边距浮动”漏洞(Double Margin Float)和“hasLayout”概念等独特的怪癖,并经常依赖 `zoom` 或 `behavior` 等非标准属性来强制实现一致的表现。虽然厂商前缀最初旨在用于测试实验性功能,但它们往往被过早采用,迫使浏览器不得不无限期地对其提供支持。
这些做法在当时对于实现跨浏览器兼容性至关重要,但它们性能开销大、逻辑混乱且极不稳定。幸运的是,现代网页标准已使这些深奥的“黑客手法”基本过时,开发环境也已从利用特定浏览器的解析错误,转向了更统一、更可预测的开发体验。