HILFE!!! Wie schreibe ich am besten einen Bootmanager??

Diskutiere HILFE!!! Wie schreibe ich am besten einen Bootmanager?? im Developer Network Forum im Bereich Hardware & Software Forum; Hallo zusammen, ich muß einen Bootmanager für mein Studium schreiben, doch leider klappt das alles nicht so ganz wie es soll, weiß wenn ich...
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #1
R

Rossi78

Bekanntes Mitglied
Dabei seit
22.02.2001
Beiträge
425
Reaktionspunkte
0
Ort
.
Hallo zusammen,

ich muß einen Bootmanager für mein Studium schreiben, doch leider klappt das alles nicht so ganz wie es soll, weiß wenn ich ehrlich bin mlmentan nicht genau, wie ich das richtig anpacken soll, wenn ich erst den MBR auslese, dann ändere und wieder zurück schreibe ist das eine, doch leider bekomme ich das mit dem ausführen der Datei nicht hin, verwende den Visual C++ von Microsoft.
Gibt es evtl. noch andere Möglichkeiten???
Über asm in C++???

Bin über jede Hilfe dankbar

Gruß Rossi:be:
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #2
P

powerseller

Bekanntes Mitglied
Dabei seit
08.06.2004
Beiträge
215
Reaktionspunkte
1
Frag doch einfach mal bei bofh oder futtlui an, vielleicht kann der Dir ja weiterhelfen!

Greetz

powerseller
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #3
futtlui

futtlui

Bekanntes Mitglied
Dabei seit
21.01.2003
Beiträge
10.439
Reaktionspunkte
2
@powerseller
Du scheinst mich mit irgendjemand zu verwechseln.... :confused:
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #4
R

Rossi78

Bekanntes Mitglied
Dabei seit
22.02.2001
Beiträge
425
Reaktionspunkte
0
Ort
.
Ist ja kein Thema, trotzdem danke!

Gruß Rossi
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #5
Z

Zombie79

Bekanntes Mitglied
Dabei seit
05.10.2001
Beiträge
6.132
Reaktionspunkte
2
Rossi78 schrieb:
[...] doch leider bekomme ich das mit dem ausführen der Datei nicht hin, verwende den Visual C++ von Microsoft.
Gibt es evtl. noch andere Möglichkeiten???
Über asm in C++??? [...]
Daraus werde ich nicht schlau. ;)

Beschreibe mal bitte genau die Aufgabe, dann kann dir besser geholfen werden.
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #6
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hi,

unter VC++ :confused: . Der gute alte Bootmanager läuft doch noch im Real-Mode, d.h. du hast es hier mit den guten alten Segmentregistern zu tun.
Wenn ich micht recht erinnere wird der MBR an eine feste Adresse (0070h:00C0h) geladen.
Warte mal kurz Googlen...

http://members.aol.com/esSGeh/sg94/mbr.htm

Denk daran, das die OS'en die du bootest, ja auch davon ausgehen, das sie ihren eigenen Bootrecord an o.g. Adresse laden.

...yks ;)
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #7
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

@yks:
Das ist aber kein Bootmanager, sondern nur ein kleines Code-Fragment, welches einen Sektor von Platte liesst und diesen dann anspringt. Abgesehen davon sind die Informationen 8 Jahre alt und mehr als rudimentär (teilweise auch falsch, man muss einen Bootmanager keinesfalls komplett in Assembler schreiben).

@Rossi78:
So ganz trivial ist die Entwicklung eines Bootmanagers nicht, da man zum einen die Hardwarespezifika der Plattform kennen muss und zum anderen die Abläufe beim Bootprozess und der zu bootenden Betriebssysteme.

Schau Dir am besten mal die Quellen der verschiedenen Bootloader an, die frei verfügbar sein (eine Auswahl findest Du unten). Dort solltest Du alle notwendigen Informationen finden, um einen eigenen Boot-Loader zu schreiben.

http://btmgr.webframe.org/index.php3?body=download.html
http://gag.sourceforge.net/index.html
http://www.gnu.org/software/grub/

Nic
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #8
R

Rossi78

Bekanntes Mitglied
Dabei seit
22.02.2001
Beiträge
425
Reaktionspunkte
0
Ort
.
Danke erstmal,

hier beschriebe ich die Aufgabe noch einmal besser:
Ich soll einen Bootmanager schreiben, habe dessswegen auch schon mal gesucht und ein Programm gefunden, welches mir den MBR in eine Datei schreibt, mit Hilfe dieses Programmes kann ich den MBR auch verändern, indem ich einfach die Datei umschreibe, der Bootmanager soll von einer Diskette aus starten, wenn man den PC einschaltet. Nach der änderung im MBR sollte der Rechner wieder einen Neustart durchführen und dann von der ausgesuchten Partition booten.
Soviel dau, jetzt hatte ich aber auch noch gefragt, ob es noch andere Möglichkeiten gibt, ich weiß z.B. daß mit Interrupt 13h soetwas auch möglich sein sollte. Dann muß ich keine externen Programme mit einbinden. Allerdings hab ich wenn ich es so machen will garkeine Ahnung, da ich nicht weiß, wie ich diesen ansprechen soll.
So, das was erst einmal.
Bis dann

Gruß Rossi
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #9
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
nic_power schrieb:
...(teilweise auch falsch, man muss einen Bootmanager keinesfalls komplett in Assembler schreiben)....
Ja hast du recht, aber den Bootstrip muss du immer noch auf 512Bytes begrenzen und das Hauptprogramm kannst du dann nachladen. Schön aufwendig. In 512Bytes in Assembler bekommst du immer noch einiges drunter.

...yks ;)
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #10
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Für 'ne Floppy kann ich Dir Beispielcode geben, habe ich noch von 1996 da. :D
Code:
	BOOT_R: Cli
		Xor	AX,AX			;Zero register
		Mov	DS,AX
		Mov	ES,AX
		Cld
		Mov	CX,100h
		Mov	SI,07c00h
		Mov	DI,08000h
		Rep	Movsw
		;JMP	FAR PTR 0800:0058	;jump dest. (next)
		DB 0eah,58h,0,0,8
		Mov	SI,OFFSET copyb - OFFSET BOOT_R + 40h
		Call	NEXT_CH
		Mov	AX,0a2dh		;'-'
		Xor	BX,BX
		Mov	CX,52			;52*'-'
		Int	10h			;VIDEO service: char at cursor
		Mov	SI,OFFSET helpb - OFFSET BOOT_R + 40h
		Call	WR_IT
		Mov	AX,0ab0h		;'░'
		Xor	BX,BX
		Mov	CX,27h			;39*'░'
		Int	10h			;VIDEO service: char at cursor
	BLOCK:	Mov	AX,0edbh		;'█'
		Int	10h			;VIDEO service: write char
		Mov	BX,046ch
		Mov	SI,[BX]			;0000:046C = timer low
		Mov	DI,[BX+2]		;0000:046E = timer high
		Add	SI,5
		Adc	DI,0
	WAIT_K: Mov	AH,1
		Int	16h			;Keyboard i/o ah=function 01h
						;get status, if zf=0: al=char
		Jnz	L_GETKEY
		Cmp	[BX+2],DI		;timer high change?
		Jb	WAIT_K			;no  -> wait for key
		Cmp	[BX],SI			;timer low change?
		Jb	WAIT_K			;no  -> wait for key
		Loop	BLOCK			;next block (39*)
		Mov	AH,1			;no key = F1
		Jmp	SHORT KEYS
	L_GETKEY:Mov	AH,0
		Int	16h			;Keyboard i/o	ah=function 00h
						;get keybd char in al, ah=scan
	KEYS:	Cmp	AH,3eh			;F4
		Je	RESET
		Cmp	AH,3dh			;F3
		Je	NEW_ATT
		Cmp	AH,3ch			;F2
		Je	XCHG_FD
		Mov	SI,OFFSET nlb - OFFSET BOOT_R + 40h
		Call	WR_IT
		Mov	AX,201h
		Mov	BX,7c00h		;dest: boot mem
		Mov	DX,80h			;phys. drive: 80 = HD
		Mov	CX,1			;1 sector
		Int	13h			;DISK service: read sectors
		Jc	NEW_ATT			;error?
		;JMP	FAR PTR 0000:7C00H	;new boot
		DB 0eah,0,7ch,0,0
	XCHG_FD:Mov	BX,DS:[102h]		;unused int 40H seg
		And	BX,BX
		Jz	NEW_ATT
		Push	BX
		Mov	SI,OFFSET changeb - OFFSET BOOT_R + 40h
		Call	WR_IT
		Pop	BX
		Mov	DS:[342h],BX
		Mov	DI,300h
		Mov	AX,DI
		Xchg	AX,DS:[100h]		;set unused int 40H offs to 300H
		Mov	DS:[340h],AX
		Mov	DS:[102h],ES		;set unused int 40H seg to zero
		Mov	SI,OFFSET FD_2 - OFFSET BOOT_R + 8040h
		Mov	CX,OFFSET GETSW - OFFSET FD_2
		Rep	Movsb			;0000:@FD_2 -> 0000:0300
	NEW_ATT:Int	19h			;Bootstrap loader
		EVEN				;ASM fixup
	RESET:	Mov	DX,64h
		Mov	AL,0feh
		Out	DX,AL			;port 64H, kybd cntrlr functn
						;al = 0FEH, pulse CPU reset
		Jmp	SHORT RESET

	changeb DB nl,cd,'Floppy drives changed.',nl,cd,0
	copyb	DB nl,cd,'BOOT 1.5  Copyright by T. Mönkemeier, O Love & Tels.',nl,0
	helpb	DB cd,cd,'This is no system disk. Choose:',nl,cd
		DB 'F1 - Booting from hard disk.',nl
		DB 'F2 - Change floppy drives.',nl
		DB 'F3 - Retry.',nl
		DB 'F4 - Reset.',cd
	nlb	DB nl,0

	WR_IT	PROC	NEAR
	NEXT_CH:Lods	BYTE PTR CS:[SI]
		Or	AL,AL			;zero termination?
		Jz	END_CH			;yes
		Mov	AH,0eh
		Int	10h			;VIDEO service: write char
		Jmp	SHORT NEXT_CH
	END_CH: Retn
	WR_IT	ENDP

	FD_2:	Pushf				;Push flags
		Xor	DL,1
		Popf				;Pop flags
		Int	0d0h			;??INT NON-STANDARD INTERRUPT.
		Pushf				;Push flags
		Xor	DL,1
		Popf				;Pop flags
		Retf	2			;Return far
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #11
R

Rossi78

Bekanntes Mitglied
Dabei seit
22.02.2001
Beiträge
425
Reaktionspunkte
0
Ort
.
Klasse, danke und wie bring ich den in ne Exe Datei???

Gruß Rossi

Ich meine, mit welchem Programm
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #12
O

O Love

Bekanntes Mitglied
Dabei seit
08.04.1999
Beiträge
2.286
Reaktionspunkte
0
Den kannst Du als Inline-ASM in jeder Hochsprache einfügen. Dann bräuchtest Du noch Labels davor und dahinter, die müßtest Du in Adressen umrechnen lassen. Alles, was im Speicher zwischen den beiden Labels liegt, kannst Du dann auf die Disk rausschreiben.
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #13
Yuna

Yuna

Neues Mitglied
Dabei seit
22.06.2005
Beiträge
1
Reaktionspunkte
0
Hallo,
der Beitrag ist zwar schon relativ alt, aber ich habe momentan das gleiche Problem und komme nicht weiter.

Wenn jemand inzwischen ein paar mehr Informationen hätte oder sogar mal ein Beispiel Quellcode oder zumindest einen Auszug daraus, würde mir das sehr weiter helfen.

vielen Dank im Voraus

Yuna
 
  • HILFE!!! Wie schreibe ich am besten einen Bootmanager?? Beitrag #14
R

Rossi78

Bekanntes Mitglied
Dabei seit
22.02.2001
Beiträge
425
Reaktionspunkte
0
Ort
.
Hi Yuna, du hast eine Mail!!!!


Gruß Rossi

PS: Ich habe es komplett in C++ realisiert, nur der Code zum Neustarten ist in Assembler geschrieben. :D
 
Thema:

HILFE!!! Wie schreibe ich am besten einen Bootmanager??

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben