부트코드를 이해하기 위해 USB에 부트코드를 만들고 USB로 부팅하는 방법을 소개한다. BIOS에서 부팅 순서는 변경 시킬 수 있고, 컴파일러의 역할을 알고 있는 사람이라면 쉽게 할 수 있겠다.
http://www.yes24.com/24/Goods/1469757?Acode=101
rawwrite를 찾을 수가 없어 dd 윈도우즈 버전으로 대체하여 실행하였다. 하드 지우긴 그래서 USB로 부팅하였다. USB 중 SANDISK는 안된다. 내부적으로 보안 영역이 따로 있어 이미지를 0번지부터 써도 0번지부터 기록되지 않는 듯하다. 윈도우용 부트로더를 먼저 이해하고 u-boot와 리눅스 커널을 보면 한결 쉽다.
[org 0]
[bits 16]
jmp 0x07C0:start ;far jmp 를 한다.
start:
mov ax, cs ;cs 에는 0x07C0 이 들어 있다.
mov ds, ax ;ds 를 cs 와 같게 해준다.
mov ax, 0xB800 ;비디오 메모리의 세그먼트를
mov es, ax ;es 레지스터에 넣는다.
mov di, 0;제일 윗 줄의 처음에 쓸 것이다.
mov ax, word [msgBack] ;써야 할 데이터의 주소값을 지정한다.
mov cx, 0x7FF ;화면 전체에 쓰기 위해서는
;0x7FF(10진수 2047)개의 WORD 가 필요하다.
paint:
mov word [es:di], ax;비디오 메모리에 쓴다.
add di,2;한 WORD를 썼으므로, 2를 더한다.
dec cx ;한 WORD를 썼으므로, CX 의 값을 하나 줄인다.
jnz paint ;CX 가 0이 아니면, paint로 점프하여
;나머지를 더 쓴다.
mov edi, 0;제일 윗 줄의 처음에 쓸 것이다.
mov byte [es:edi], 'A' ;비디오 메모리에 쓴다.
inc edi;한 개의 BYTE를 썼으므로 1을 더한다.
mov byte [es:edi], 0x06 ;배경색을 쓴다.
inc edi;한 개의 BYTE를 썼으므로 1을 더한다.
mov byte [es:edi], 'B'
inc edi
mov byte [es:edi], 0x06
inc edi
mov byte [es:edi], 'C'
inc edi
mov byte [es:edi], 0x06
inc edi
mov byte [es:edi], '1'
inc edi
mov byte [es:edi], 0x06
inc edi
mov byte [es:edi], '2'
inc edi
mov byte [es:edi], 0x06
inc edi
mov byte [es:edi], '3'
inc edi
mov byte [es:edi], 0x06
jmp $;이 번지에서 무한루프를 돈다.
msgBack db '.', 0xE7;배경색으로 사용할 데이터
times 510-($-$$) db 0;여기서 부터, 509 번지까지 0 으로 채운다.
dw 0xAA55;510 번지에 0xAA 를, 511 번지에 0x55 를 넣어 둔다.
updated at 20180722
다시 커널 책을 펴다 -> 현제 제목으로 변경 후 매거진 변경(Linux Master)
정상동작 확인(역시 Sandisk에서는 안되니 다른 USB 사용 요망)
nasm -Administrator 권한으로 설치 必
C:\NASM>nasm -f bin -o boot.bin boot.asm
USB 드라이브가 e라고 가정
C:\NASM>dd if=c:\nasm\boot.bin of=\\.\e: bs=512 count=1
NASM 2.13.01_64bit magnet
magnet:?xt=urn:btih:BDFF52A5C3CDD8604D4921CE75DD6D9D549D10BE&dn=nasm-2.13.01-installer-x64.exe&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce
DD 0.4 beta magnet
magnet:?xt=urn:btih:2ACA21B101B83BBB83A663A90D7905A573A6EB81&dn=dd-0.4beta1.exe&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a1337%2fannounce
최근댓글