부트코드를 이해하기 위해 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

'블로그 항해 일지 > Embedded' 카테고리의 다른 글

SW PWM, UART 구현  (0) 2019.01.11
ODROID GPS 모듈 입양 完  (2) 2019.01.08
GPIO 제어 via 블루투스 on 삼성폰  (0) 2019.01.08
블루투스 연결  (0) 2019.01.08
GPIO 컨트롤  (0) 2019.01.08

+ Recent posts