标签: bootloader

如何让uBoot使用squashfs /什么是uBoot中的FDT?

我设置了Kamikaze工具链(来自openwrt),并为AMCC PPC405ex kilauea参考板编译了Linux 2.6.30.x内核.但是,出于某种原因,我在uBoot中做错了,因为我无法从squashfs图像运行内核.图像在tftp上加载正常并解压缩,但控制台输出无法启动.

我没有更改Linux内核命令行,它看起来很好(console=ttyS0,115200 root=/dev/mtdblock).我也有点困惑uboot中的fdt是什么?

我不完全确定它是否真的属于stackoverflow,但是这又不是一个真正的superuser.com问题(因为这与开发环境有关,它肯定是编程相关的,即使不是一个编程问题)

command-line embedded-linux bootloader u-boot

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

Hello World bootloader无法正常工作

我一直在研究这个网页上的教程,逐步创建一个显示Hello World的引导程序.

第二个教程(我们试图得到一个"A"输出)工作得很好,但是第一个教程对我来说根本不起作用!(BIOS完全忽略了软盘并直接启动进入Windows).这不是一个问题,虽然任何解释都会受到赞赏.

真正的问题是我无法让第3个教程工作.而不是输出"Hello World",我在屏幕的左下角得到一个不寻常的字符(和闪烁的光标).它看起来有点像圆角矩形内的笑脸.有谁知道如何让Hello World显示它应该?

x86 assembly bootstrapping bootloader

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

引导程序背后的理论

我从osdev下载了几个bootloader并成功加载了一个内核.但现在我想学习bootloader背后的理论.我想知道为什么系统启动以及引导程序代码后面的所有内容.任何人都可以给我一个链接或链接到一本书吗?提前致谢.系统是x86.

boot x86 operating-system bootloader

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

简单的NASM"启动程序"无法正确访问内存?

**请注意,当我说启动程序时,我并不是指启动操作系统的程序.我的意思是,一个简单的程序,当你启动计算机并执行某些操作时运行.

好吧,所以我不是非常精通Assembly/NASM,但我认为我已经掌握了很好的编写简单启动程序.

好吧,我以为我有足够的把握.显然不是.

我尝试了一个在网上找到的简单启动程序.它运行良好(打印字母'A').然后我修改它以打印存储在内存中的字母.它失败了; 而不是打印'A',它打印出一个笑脸.(我发誓,电脑现在正嘲笑我.)

这是源文件中的代码:

[BITS 16]    ; We start up in 16-bit real mode
[ORG 0x7C00] ; We're booted into memory at this address. (Or so I'm told)

mov ah, 0x0E       ; Teletype command
mov bh, 0x00       ; Page number
mov bl, 0x07       ; Attributes (7 == white foreground, black background)
mov al, [testChar] ; Character to print; load it from the memory referenced by testChar.

int 0x10  ; Tell the BIOS to execute …
Run Code Online (Sandbox Code Playgroud)

assembly memory-management nasm bootloader

5
推荐指数
0
解决办法
743
查看次数

uEnv.txt vs boot.scr

我对这两个文件的启动配置非常困惑.他们似乎在做同样的事情,我不明白为什么我需要或者.

如果我使用uEnv.txt,我将其设置为

bootargs=console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
aload_script=fatload mmc 0 0x43000000 script.bin;
aload_kernle=fatload mmc 0 0x48000000 uImage;  bootm 0x43000000 - 0x48000000;
uenvcmd=setenv run aload_script aload_kernel
Run Code Online (Sandbox Code Playgroud)

或者,我可以创建boot.cmd:

setenv bootargs console=console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 script.bin
fatload mmc 0 0x48000000 uImage
bootm 0x48000000
Run Code Online (Sandbox Code Playgroud)

他们都工作......

linux bootloader u-boot

5
推荐指数
2
解决办法
1万
查看次数

引导加载程序-加载第二阶段-qemu正常运行,真实机器无法运行

作为学习练习,我为x86 bios系统编写了一个16位的引导程序。它在QEMU上似乎运行良好。我将其添加到用于旧式amd-turion计算机(x86_64)的驱动器上,当我尝试引导该计算机时,它将进入BIOS屏幕,然后黑屏上的光标闪烁。

我的问题是,QEMU的x86仿真器和绝对使用BIOS而不是UEFI的真实x86(64位)计算机之间可能有什么区别?我是否需要针对实际计算机而不是QEMU编写代码?是我将信息复制到驱动器的方式吗?计算机是否采用了某些硬件级别的安全性规定?

我知道它在VirtualBox上也不起作用。

看来加载第二阶段是有问题的(通过在真实硬件上成功地打印第一阶段的字符)

我的第一阶段引导程序使用以下文件中的代码:

stage_one.asm

[bits 16]
[org 0x7c00]
LOAD_ADDR: equ 0x9000   ; This is where I'm loading the 2nd stage in RAM.
start:
    xor ax, ax          ; nullify ax so we can set 
    mov ds, ax          ; ds to 0
    mov sp, bp          ; relatively out of the way
    mov bp, 0x8000      ; set up the stack
    call disk_load      ; load the new instructions
                        ; at …
Run Code Online (Sandbox Code Playgroud)

qemu real-mode nasm bare-metal bootloader

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

Bootloader在真实硬件上打印垃圾

我正在尝试编写自己的bootloader.虽然它在QEMU,Bochs和VirtualBox中运行良好,但我似乎无法在笔记本电脑上运行.

在我的笔记本电脑上,引导加载程序与所有模拟器的行为完全不同,挂起看似随机的地方,拒绝打印,甚至跳过一些jmp $指令.

虽然我对"真实硬件"有很多麻烦,但我认为它们都有一个原因.

以下代码是一个短引导加载程序,应该打印"TEST"消息3次,然后跳转到同一位置挂起:

[BITS 16]                                                                          
[ORG 0x7C00]                                                                                                    
    jmp 0x0000:start_16  ; In case bootloader is at 0x07C0:0x0000                                                             
start_16:                                                                          
    xor ax, ax                                                                 
    mov ds, ax                                                                 
    mov es, ax                                                                 
    cli                             ; Disable interrupts                       
    mov ss, ax                                                                 
    mov sp, 0x7C00                                                             
    sti                             ; Enable interrupts                        
    cld                             ; Clear Direction Flag                     
    ; Store the drive number                                                   
    mov [drive_number], dl                                                     
    ; Print message(s)                                                         
    mov si, msg                                                                
    call print_string                                                          
    mov si, msg                                                                
    call print_string                                                          
    mov si, msg                                                                
    call print_string                                                          

    jmp $   ; HALT                                                                                   

; …
Run Code Online (Sandbox Code Playgroud)

x86 assembly bios osdev bootloader

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

bios如何知道BPB的类型?

如果我希望我的引导加载程序从usb棒启动,我必须包含一个BPB.usb棒在软盘模拟模式下运行.正如所看到这里,有许多不同版本的BPB.bios如何知道BPB的类型?GRUB 0.97似乎正在使用另一种BPB格式?

我可以从偏移量0xb稍微填充我的引导加载程序,然后它也可以工作.是否有标准/通用尺寸可供使用?我没有在USB上使用任何文件系统,只是原始的.

我想我需要BPB,因为bios尝试更新一些值,这会覆盖一些代码.由于每个BPB看起来有点不同,bios如何知道在哪里更新什么值?

x86 assembly bootloader

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

“ adb reboot bootloader”在内部如何工作?

我看到我的android映像出现问题,该命令adb reboot bootloader只是将命令重新引导回android,而不是进入bootloader模式。

为了解决该问题,我进行了一些研究,发现有两件事,adb并且adbd主机和目标设备通过套接字使用TCP协议进行通信。

因此,有趣的是诸如adb shelladb devices正在运行的命令,而不是reboot bootloader。我想了解adbd收到什么reboot bootloader。它会更改无秩序,设置一些标志,更改EFI变量...吗?

您能否指出一些好的链接或分享的理解?

PS:我正在开发嵌入式设备环境,类似于树莓派...

embedded android adb bootloader

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

使用外部c代码编译asm引导加载程序

我在asm中编写了一个引导加载程序,并希望在我的项目中添加一些已编译的C代码.

我在这里创建了一个测试函数:

test.c的

__asm__(".code16\n");

void print_str() {
    __asm__ __volatile__("mov $'A' , %al\n");
    __asm__ __volatile__("mov $0x0e, %ah\n");
    __asm__ __volatile__("int $0x10\n");
}
Run Code Online (Sandbox Code Playgroud)

这是asm代码(引导加载程序):

hw.asm

[org 0x7C00]
[BITS 16]
[extern print_str] ;nasm tip

start:
mov ax, 0
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7C00


mov si, name
call print_string

mov al, ' '
int 10h

mov si, version
call print_string

mov si, line_return
call print_string

call print_str ;call function

mov si, welcome
call print_string

jmp mainloop

mainloop:
mov …
Run Code Online (Sandbox Code Playgroud)

x86 gcc nasm inline-assembly bootloader

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