자체 제작 운영체제: 유도 섹터의 실현

3253 단어 운영 체제asm
이 책이 기댄 교재는 우연의 《오렌지'S: 하나의 운영체제의 실현》이다.
실험 환경 및 도구
  • ArchLinux(windows도 가능)
  • 코드 편집기 Emacs
  • nasm(소스 어셈블러,sourceforge에서 다운로드 가능,Linux 버전의 소프트웨어 창고에서 설치 가능)
  • 아이디어:
  • 어셈블리 코드를 쓰고 출력Hello, World
  • 이 세그먼트 코드를 플로피 미러의 첫 번째 섹터에 기록
  • virtualbox를 설치하여 플로피 렌즈에서 안내하고 결과를 보기
  • 부트 코드
        ;; BIOS  512           0000:7c00  ,
        ;;      0000:7c00 ,          。
        org 07c00h                  ;        ,          7c00 。
        mov ax, cs                  ;           AX
        mov ds, ax                  ;               ?
        mov es, ax                  ;               ?
        call  DispStr               ;         
        jmp $                       ;    , $           
        ;;               
        ;;    DispStr   
    DispStr:
        mov ax, BootMessage         ;            ax
        mov bp, ax                  ;CPU  ES:BP      
        mov cx, 16                  ;  CX,CPU        
        mov ax, 01301h              ;AH=13  13   , AL=01H,             ,   BL   ,    
        mov bx, 000ch               ;    , BL=0CH,  
        mov dl, 0                   ;dh        ,dl       
        int 10h                     ;BIOS 10H   13          
        ret
    BootMessage:    db "Hello, OS world!" ; NASM  ,          , db  define byte
        ;; $          ,$$    section      ,       section,   0x7c00
        times 510-($-$$) db 0           ;      ,          512  
        dw 0xaa55                       ;    ,       0xAA55  , BIOS          ,dw  define word
    

    문자열 보이기 중단에 대한 자세한 내용은 BIOS 문자열 보이기 인터럽트 (int 10h 13번 인터럽트) 를 참고하십시오.
    컴파일 생성 바이너리
    필요nasm.Linux를 사용하면 소프트웨어 창고에서 직접 설치할 수 있습니다.nasm는 어셈블리 코드에서 목표 코드를 생성할 수 있고 반 어셈블리 도구ndisasm를 가지고 있어 목표 코드에서 어셈블리 코드를 생성할 수 있다.
    섹터 코드를 컴파일하여 바이너리를 생성합니다.
    nasm boot.asm -o boot.bin
    

    플로피 디스크의 첫 번째 섹터에 쓰기
    우리는 플로피 렌즈로 플로피 디스크를 시뮬레이션한다.
    dd if=/dev/zero of=emptydisk.img bs=512 count=2880 #          
    dd if=boot.bin of=boot.img bs=512 count=1 #  bin file          
    dd if=emptydisk.img of=boot.img skip=1 seek=1 bs=512 count=2879 #  bin             ,           
    

    이렇게 하면, 우리가 시스템을 안내하는 가상 플로피 디스크가 준비되었다.
    가상 박스 설치, 시스템 구축
    Linux 소프트웨어 창고에서virtualbox를 직접 설치할 수 있습니다.
    현재 사용자를 vboxusers팀에 가입: gpasswd -a vboxusers.
    virtualbox를 시작합니다. vboxdrv를 불러올 수 없음을 알릴 수 있습니다.만약 이런 상황이 발생한다면 vboxdrv 모듈을 다시 컴파일해야 합니다.linux-headersdkms를 설치하고 sudo dkms autoinstall는 vboxdrv 모듈을 컴파일하여 생성합니다.
    수동 실행 sudo modprobe vboxdrv vboxdrv 모듈을 불러오고 가상 박스를 시작하는 데 문제가 없을 것입니다.
    가상 시스템을 구축하면 하드디스크가 있든 없든 상관없습니다. 플로피 드라이브를 추가하여 저희boot.img를 플로피 드라이브에 불러오고 가상 컴퓨터를 시작합니다. 성공하면 다음과 같습니다.
    virtualbox에서 발생할 수 있는 문제:
  • Failed to open a session for the virtual machine a. Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT). Unknown error creating VM (VERR_SUPLIB_OWNER_NOT_ROOT). 솔루션: sudo chown -R root:root /usr/lib/virtualbox
  • Effective UID is not root . 해결 방법: sudo chmod 4711 /usr/lib/virtualbox/VirtualBox.

  • 참조:https://www.virtualbox.org/ticket/7889
    참고 자료:
    Hacking [운영 체제 직접 작성] Chapter 1&2

    좋은 웹페이지 즐겨찾기