我是引导程序的新手,我阅读了数十篇关于引导程序的文章,但似乎没有人在为我竞争。
他们都提到了传统的步骤:
umount
dd
sync
与提到的here
相同首先让我告诉您,使用unetbootin
,我尝试了TinyCore Linux并且效果很好。然后,除了isohybrid
工具之外,我尝试使用dd
工具将它从ISOLINUX转换为SYSLINUX,从终端运行它,它也可以。
接下来,我尝试使用汇编代码制作一个启动加载器,在屏幕上打印出“Hello world”。当然,我开始使用像MikeOS这样的工作。
我作为root所做的是以下内容:
mkdosfs -n 'USB-Drive-Name' -I /dev/sdb -F 32
umount /dev/sdb*
其中/dev/sdb
是我的USB驱动器。nasm -f bin -o myfirst.bin myfirst.asm
dd if=myfirst.bin of=/dev/sdb bs=512
。sync
注意到我没有安装任何内核,我期望在启动时获得“Hello world”,但我得到的是“No Operating System”。
我有什么遗漏的吗?
让我谈谈这个assembly code:
;----------------------------------------------;
;
; A minimal bootloader that prints a hello world
; then halts.
;
; nasm -f bin hello-boot.asm -o hello-boot.bin
;
; @YouriAckx
;
;----------------------------------------------;
org 0x7c00 ; BIOS loads at this address
bits 16 ; 16 bits real mode
; Print a welcome message.
; We have no DOS nor Linux kernel here.
; Therefore, we will use bios int 0x10.
start:
cli ; disable interrupts
mov si, msg ; SI points to message
mov ah, 0x0e ; print char service
.loop lodsb ; AL <- [DS:SI] && SI++
or al, al ; end of string?
jz halt
int 0x10 ; print char
jmp .loop ; next char
halt: hlt ; halt
msg: db "Hello, World!", 0
;----------------------------------------------;
; Bootloader signature must be located
; at bytes #511 and #512.
; Fill with 0 in between.
; $ = address of the current line
; $$ = address of the 1st instruction
;----------------------------------------------;
times 510 - ($-$$) db 0
dw 0xaa55