标签: bootloader

为什么不只是普通文件而不是initramfs或initrd?

linux内核使用一种ram磁盘在早期启动阶段访问模块.出于好奇,我想了解我有一个问题:在这个阶段,内核必须可以访问包含initramfs/initrd的文件.这意味着内核必须支持适当的文件系统.那么为什么initramfs的内容不能和普通文件在同一个文件系统中呢?

kernel linux-kernel bootloader initrd

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

如何用bios中断13h在硬盘上写字

我想将我的引导加载程序复制到自身内部的第一个扇区(512)(我应该使用bios中断13h),我发现这个代码:

mov bx, buffer1       ; set BX to the address (not the value) of BlahBlah 
mov ah,03h            ;When ah=, int13 reads a disk sector
mov al,5              ;Al is how many sectors to read

mov cl,0              ;Sector Id
mov dh,0              ;Head
mov dl,80h            ;Drive (0 is floppy)
mov cx,512            ;One sector /2   

mov ah, 0x3           ; set function 2h
int 0x13  
Run Code Online (Sandbox Code Playgroud)

不行不通!

assembly bootstrapping bios bootloader

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

找出在 x86 引导加载程序中引导的驱动器

我正在为 x86 编写游戏引导程序。有一次,在启动初期,我需要将启动驱动器中的一些扇区加载到内存中。我用中断 0x13 (ah=02) 来做到这一点,当我在我的虚拟机中尝试它时,它就像一个魅力。但是,当我将映像刻录到 USB 驱动器时,机器无法启动,我将其固定到扇区加载指令,显然我的 USB 驱动器不是驱动器 0(软盘 A),因此读取失败。

如何确定用于启动的驱动器?

谢谢!

x86 interrupt bios drive bootloader

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

引导程序是否需要运行固件?

我目前正在研究Stellaris ARM微控制器板的固件,我正在运行SYS/BIOS RTOS.

当我上传固件时,我想知道主板上是否需要引导加载程序.我可以使用.bin文件覆盖闪存上的引导加载程序,或者我是否需要偏移起始地址以保留引导加载程序.

c embedded microcontroller rtos bootloader

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

将EFI内存映射转换为E820映射

我是Linux新手并且学习Linux如何了解可用的物理存储器.我知道有一些BIOS系统调用int 0x15,它将为你提供E20内存映射.

现在我找到了一段代码,其中说明了将EFI内存映射转换为E820内存映射的定义.上面的意思是什么?

这是否意味着主板固件是基于EFI的,但由于此代码在x86上运行,我们需要将其转换为E820内存映射

如果是这样,x86是否只知道E820内存映射?

E820和EFI内存映射有什么区别?

期待得到详细的答案.

linux x86 bios bootloader efi

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

如何测试引导加载程序

我有一个小的引导程序文件(512 B),我想测试而不会破坏我的电脑.是否有任何虚拟机程序可以让我这样做?

testing assembly nasm virtual-machine bootloader

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

我是否可能意外破坏ESP8266 ESP-12F模块的引导程序?

我是这些设备的新手,即使它们非常便宜,我也不会不必要地想要它们.

我用esptool将NodeMCU固件刷到我的模块上.这样做时,我需要指定文件写入的地址,通常是0x00000.这是否意味着固件实际上包含引导加载程序?或者它位于闪光灯的单独区域?

如果引导加载程序本身包含在固件文件中,那么中断的闪存过程会使模块无效,我想?

谢谢你的澄清!

firmware bootloader nodemcu esp8266 esp-12f

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

内核在emu8086中工作,但不在虚拟盒中使用软盘控制器

我正在编写一个简单的操作系统,我在emu8086中编写了bootloader和内核,然后我写入了软盘扇区.当我从emu内部的软盘驱动器启动时,一切正常,但是当我从虚拟机内的软盘启动时 - 它无法进行操作.

例如,以下命令获取系统日期和时间:

infoCommand:
lea si, info_msg
call printString  

;Day Part
mov ah, 2Ah    ; To get System Date
int 21h
mov al, dl   ; Day is in DL
aam
mov bx, ax
call disp

mov dl, '/'
mov ah, 02h    ; To Print / in DOS
int 21h

;Month Part
mov ah, 2Ah    ; To get System Date
int 21h
mov al, dh     ; Month is in DH
aam
mov bx, ax
call disp

mov dl, '/'
mov …
Run Code Online (Sandbox Code Playgroud)

assembly kernel virtualbox bootloader emu8086

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

`asm()`函数如何在C语言中工作?

我正在学习操作系统开发和课程初学者.我想在实模式环境中构建我的系统,这是一个使用C语言的16位环境.

在C中,我使用函数asm()将代码转换为16位,如下所示:

asm(".code16")
Run Code Online (Sandbox Code Playgroud)

在GCC的语言中生成16位可执行文件(不完全如此).

题:

假设我有两个头文件head1.hhead2.hmain.c文件.main.c文件内容如下:

asm(".code16");
#include<head1.h>
#include<head2.h>
int main(){
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,自从我开始我的代码的命令生成16位可执行文件,然后包括head1.hhead2.h,我需要做的,我创建的所有头文件一样吗?(或)添加asm(".code16");一次是否足够?

操作系统:Ubuntu

编译器:Gnu CC

assembly gcc operating-system kernel bootloader

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

获取INT 16h键扫描代码而不是字符

我正在编写一个简单的引导程序,并且有一个getch功能。

char getch()
{
   uint16_t inchar;

   __asm__ __volatile__ ("int $0x16\n\t"
                        : "=a"(inchar)
                   : "0"(0x0));

   return (char)inchar;
}
Run Code Online (Sandbox Code Playgroud)

我尝试了第一个显而易见的解决方案,即删除inchar变量对char的强制转换,但是当我打印它时,仍然返回char而不是代码。

我的println实现:

void println(char *str)
{
    while (*str) 
    {
        // AH=0x0e, AL=char to print, BH=page, BL=fg color
        __asm__ __volatile__ ("int $0x10"
                              :
                              : "a" ((0x0e<<8) | *str++),
                                "b" (0x0000));

    }

}
Run Code Online (Sandbox Code Playgroud)

链接描述文件:

ENTRY(start);
SECTIONS
{
    . = 0x7C00;
    .text : {
        /* Place the code in hw.o before all other code */
        boot.o(.text);
        *(.text);
    }

    /* Place …
Run Code Online (Sandbox Code Playgroud)

x86 gcc linker-errors inline-assembly bootloader

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