bootloader相关内容

显示文字无间断

我正在尝试制作自己的引导加载程序.从16位模式更改为32位模式时,由于不会有任何中断,因此我将无法使用int 10h. 这是我到目前为止的代码: org 0x7c00 ; add to offsets xor ax, ax ; make it zero mov ds, ax ; ds=0 mov ss, ax ..
发布时间:2020-09-13 01:23:04 其他开发

将Bootloader写入Linux时,Linux无法识别循环设备上的文件系统

我目前正在用x86 NASM程序集编写一个引导加载程序,该加载程序旨在从FAT16文件系统加载内核(R.BIN)并跳转到该文件.我一直在将引导加载程序写入使用sudo losetup loop21 image.img挂载的空白映像.我将使用sudo dd if=LOADER.BIN of=/dev/loop21写入图像.当然,引导加载程序并不能立即工作(我是基于FAT12引导加载程序,却忘了更改一 ..
发布时间:2020-09-13 00:59:51 其他开发

当磁盘不是硬盘驱动器时,读取磁盘时出错.整数0x13啊0x02

我正在编写一个简单的操作系统,但从磁盘读取时遇到很多问题.我使用int 0x13和ah = 0x02从驱动器读取数据,并且收到了一些不同的错误消息.当我与 一起跑步时 $ qemu-system-x86_64 -drive file=os.bin,if=floppy,index=0,media=disk,format=raw 效果很好.当我这样做 $ qemu-system-x86_ ..
发布时间:2020-09-13 00:41:55 其他开发

实模式汇编:在启动时没有INT指令的情况下将Char打印到屏幕上

以下站点“编写引导扇区代码" 提供了示例代码系统启动时在屏幕上显示"A".从我一直在阅读的内容中,您不是必须使用INT操作码来让BIOS做某些事情吗?上面引用的站点中的以下代码如何在不使用中断的情况下工作?哪一部分代码实际上告诉硬件在屏幕上打印"A"? 有问题的代码: .code16 .section .text .globl _start _start: mov $0xb800, ..
发布时间:2020-09-12 23:19:15 其他开发

组装文字颜色

我正在用汇编程序编写一个iso文件,我想为文本添加颜色(在这种情况下为红色). 有人知道怎么做吗? [BITS 16] [ORG 0x7C00] jmp main main: mov si, string ; si=string call printstr jmp $ printstr: lodsb ; al=&si[0] cmp al,0 ; ..
发布时间:2020-09-12 22:46:41 其他开发

BIOS如何知道存在哪种类型的BPB?

如果我想让引导程序从USB记忆棒引导,则必须包含BPB. USB记忆棒正在软盘仿真模式下运行.如此处所示,有许多不同的BPB版本. BIOS如何知道存在哪种类型的BPB? GRUB 0.97似乎还使用了另一种 BPB 格式? 我可以将Bootloader从偏移量0xb稍微填充一下,然后它也将起作用. 是否有标准尺寸/通用尺寸?我没有在USB上使用任何文件系统,只是原始文件. 我想我需要 ..
发布时间:2020-09-12 22:07:42 其他开发

Bootloader可在仿真器中运行,但不能在实际硬件上运行

我正在用汇编语言编写引导加载程序,它在qemu,bochs和virtualbox上似乎工作正常.但是,它并没有在真正的硬件上加载内核. 引导加载程序通过向视频内存写入字符(用于调试)开始,然后从驱动器读取扇区2,然后跳转到内核.然后内核将一些字符写入视频内存. 在真实的机器上,我从屏幕上的引导加载程序中看到了该字符,并且该字符挂起了(插入记号闪烁). 我试图将DS,ES,SI设置 ..
发布时间:2020-09-12 21:51:38 其他开发

使用GAS AT& T指令为引导扇区计算填充长度?

所以我想在bootsector中添加填充.假设当前只有一个无限循环:jmp ..该扇区必须为512字节长.此外,还需要添加魔术数字0xaa55. jmp . .skip 508, 0 .word 0xaa55 但是,如果我想打印一些内容但又不想计算所有字节以将其填充为正确的大小怎么办? 用Intel/NASM语法是: ; print something times 510-($- ..
发布时间:2020-09-12 21:37:51 其他开发

旧版BIOS引导加载程序可在第二阶段引导实模式代码

我正在编写自己的操作系统.到目前为止,我的代码超过了512个字节,太大了,无法容纳在简单的引导扇区中. 我知道我现在必须编写一个引导加载程序,该加载程序可以读取可能大于或小于单个512字节扇区的任意代码. 引导加载程序将需要: 用作磁盘签名为0xaa55的启动记录. 从内存地址0x7E00开始,从任意长度的LBA 1(LBA 0是引导扇区)开始读取第二阶段(测试代码). 使用 ..
发布时间:2020-09-12 21:28:26 其他开发

用于Cortex M4的Bootloader-跳至已加载的应用程序

我正在Atmel SAM4E-EK板上使用Atmel SAM4E-16e.我已经为此配置编写了一个引导程序. 引导加载程序通过UART接收.bin文件,并将其写入Flash.这项工作没有问题,我进行了十六进制转储,这正是我所期望的: 引导加载程序位于0x400000(AT SAM4E的Flash起始地址) 我在0x420000处的申请 0x800000是Flash结束地址 这是C代 ..
发布时间:2020-09-07 03:07:17 其他开发

Bootrom与Bootloader在ARM系统上的区别是什么

我主要来自x86系统背景,BIOS(固件)负责从PowerON加载引导加载程序(如GRUB),而该加载程序又会加载OS.现在,我一直在阅读ARM系统上的等效启动顺序,并且网上似乎有一些文章引用了两个术语:bootrom和bootloader. 一些文章提到从PowerON启动引导程序(如u-boot)是首先要执行的事情,而有些文章说,从PowerON,首先执行bootrom(通常是刷新在处理 ..
发布时间:2020-09-07 02:38:33 其他开发

无法跳入arduino引导加载程序

我想从应用程序跳转到引导加载程序(我通过蓝牙加载并有一个应用程序命令跳转到引导加载程序). 以下工作: void* bl = (void *) 0x3c00; goto *bl; 或 asm volatile { jmp BOOTL ::} asm volatile { .org 0x3c00 BOOTL: } (但代码大小增加到0x3c0 ..
发布时间:2020-09-06 21:24:21 其他开发

Arduino引导程序

有人可以解释 Arduino引导程序有效吗?我不是在这里寻找高层次的答案,我已经阅读了代码,并且领会到了它的要旨. 在Arduino IDE和引导加载程序代码之间发生了许多协议交互,最终导致了许多内联汇编指令,这些指令通过在串行接口上​​传输的程序对闪存进行自编程. 我不清楚的是在第270行: void (*app_start)(void) = 0x0000; ...我将其 ..
发布时间:2020-09-06 20:51:27 其他开发

如何为Mac系统编写自定义引导程序?

我在汇编中编写了一个小的引导程序,它使用BIOS中断,并且在我的PC上运行良好.我的问题是,是否有可能使其在Mac/Apple系统上运行.我知道Apple在这种意义上不使用BIOS,并且它们将很多东西都锁定了下来.但是,可以在Mac上使用实时Ubuntu棒,那么是否可以从Mac上启动时运行汇编程序? 如果是,您是否知道之前做过的任何起点或参考? 非常感谢! 解决方案 我的问题是, ..
发布时间:2020-07-30 21:04:16 其他开发

UEFI BootLoader

我正在研究开发一个简单的UEFI Boot loader(开始)以加载ELF映像,并且想知道是否有人对任何现有项目都有很好的切入点,或者可以用来入门的示例和. 此外,我想知道是否有人在使用虚拟机运行EFI应用程序方面有任何经验.我已经设置了带有EFI母板的VM,但是可以通过接缝来创建一个EFI系统分区以供其加载(不使用OS),我所能实现的只是UEFI命令行. 解决方案 您可以尝试查看 ..
发布时间:2020-07-30 21:02:56 其他开发

软盘扇区数

我试图了解为什么在此图像创建器中使用lseek().为什么距文件开头5个字节?如果我更改了该号码,则操作系统将无法启动. 图像创建者使用内部的bootloader.bin创建一个.img文件. /* modify the sector count */ total_sector_number = file_size / 512 lseek(disk_image_fd, 5, S ..
发布时间:2020-07-22 23:31:30 其他开发