问题标签 [bootloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7173 浏览

linux - 使用 fw_printenv 获取 U-boot 的环境

我想使用 fw_printenv 来获取 U-boot 的环境。

然后

你能告诉我有什么问题吗?

多谢。^^

0 投票
1 回答
4662 浏览

bootloader - 从闪存驱动器安装 Windows 时,如何添加“按任意键从 USB 启动”?(Grub4dos 问题/如何删除引导加载程序)

我一直在努力解决这个问题,最后决定寻求帮助。让我先解释一下该应用程序的主要目的是什么:提供一种非常易于使用的备份文件的方式,然后我格式化驱动器并启动 Windows 7 安装程序。

我通过启动 WinPE 来做到这一点,WinPE 运行一个脚本来检测 Windows 安装,然后打开一个文件浏览器。文件浏览器关闭后,脚本继续并格式化包含 Windows 安装的驱动器,并启动无人参与的 Windows 7 安装。现在问题来了:

当您从 DVD 启动 Windows 安装程序或 WinPE 时,您会得到一个不错的选项,即“按任意键从 DVD 启动”。这是为了防止计算机在安装的第一阶段完成并且计算机重新启动时启动 DVD。但是,从闪存驱动器启动时,Windows 不提供此选项:它只是在每次重新启动时启动闪存驱动器。

为了复制“按任意键”功能,我安装了 Grub4Dos,效果很好。它提供了一个小菜单,第一个标准项是“继续安装”,第二个是“开始安装”。经过相当多的调整,我得到了一切工作:开始安装启动 WinPE,然后启动 Windows 安装。第一次重新启动时,Grub4Dos 菜单出现,计数 5 秒并启动安装的第二阶段。在这里,我遇到了错误:

“Windows 安装程序无法将 Windows 配置为在这台计算机的硬件上运行。”

当我以正常方式启动 WinPE(将 bootmgr 放在棒根上)并在第一次重启后将我的 bios 更改为从主硬盘启动时,我没有收到此错误。

我一直在环顾四周,唯一能找到的是 BIOS 自动将引导设备命名为 hd0,而 Windows 只能运行/安装到 hd 0。我不确定这是否是问题所在。我阅读了有关重新映射以解决此问题的信息,但要做到这一点,您必须知道硬盘驱动器和分区的物理位置,例如 hd(0,1)。我希望这个闪存驱动器可以在任何 PC 上工作,无论操作系统安装在哪里,所以这实际上是不可能的。

我想到的一个可能的解决方法是在 WinPE 中时从闪存驱动器中删除引导加载程序。这样,当电脑重新启动时,BIOS 将不会将闪存驱动器视为启动驱动器,而是启动主硬盘。我还没有找到一种方法来做到这一点。

感谢您阅读我的问题,如果您有任何建议,请提出。

0 投票
1 回答
1732 浏览

c - 从引导扇区到 C++ 内核

我决定编写一个简单的 asm 引导加载程序和一个 c++ 内核。我阅读了很多教程,但我无法编译汇编文件,看起来像这样:

(我想从 c 文件中调用 th k_main 函数)

编译/组装/链接错误:

好的,然后我尝试创建一个 .o 文件:

有人给我一个工作示例或说如何编译。:/(我正在浏览教程并在 2 天前提供帮助,但找不到正确答案)

0 投票
1 回答
5148 浏览

android - 如何用另一个发行版替换 android

我买了一个非常弱的上网本,它预装了 android 2.0,我想用另一个 linux 发行版(如小狗或damnSmallLinux)替换它。

上网本没有带有“从 SD 卡启动”选项的 bios 菜单,所以当我插入带有 grub/lilo 的 SD 卡或 USB 密钥时,它仍然没有从它启动。

我找不到进入 android 调试模式的键序列,所以我没有 android 系统的 root。

  1. 是否有一种 android-internal 方式来指定从其他媒体启动?
  2. 是否有“das-uboot”方式强制从另一台设备启动 android?

谢谢!

0 投票
3 回答
9723 浏览

assembly - 如何制作可启动的 iso(不是 cd 或闪存驱动器)来测试您自己的引导加载程序?

我正在尝试编写一个引导加载程序(你好世界排序)。我正在使用 Bochs 进行模拟(平台 Linux-Ubuntu)。但我无法为我的二进制文件制作可启动的 iso。虽然在教程中使用了 VFD(虚拟软盘),但它适用于 windows 平台。这是我的引导加载程序代码(仅用于测试)

我在 Ubuntu 上尝试了主 ISO。它将二进制文件转换为 ISO,但不转换为可引导的 ISO。Bochs 显示错误“cd is not eltorito”,我在谷歌上搜索并发现它是可启动 ISO 的标准。我必须添加哪些其他内容才能使其可启动。我最后已经添加了引导签名。谁能推荐一个可靠的应用程序来在 Ubuntu 上制作可启动的 ISO?由于这个原因,我的工作被卡住了......或者我很确定很多人必须参与 Linux 平台上的操作系统开发。你们是如何测试的?

我用 Unetbootin 和我的引导加载程序的 iso 制作了一个可引导的闪存驱动器。切换到Virtual-box并稍微扭曲以从pendrive启动,但仍然显示它无法启动。我认为有人说得对,你在操作系统开发中需要很大的耐心。


:phew 终于我的引导加载程序运行了...
我使用虚拟软盘映像在 Virtual box 上启动我的程序。以下是万一有人遇到困难的步骤。
1.创建具有引导加载程序的 boot.asm。
2.用nasm编译。nasm -f bin boot.asm -o boot.bin。
3.sudo mkfs.msdos -C /home/用户名/floppy.img 1440
4.sudo chown用户名./floppy.img。 链接文本
5.用dd复制。dd if=./boot.bin of=./floppy.img。
6.运行 VirtualBox 并选择 floppy.img 作为新虚拟机的启动设备。
PS:您也可以将 floppy.img 附加到设备“循环”并像真正的软盘一样安装它。

0 投票
1 回答
3018 浏览

nasm - NASM - 从 USB 驱动器加载代码

任何组装大师都知道表示第一个 USB 驱动器的参数(寄存器dl )吗?

我正在学习一些 NASM 教程,并希望获得物理启动(我可以使用 qemu 获得一个干净的启动)。

这是从磁盘加载“内核”数据的代码部分:

如果有任何区别,我正在运行库存的戴尔 Inspiron 15 BIOS。


显然,对我来说正确的值是 0x80。

BIOS 加载硬盘驱动器并根据此答案从 0x80 开始标记它们。

出于某种原因,我的特定 BIOS 决定首先加载 USB 驱动器,这样我就可以从那里启动。

0 投票
3 回答
6779 浏览

bootloader - 隐藏 Grub2 启动菜单?

我正在寻找一些程序来隐藏 grub2 上的菜单。我还尝试设置 /etc/default/grub 配置

  • GRUB_TIMEOUT
  • GRUB_HIDDEN_TIMEOUT
  • GRUB_HIDDEN_TIMEOUT_QUIET

没有成功的选择。
谢谢你的帮助

0 投票
1 回答
1580 浏览

c - 使用 fw_setenv 设置 U-boot 的 env (U-boot)

我使用了源代码(版本:u-boot 1.2)

想要 corss 编译器 fw_setenv 。

所以。我进入 uboot/uboot-1.2-dm9000/tools/env

arm-linux-gcc -Wall -DUSE_HOSTCC -I/include crc32.c fw_env.c fw_env_main.c -o fw_setenv

但是..这行不通。

多谢。

0 投票
2 回答
11128 浏览

assembly - 引导加载程序 - 将处理器切换到保护模式

我很难理解一个简单的引导加载程序是如何工作的。我正在谈论的引导加载程序是 MIT 课程“操作系统工程”中的引导加载程序。

首先,让我向您展示一段 BIOS 执行的汇编代码:

从它的外观来看,这段代码设置了中断表和描述符表,然后打开了保护模式。

  1. 为什么我们在 BIOS 中进入保护模式?引导加载程序不应该在实模式下运行(顺便说一句 - 为什么它需要在实模式下运行?)
  2. 我搜索但没有找到 ljmpl 指令的确切工作原理,以及它与 ljmp 和常规 jmp 之间的区别 - 如果有人指出正确的方向,我将不胜感激。
  3. 我们为什么要进行跳跃?这条指令的目的是什么?

继续引导加载程序代码 -

  1. 它说处理器处于实模式 - 但我们刚刚看到 BIOS 切换到保护模式......我很困惑 - 这怎么可能?
  2. 我们如何切换到 32 位模式?是什么导致处理器由于 ljmp 指令神奇地进入 32 位模式?

还有一件事我不明白 - 当我使用 gdb 跟踪引导加载程序的执行时,我看到正在执行以下指令(这是引导加载程序代码中的 ljmp 指令):

但是当我查看 .asm 文件时,我看到了以下内容:

完全迷失在这里 - 为什么写在.asm文件中的指令和执行的指令不同?我有一种预感,这与保护模式以及它如何转换地址有关,但我并没有真正理解。

我将不胜感激任何帮助!

0 投票
1 回答
244 浏览

bootloader - 可引导 cd 的第一个执行字节在哪里?

我查看了小型 Linux 发行版的 iso 映像 (ISO 9660)。我找到了 16 个空扇区,然后是一个描述主卷描述的扇区。下一个扇区通常是一个引导记录,仅包含描述性信息,例如系统和版本标识符以及未指定字节范围内的小端整数。然后是补充卷描述符,最后是卷描述符集终止符。

我只猜它是引导记录中的一个小端整数。我没有找到更多关于此的信息。在我使用的所有图像中,小端整数小于主卷描述符中扇区计数的值,所以我进一步猜测它指向图像内的一个扇区。有人可以提供有关此的更详细信息吗?