标签: bootloader

我可以为 stm32f051 制作自定义引导加载程序吗

我是这个引导加载程序的新手。我使用 SWD 对 stm3205 进行编程。所以当我对 stm32f05 微控制器进行编程时,我的程序在哪个位置。我可以制作自己的引导加载程序并将其替换为 st 的默认引导加载程序吗?

microcontroller stm32 bootloader

1
推荐指数
1
解决办法
5475
查看次数

引导加载程序未加载第二个扇区

我用汇编写了一个引导加载程序。下面是它的工作原理:

  1. 首先,BIOS 正常加载引导加载程序。指示进入200h。

  2. 在 200h 处,有一些代码位于 200h 和 21Eh 之间。它只是切换到 VGA 模式,使用 VGA 功能在坐标 1,1 上绘制一个洋红色像素。它永远循环该代码。

然而,当我加载它时,它只是在闪烁的光标上移动,这是普通的 VGA .bin 文件不会做的,并且会显示一个像素。我检查了一个像素,但什么也没看到。我看到的意思是 VGA 代码没有运行,引导加载程序只是加载了,没有别的。

引导加载程序代码:

 cli
 startload:
 push 0x00000200
 ret

 times 510-($-$$) db 0
 db 0x55
 db 0xAA
Run Code Online (Sandbox Code Playgroud)

您可以看到它只是转到下一个扇区(从 200h 开始)和 200h-21Eh 处的代码:

BITS 16
org 200h
data:
xcoord DB '1'
ycoord DB '1'
color DB 'D'
.code:
vga:
mov ax, 13h
int 10h
mov ax, ycoord
mov bx, xcoord
mov cx, 320
mul cx
add ax, bx
mov di, ax
mov …
Run Code Online (Sandbox Code Playgroud)

assembly bios vga bootloader x86-16

1
推荐指数
1
解决办法
1132
查看次数

开始在 IAR 中为 stm32l0 编写引导加载程序

在 IAR 中为 stm32l0 添加自定义引导加载程序的适当步骤是什么?以下问题不清楚:

  • 我要创建一个新的 IAR 项目吗?
    • 如果是,我是否像普通项目一样编写引导加载程序,只是更改我的原始 .icf 文件,以便引导加载程序有一个小 ROM 和一个小 RAM 区域?
    • 如果不是,除了 icf 文件和代码之外,我还需要在 IAR proejct 中配置哪些内容?
  • 我还需要考虑哪些其他事情?

我很难开始这个。

所以icf将用于主要项目:

__region_ROM_start__ = 0x08000000;
__region_ROM_end__ = 0x08008FFF;
Run Code Online (Sandbox Code Playgroud)

所以 icf 将用于引导加载程序项目:

__region_Bootloader_ROM_start__ = 0x08009000;
__region_Bootloader_ROM_end__ = 0x08009FFF;
Run Code Online (Sandbox Code Playgroud)

和关于0xFFRAM的同样的事情?

c embedded stm32 bootloader iar

1
推荐指数
1
解决办法
2092
查看次数

U-Boot 如何找到内核?是否需要知道确切地址

我是嵌入式系统上 Linux 编程的新手。我想了解更多关于嵌入式引导加载程序和 U-boot。我的主要问题无疑是通用的,但我试图了解 U-boot 如何准确地找到 Linux 内核。

更具体地说,我使用的是 BeagleBone Black。我有一个 SD 卡分区如下(取自在线示例),一个包含 MLO + U-Boot 的 FAT32 分区,一个包含内核 + 设备树的 EXT4 分区和另一个包含 rootfs 的 EXT4 分区。

我知道 ROM 主引导加载程序首先加载,在 FAT 分区中定位 MLO 文件,然后将控制权传递给 U-Boot。

U-Boot 如何最终准确定位内核?这和uEnv.txt启动配置文件有关吗?我知道 U-Boot 有一个学习曲线,需要一些阅读,但只是为了提前获得一些知识。

如果我更改 SD 卡映像并放置更多分区并尝试从它启动,而内核在不同的分区上,现在会发生什么?我是否需要特别告诉 U-Boot 在哪里可以找到内核,或者它会一直搜索直到找到它?

embedded-linux bootloader u-boot beagleboneblack partition

1
推荐指数
1
解决办法
2355
查看次数

如何修复“qemu:致命:尝试在 0x000a0000 处的 RAM 或 ROM 之外执行代码”

我正在开发自己的引导加载程序 + 内核。我创建了一个项目放在github上:https : //github.com/rprata/ubootlua(分支tmp-libc-implementation)

我尝试使用 QEMU 运行我的 boot.bin:

qemu-system-i386 -fda boot.bin -nographic -serial stdio -monitor none

但是会发生崩溃:

> qemu-system-i386 -fda ./deploy/boot.bin -nographic -serial stdio -monitor none
> WARNING: Image format was not specified for './deploy/boot.bin' and probing guessed raw.
>         Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
>         Specify the 'raw' format explicitly to remove the restrictions.
> qemu: fatal: Trying to execute code outside RAM or …
Run Code Online (Sandbox Code Playgroud)

x86 assembly qemu osdev bootloader

1
推荐指数
1
解决办法
1737
查看次数

如何仅使用 BIOS 中断在程序集引导加载程序中的硬盘驱动器上创建文件?

我写了一个基本的程序集引导程序来清除屏幕并打印X

[BITS 16]
[ORG 0x7c00]

main:
   mov ax, 0x03
   int 10h

   mov ah, 0x0E
   mov al, 'X'
   int 10h

   jmp $

times 510 - ($-$$) db 0
DW 0xAA55
Run Code Online (Sandbox Code Playgroud)

现在我需要做的是在硬盘上创建一个文件。我知道我可以使用以下代码通过 DOS 中断轻松完成:

outputfile db "myfile.txt"
outhandle  db ?

mov dx, offset outputfile
mov cx, 0
mov ah, 3Ch
int 21h
mov outhandle, ax
Run Code Online (Sandbox Code Playgroud)

但是我没有找到有关使用 BIOS 中断进行文件操作的任何信息。

这可能吗?

assembly bios bootloader

1
推荐指数
1
解决办法
117
查看次数

为什么引导加载程序只能接受 16 位程序集

自己写MBR的时候,需要告诉nasm用16bit汇编,不知道为什么2020年一定要用16bit汇编来写bootloader。

为什么我们不能用现代 x64 程序集开发引导加载程序?

assembly x86-64 bootloader x86-16

1
推荐指数
1
解决办法
142
查看次数

侧向滚动终端 (BIOS)

我正在编写一个 bootsector 游戏,它试图复制没有互联网时可以玩的 chrome 恐龙游戏。

为此,我必须从左向右跑,直到玩家击中仙人掌。

我如何实现这一目标?(如何使终端从右向左滚动,使其看起来像是在移动?)因此,我需要从右向左和从左向右滚动,而不是向上和向下滚动。我在 16 位实模式 (BIOS),我使用 nasm/intel 语法。

x86 assembly bios nasm bootloader

1
推荐指数
1
解决办法
92
查看次数

为什么我的引导加载程序没有将第二个扇区加载到内存中?

我正在尝试将引导加载程序写入插入 VirtualBox VM 的虚拟软盘驱动器。这是我拥有的以下代码:

org     0x7c00              ; We are loaded by BIOS at 0x7C00

bits    16                  ; We are still in 16 bit Real Mode

Start: jmp loader
        
loader:

.Reset:
    mov     ah, 0x0                 ; reset floppy disk function
    mov     dl, 0x0                 ; drive 0 is floppy drive
    int     0x13                    ; call BIOS
    jc      .Reset                  ; If Carry Flag (CF) is set, there was an error. Try resetting again

.Load:
 
    mov     ax, 0x07e0              ; we are going to read sector to …
Run Code Online (Sandbox Code Playgroud)

assembly floppy bios bootloader x86-16

1
推荐指数
1
解决办法
53
查看次数

BIOS 中断 13 读取扇区不起作用

我已经进入了汇编操作系统开发,目前我正在设置一个两阶段引导加载程序。我已经设置了第一阶段,但是当我重置磁盘并读取第二个扇区时,我在屏幕上看到了一堆乱码。当我尝试调用应该在 加载的代码时0x1000,没有任何反应(据我所知)。我试图找到解决方案,但我发现的解决方案似乎都不起作用,而且我的运气越来越差。这是我的完整代码:

    BITS 16

start:
    mov ax, 07C0h
    add ax, 288
    mov ss, ax
    mov sp, 4096
    
    mov ax, 07C0h
    mov ds, ax
    
    call reset
    call read_sector
    
    jmp sector
    
    text_string db "hello, world!", 0
    sector equ 1000h

reset:
    mov ah, 00h
    mov dl, 00h
    int 13h

read_sector:
    ; 1000h (used to be 07E0h, but changed as I realized that I probably needed to accomodate more space for the bootloader)
    mov ax, sector
    mov es, ax
    mov ah, 02h …
Run Code Online (Sandbox Code Playgroud)

assembly operating-system bootloader x86-16

1
推荐指数
1
解决办法
45
查看次数