我有興趣編寫儘可能少引導的軟件。我該怎麼辦? 這是一個程序集的問題嗎?我需要對軟件運行的磁盤做些特別的事嗎?如何編寫與系統啓動非常接近的軟件?
爲了澄清,我正在尋找一個stdin和stdout可用的點,但沒有其他的。
我有興趣編寫儘可能少引導的軟件。我該怎麼辦? 這是一個程序集的問題嗎?我需要對軟件運行的磁盤做些特別的事嗎?如何編寫與系統啓動非常接近的軟件?
爲了澄清,我正在尋找一個stdin和stdout可用的點,但沒有其他的。
如果您想在POST後但在OS啓動之前運行代碼,您需要掛鉤或更換引導加載程序。對於接下來要問的幾個問題,沒有簡單的答案。
目前在互聯網上編寫自己的引導程序相當多的資源 - 你可能要開始與他們:
如果你發現自己尋找關於x86彙編的一本好書,請嘗試:
這取決於操作系統。 您必須將程序添加到Windows下的RunOnce註冊表項中,並在Linux下啓動腳本(linux下有各種init方法,因此有各種方法)。
我有興趣編寫在windows或linux加載之前運行的軟件。有沒有辦法做到這一點? – lowerkey 2010-06-19 17:52:32
才達到這種效果可能會重新使用像一些刪節Linux的一些非常有限的OS或者甚至老的DOS,然後讓他們在啓動時自動運行你的代碼的方法。但這取決於你爲什麼要這樣做,如果這種解決方案適合你。
編輯:或者如果這還不夠,我會建議看看Lilo或grub4dos或類似的東西,看看你是否可以用某種方式插入你的代碼。 Boot Land網站上的論壇可能也很有用,因爲他們似乎很想弄清楚如何定製啓動過程。
DOS在嵌入式世界,氣泵,收銀機等中仍然非常活躍。DOS不是壞。你應該從頭開始學習linux來理解linux的啓動過程,你會發現你可以大幅縮短這個時間,並直接啓動到嵌入式程序中。 – 2010-06-20 03:17:02
只要運行Linux而沒有發行版提供的所有垃圾?我的內核需要1.8秒來加載。這是最簡單的方法。請參閱Linux From Scratch。
stdin和stdout是OS具體的概念,他們不存在預引導(儘管也許在一些自定義的BIOS或引導程序他們這樣做...)
下一個最低的地方將是引導裝載程序,有些事情是在那個時候初始化的,但是你仍然會有很多工作要做。
你甚至可以加載更低的BIOS,加載你自己的BIOS,但是你必須照顧好你的BIOS需要處理的所有非標準化的東西。
引導加載程序剛剛完成。我只是想能夠做基本的輸入輸出。 – lowerkey 2010-06-21 14:57:54
這是一個簡單的啓動加載程序,讓你開始。 您將需要nasm,dd和一張軟盤。
; boot1.asm stand alone program for floppy boot sector
; Compiled using nasm -f bin boot1.asm
; Written to floppy with dd if=boot1 of=/dev/fd0
; Boot record is loaded at 0000:7C00,
ORG 7C00h
; load message address into SI register:
LEA SI,[msg]
; screen function:
MOV AH,0Eh
print: MOV AL,[SI]
CMP AL,0
JZ done ; zero byte at end of string
INT 10h ; write character to screen.
INC SI
JMP print
; wait for 'any key':
done: MOV AH,0
INT 16h ; waits for key press
; AL is ASCII code or zero
; AH is keyboard code
; store magic value at 0040h:0072h to reboot:
; 0000h - cold boot.
; 1234h - warm boot.
MOV AX,0040h
MOV DS,AX
MOV word[0072h],0000h ; cold boot.
JMP 0FFFFh:0000h ; reboot!
msg DB 'Welcome, I have control of the computer.',13,10
DB 'Press any key to reboot.',13,10
DB '(after removing the floppy)',13,10,0
; end boot1
我們在這裏談論子操作系統級別的代碼? – ChaosPandion 2010-06-19 17:49:02
是的。我想將一個簡單的程序刻錄到磁盤並讓系統只執行該程序。 – lowerkey 2010-06-19 17:55:43