标签: bootloader

使用GRUB自定义代码?

我可以在GRUB加载时运行一些自定义代码吗?换句话说,GRUB是否提供了在加载任何操作系统之前运行一些自定义代码的工具?

linux grub bootloader

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

在引导程序上进行线程处理

我在哪里可以找到有关如何在x86架构引导程序上实现线程的资源/教程......假设我想在显示进度条的同时在后台加载资源.

c c++ multithreading bootloader

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

对设置段寄存器感到困惑

我正在编写一个引导加载程序,我正在遵循的教程提供了以下代码:

main:

 ;----------------------------------------------------
 ; code located at 0000:7C00, adjust segment registers
 ;----------------------------------------------------

      cli                       ; disable interrupts
      mov     ax, 0x07C0                ; setup registers to point to our segment
      mov     ds, ax
      mov     es, ax
      mov     fs, ax
      mov     gs, ax

 ;----------------------------------------------------
 ; create stack
 ;----------------------------------------------------

      mov     ax, 0x0000                ; set the stack
      mov     ss, ax
      mov     sp, 0xFFFF
      sti                       ; restore interrupts
Run Code Online (Sandbox Code Playgroud)

我可能误解了一些东西但是如果SS寄存器包含0x0000则不意味着ds,es,fs和gs会重叠堆栈吗?还有fs和gs寄存器的功能是什么?此外,BIOS是否自动设置了cs段?因为它表示代码位于0000:7c00.此外,本教程永远不会解释为什么禁用中断.我在某处读到通常禁用中断以避免死锁.这是什么意思,为什么会发生?

boot x86 assembly bios bootloader

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

装配启动加载程序在虚拟PC上工作,而不是在真正的PC上

希望有人可以提供帮助,我很沮丧!我在网上找不到任何进一步的帮助,主要是因为我的代码在虚拟机中完美运行,但在真正的PC上启动时却没有(从USB检测到USB硬盘驱动器的USB笔驱动器.)

在virtualbox中; 代码将磁盘的扇区2和3读入内存,打印前128个字节(作为调试步骤),然后执行存储在这些扇区中的代码.

在我的真实PC上,它成功地将正确的字节打印到屏幕上(显然正确地读取磁盘,并将其写入内存中的预期位置)但是然后在该点停止执行而不是跳转.

为什么会有所不同,我可能做错了什么?

ORG 0x7C00;

; Load Sector 2&3 from disk to 0x1000

mov bx , 0x1000             
mov ah , 0x02   
mov al , 0x02   
mov ch , 0x00   
mov dh , 0x00   
mov cl , 0x02   
int 0x13;


;Print 0x1000 + 128 bytes

mov ah, 0x0e        
mov bx ,0x1000;
loop2:          

mov al, [bx]        
cmp bx, 0x1000+128  

je end2
int 0x10        
add bx , 1;     
jmp loop2;

end2:

; Run our code


call 0x1000

jmp $;

TIMES 510 …
Run Code Online (Sandbox Code Playgroud)

x86 assembly osdev bootloader

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

在uBoot提示下增加一个值?

我希望找到一种方法来从uBoots命令提示符增加RAM中的值.

简而言之,我的设备上的地址0xc4000000是一个临时变量,我需要递增

想法?

__PRE__

linux bootloader u-boot

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

ARM机器/主板ID

我很想知道Board/Machine ID的重要性.我有几个问题:

  1. 机器ID是否等于板ID或不同?
  2. 在引导加载程序和内核引导时,此ID的重要性是什么?
  3. 谁决定董事会ID?
  4. ID仅与ARM体系结构相关,还是适用于其他平台的概念?
  5. 如何查看特定机器的主板ID?
  6. 是专门用于启动Linux吗?

任何其他信息.除了这些问题,欢迎.

提前致谢.

arm linux-kernel embedded-linux bootloader u-boot

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

操作系统中的加载程序如何工作?

我知道加载器是一个程序,它将程序加载到主存储器.那么,这实际上是如何运作的?究竟发生了什么?实际上,当加载程序加载程序时,会创建PCB中的条目,并将程序放入作业池中.如何将程序的可执行代码复制到主存储器?简单地说如何使用C或C++将文件的代码加载到主存储器中?

assembly operating-system kernel system bootloader

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

无法在保护模式下设置GS寄存器

我正在编写一个基于OSDev Wiki和一些相关书籍的信息的操作系统.我发现在跳转到保护模式后,段初始化例程没有正确执行.这是我的第二阶段加载器和内核代码:

; stage2
; still -f bin
[org 0xd200] ; calculated by first stage loader

; GDTs are defined here
jmp entry

GDT_DESC_START:

GDT0:
dw 0 ; Limit 0~15
dw 0 ; Base 0~15
db 0 ; Base 16~23
db 0 ; Access Byte
db 0 ; Limit 16~19 + Flags
db 0 ; Base 24~31

DESCRIPTOR_CODE:
dw 0xffff ; Limit 0~15
CODE_BASE_AX dw 0 ; Base 0~15
CODE_BASE_EAHL db 0 ; Base 16~23
db 0x9a ; …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm osdev bootloader

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

直接打印到文本视频内存时出现意外输出

我正在用C开发一个内核,并在屏幕上创建了一些在视频内存上打印的内容.我预计视频内存中的第一个字节将是要打印的字符,第二个字节将告诉颜色.但我的程序有一些不同但它的工作原理!! 这是非常意外和不寻常的.

我的内核代码 -

#define VIDEO_MEM 0xb8000

void write_string( int colour, const unsigned char *string );

void main()
{
    unsigned char *vid = (unsigned char*) VIDEO_MEM;
    int i=0;
    for (i = 0; i < 2000; i++)
    {
        *vid = ' ';
        *(vid+2) = 0x1f;
        vid += 2;
    }
    write_string(0x1f,"The Kernel has been loaded successfully!!");
}

void write_string( int colour, const unsigned char *string ) {
    unsigned char *vid = (unsigned char*) VIDEO_MEM;
    while(*string != 0)
    {
        *(vid) = *string;
        *(vid+2) …
Run Code Online (Sandbox Code Playgroud)

c x86 kernel osdev bootloader

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

将值写入BX寄存器是否会影响ES寄存器?

[org 0x7c00]
    mov bp, 0x8000 ; set the stack safely away from us
    mov sp, bp

    mov bx, 0x9000 ; es:bx = 0x0000:0x9000 = 0x09000
Run Code Online (Sandbox Code Playgroud)

正如你可以在注释中看到它说:es:bx = 0x0000:0x9000 = 0x09000。寄存器ESBX之间有什么关系?该代码仅设置寄存器BX,但注释显示寄存器ES也被设置?

x86 assembly real-mode nasm bootloader

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