ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [개발 도구] QEMU
    Linux/development tool 2023. 8. 7. 01:58

    글의 참고

    - https://www.qemu.org/docs/master/system/qemu-manpage.html

    - https://wiki.gentoo.org/wiki/QEMU/Options- https://wiki.archlinux.org/title/QEMU

    - https://manpages.debian.org/jessie/qemu-system-x86/qemu-system-x86_64.1.en.html
    - https://wiki.osdev.org/Qemu

    - https://wiki.osdev.org/QEMU#Useful_QEMU_command-line_options


    글의 전제

    - 내가 글을 쓰다가 궁금한 점은 파란색 볼드체로 표현했다. 나도 모르기 때문에 나중에 알아봐야 할 내용이라는 뜻이다.
    - 밑줄로 작성된 글은 좀 더 긴 설명이 필요해서 친 것이다. 그러므로, 밑 줄 처친 글이 이해가 안간다면 링크를 따라서 관련 내용을 공부하자.
    - `글의 참조`에서 빨간색 볼드체로 체크된 링크는 이 글을 작성하면 가장 많이 참조한 링크다.


    글의 내용

    1. 옵션

    - machine

    : QEMU 옵션에서 machine, cpu, drive 옵션이 제일 중요하다. 그런데, 그 중에서도 가장 중요한 옵션은 이 `machine`옵션이다. 이 놈의 역할은 SoC 및 Chipset 역할을 한다는 것이다. QEMU 에서 말하는 칩셋은 `모델`과 같다. 예를 들어, RPI2, RPI3, RPI4 같이 말이다. QEMU machine 옵션은 바로 이런 칩셋을 고르는 역할을 해준다. 이건 다시 말해, machine을 고르면 자동으로 cpu까지 선택이 된다는 뜻이다. `qemu-system-x86_64 -M help` 지원되는 칩셋정보들을 확인해보자.
     

    - QEMU에서 설명하는 x86_64 기준으로 칩셋은 크게 2가지로 나뉜다. `pc` 와 `q35`이다. 이 2개는 모두 인텔 칩셋이다. 
     

    출처 - https://en.wikipedia.org/wiki/Intel_440FX

     

    출처 - https://en.wikipedia.org/wiki/List_of_Intel_chipsets

     
    - I440FX와 Q35는 인텔의 칩셋이다. QEMU에서 지원하는 각 칩셋들의 주변 장치들과 사양은 아래의 링크를 참고하자.
    1) I440FX - https://www.qemu.org/docs/master/system/i386/pc.html

     

    i440fx PC (pc-i440fx, pc) — QEMU  documentation

    i440fx PC (pc-i440fx, pc) Peripherals The QEMU PC System emulator simulates the following peripherals: i440FX host PCI bridge and PIIX3 PCI to ISA bridge Cirrus CLGD 5446 PCI VGA card or dummy VGA card with Bochs VESA extensions (hardware level, including

    www.qemu.org

    2) Q35
    2.1) https://wiki.qemu.org/Features/Q35

     

    Features/Q35 - QEMU

    Summary Add emulation of the ICH9 host chipset as an alternative to the current I440FX emulation. This will allow for better support of PCI-E passthrough since ICH9 uses a PCI-E bus whereas the I440FX only supports a PCI bus. Owner Challenges The QEMU supp

    wiki.qemu.org

    2.2) https://wiki.qemu.org/images/4/4e/Q35.pdf
     
     

     

    - q35

    : q35는 pc보다 비교적 최근 칩이다. 그래서 AHCI, PCIe 등을 기본으로 지원한다. 즉, 추가적인 QEMU 옵션없이도 사용이 가능하다는 말이다. 

    출처 - https://wiki.qemu.org/Features/Q35

    : I440FX와 비교하자면, 일단 가장 중요한 건 메인 버스가 바뀌었다. I440FX는 메인 버스로 `ISA-버스`를 사용한다. 그러나, Q35는ISA 버스가 존재하지 않는다. PCie와 PCI 버스만 존재한다. Q35에서는 IDE 컨트롤러가 존재하지 않는다는 이 있다. IDE 컨트롤러는 QEMU 파라미터로 추가가 가능한 거 같다. 그런데, Q35도 확인해보면 AHCI가 디폴트로 존재하는 것 같지는 않다.

    : 위위 그림은 `-M q35`를 하면 나오는 PCI 디바이스 정보이다. 위의 디바이스ID는 이 사이트에서 찾아보면 되는데, ACHI 디바이스는 맵핑되는게 없다. 위의 로그가 나온 QEMU 커맨드는 다음과 같다.

    qemu-system-i386 -m 4096 -M q35 -d int -no-reboot -no-shutdown -boot d -fda kernel.bin

    : 위의 명령어를 아래와 같이 바꿔보자.

     

    qemu-system-i386 -m 4096 -M q35 -d int -no-reboot -no-shutdown -boot d -drive id=disk,f ile=disk.img,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -fda kernel.bin

    : 그리고 출력 로그를 확인하면 디바이스 ID가 `0x2922` 인 디바이스가 AHCI 디바이스다.

     

     

    : I440FX는 OSDEV의 이 글만 봐도 ATA와 통신이 가능하다. 그러나,  ISA 버스를 기반으로 동작하는 것이다. 

     
     

    - 옵션

    : cpu

    " CPU의 `마이크로 아키텍처`를 고른다. 위키피디아에 보면 아래의 인텔의 마이크로 아키텍처들이 보인다. 

    출처 - https://en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures

     
    - 그리고 아래는 `qemu-system-x86_64 -cpu help` 를 통해 나온 리스트들이다.
     

    - 몇 가지는 마이크로 아키텍처들과 대응이 되지만, 몇 개는 대응되지 않을 것이다. 예를 들어 Penryn, Haswell, pentium 등 대부분이 인텔의 마이크로 아키텍처와 대응이 된다. 그러나 qemu에서 직접 만든 qemuXX, host, base 등을 제외하고 core2duo등은 실제로 대응이 되지 않는다. core2duo는 마이크로 아키텍처는 아니고 intel Core 라는 마이크로 아키텍처를 기반으로 만든 실제 프로세서 모델이다.  
     
    - 재미있는 건 qemu-system-x86_64에서 지원하는 x86_64 관련 칩셋들이 정해져 있다보니, `-cpu host` 옵션과 같이 쓰기가 애매하다는 것이다. 예를 들어, `qemu-system-x86_64 -M pc -cpu host`를 했다고 쳐보자. 그런데 `-M pc` 의 사양은 이미 정해져있다. 즉, 1996년도에 정해진 칩셋이다(i440FX가 1996년도에 나왔다). 근데 `-cpu host` 옵션은 현재 내 컴퓨터의 cpu를 가져다 쓰겠다는 소리다. 내 컴퓨터 CPU는 intel skylake 마이크로 아키텍처를 기반으로 하는 CPU이다. 이 skylake는 2015년도에 나온 CPU다. 1996년도에 만들어진 칩셋과 2015년도에 만들어진 CPU가 호환이 될까? 당연히 안된다. 그래서 QEMU는 CPU의 기능중에 machine 옵션으로 지정된 칩셋에서 사용 불가능한 기능이 있다면 필터링한다.
     
     
    : enable-kvm
    " 요 kvm이 이번에 QEMU에서 꾀나 혁명을 가져다 준 기술인 거 같다. 부팅 속도를 어마무시하게 개선했다는 거 같은데, 나는 잘 모르겠다.
     
     
    : m ${RAM 사이즈(단위는 MByte)}
     
     

    : `-drive`

    Define a new drive. This includes creating a block driver node (the backend) as well as a guest device, and is mostly a shortcut for defining the corresponding `-blockdev` and `-device` options.

    `-drive` accepts all options that are accepted by `-blockdev`. In addition, it knows the following options:

     

    " `file=file`

    This option defines which disk image (see the Disk Images chapter in the System Emulation Users Guide) to use with this drive. If the filename contains comma, you must double it (for instance, “file=my,,file” to use file “my,file”).

    Special files such as iSCSI devices can be specified using protocol specific URLs. See the section for “Device URL Syntax” for more information.

     

    " `if=interface`

    This option defines on which type on interface the drive is connected. Available types are: ide, scsi, sd, mtd, floppy, pflash, virtio, none.

     

    " `index=index`

    This option defines where the drive is connected by using an index in the list of available connectors of a given interface type.

     

    " `media=media`

    This option defines the type of the media: disk or cdrom.

     

    " format=format

    Specify which disk format will be used rather than detecting the format. Can be used to specify format=raw to avoid interpreting an untrusted format header.

     

    " `-hda, -hdb, -hdc, -hdd` 옵션 대신에 아래와 같이 사용이 가능하다. 각 디스크는 `index=` 옵션을 통해 구분된다.

    qemu-system-x86_64 -drive file=file,index=0,media=disk
    qemu-system-x86_64 -drive file=file,index=1,media=disk
    qemu-system-x86_64 -drive file=file,index=2,media=disk
    qemu-system-x86_64 -drive file=file,index=3,media=disk

     

    " 기본적으로 `-if` 옵션을 명시하지 않으면, `ide`로 설정된다. 그리고 `index` 또한 자동으로 증가한다. 아래의 명령어의 경우, `a` 파일이 `index 0`이 되고, `b` 파일은 `index 1`이 된다.

    qemu-system-x86_64 -drive file=a -drive file=b

     

    : drive

    " virtual storage devices를 지정한다. 플로피, CD, 하드 디스크부터 다양한 저장소들을 지정할 수 있다. `-drive` 옵션에서 많은 옵션들이 존재하는데, 몇 가지만 알아보자.
     
    1) if
    : 인터페이스 타입을 지정한다. 뭔말? storage device가 QEMU에서 에뮬레이트한 가상 머신과 어떻게 연결되었는지, 데이터 통신은 어떻게 하는지에 대한 프로토콜을 적으라는 소리다. `if`에서 사용하는 몇 가지 예시를 들겠다. 
    1.1) IDE : 예전 PATA 시절에 쓰이던 프로토콜(인터페이스)이다. 현재 SATA와 NVMe가 판을 치는 시대에서는 더 이상 보기 힘들다. - https://en.wikipedia.org/wiki/Parallel_ATA#IDE_and_ATA-1
     
    1.2) SCSI : 역시나 이 놈도 storage device 관련 프로토콜이다. IDE 보다 훨씬 빠른 디스크 드라이브 프로토콜(인터페이스)이다. 1980년도에 만들어졌는데, 아직도 서버와 같은 겁나 빠른 퍼포먼스를 원하는 PC에서 쓰이고 있는 프로토콜이다. 
     
    그 외에 pflash, mtd, sd, floppy, virtio 등도 가능하다고 하는 듯 하다. 근데, ㄴ
     
     

    : boot

    " 만약 위에서 `-drive` 옵션을 통해 2개 이상의 storage devices를 생성하면 BIOS/UEFI 에게 어떤 storage device가 boot device인지 알려줘야 한다. `boot` 옵션은 이럴 때 사용한다. 근데, 이 옵션을 사용하지 않아도 크게 문제가 되지는 않는다. 현재 시스템의 디스크중에 MBR 부트 섹터가 존재하는 디스크가 하나이기 때문이다. BIOS는 알아서 모든 storage devices들을 탐색해서 MBR 부트 시그니처가 있는 놈을 자동으로 실행한다.

    - boot c : 부트 디스크로 하드 디스크 부터 먼저 검사한다.
    - boot d : 부트 디스크로 CD-ROM 부터 먼저 검사한다.
    - boot h : 부트 디스크로 네트워크 부터 먼저 검사한다.

     

     
     
    : show-cursor
    " 만약 QEMU를 `-nographic` 없이 실행하면 아래와 같은 화면을 보게 된다. 

    - 즉, 별도의 창이 하나 더 생기는데 QEMU는 이 창을 graphic 창이라고 부른다. 근데 저 graphic창을 클릭하면 커서가 딸려들어간다. 그래서 커서가 보이지 않게 된다. 물론, `ctrl + alt + g`를 누르고 마우스를 움직이면 커서가 나온다. 커서의 위치를 확인하고 싶으면 `-show-cursor` 옵션을 쓰면 된다. 그러면 그래픽창안에서 커서의 위치를 보여준다. 그런데, 당연하게도 저 창안에서만 마우스 커서가 움직이기 때문에, 커서를 밖으로 빼내려면 `ctrl + alt + g` 를 입력해야 한다. 
     
     
    : nographic
    " 요거로 실행하면 별도의 창을 만들지 않고, 현재 명령어를 친 shell에서 text로만 qemu와 통신한다.  
     

     

    - 디스크 이미지 만들기

    qemu-img create -o size=[128M | 5G] ${name}.img

    : 근데, 위의 명령어보다는 dd를 더 많이 사용한다.

     

     

    - 64비트 멀티코어 OS 원리와 구조 `QEMU 명령어 해석`

    - 책에서 제공하는 명령어는 리눅스용으로 바꾸면 아래와 같다.

    qemu-system-x86_64 -L . -m 64 -fda Disk.img -localtime -M pc

    - 사실 바꿔도 아직 리눅스용은 아니다. 그리고 너무 오래전 명령어다.
     
    - `-M pc` : 의미는 아래와 같다. 여기서 default PC는 위에서 설명한 I440FX 다.

    - 현재 내가 사용하는 qemu-system-x86_64의 버전은 아래와 같다. 그리고 지원하는 머신도 아래와 같다.
     

    - 책 저자의 환경과 동일하게 가려면, `-M pc-0.11` 로 해야할려나? ㅇㅇ 동일하게 잘되는거 같다. 최종 명령어는 아래와 같이!!

    qemu-system-x86_64 -M pc-0.11 -m 64 -drive format=raw,file=Disk.img,if=floppy -rtc base=localtime 

     

    - 책의 24부터 IDE 인터페이스를 사용하는 PATA 하드웨어 디바이스를 사용한다. 그래서 명령어가 조금 바뀐다.

    qemu-system-x86_64 -M pc-0.11 -m 64 -drive format=raw,file=HDD.img,if=ide -drive format=raw,file=Disk.img,if=floppy -rtc base=localtime

    - 2개의 storage devices가 생겨서 bootable device를 선택해줘야 할 듯 싶지만,  BIOS가 모든 storage devices들을 탐색해서 MBR 시그니처가 있는 device를 실행시킨다. 만약 각 디스크마다 MBR 시그니처가 있다면, 'boot' 옵션을 반드시 사용해야 한다.
     


    - QEMU에서 q35(default로 ahci 컨트롤러가 있음)말고 pc(i440fx)에서는 AHCI를 못만들주 알았는데 아래와 같이하면 만들어진다. 일단 테스트용이다.

    qemu-system-x86_64 -M pc-0.15 -m 64 -drive id=disk,file=HDD.img,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -drive format=raw,file=Disk.img,if=floppy -rtc base=localtime

     

     

    - QEMU 64비트

    : CPUID를 통해 롱 모드 지원 여부르 확인하는데, EDX에 계속해서 값이 0이 나와서 확인해보니 에뮬레이터를 32비트용으로 돌리고 있었다.

    1" qemu-system-i386 : CPUID#0x01, X64#0x00, EXT#0x04, STD#0x04
    2" qemu-system-x86_64 : CPUID#0x01, X64#0x01, EXT#0x0A, STD#0x0D 

    : qemu-system-i386은 32비트만 지원하고, `qemu-sysem-x86_64`는 32비트 와 64비트를 모두 지원한다. 역시나 눈에 가장 뛰는 점은 64비트의 지원여부다. 64비트 개발을 목적으로 한다면 반드시 qemu-system-x86-64를 사용하도록 하자. 

     

     

    - QEMU 수동 설치

    : QEMU를 여러 개 설치해야 하는 경우가 생길 수 있다. 아래의 사이트에서 다운로드 받을 수 있다.

    - https://download.qemu.org/

     

    Index of /

     

    download.qemu.org

    : 설치방법은 아래의 링크에 있다.

    - https://en.wikibooks.org/wiki/QEMU/Installing_QEMU#cite_note-configure-7

     

    QEMU/Installing QEMU - Wikibooks, open books for an open world

    Installing from a repository (Unix)[edit | edit source] Most GNU/Linux distributions have package repositories that carry precompiled binaries of QEMU. This is a much simpler installation process when compared to compiling it from source. It's often best t

    en.wikibooks.org

    : 그런데 설치 시에 주의점이 있다. `./configure` 실행 할 때, 그냥 `./configure`를 실행하면 모든 보드 타입들을 인스톨한다. 그러므로, `./configure --target-list=i386-softmmu` 와 같이 `--target-list` 속성을 넣어서 빌드하고 싶은 보드 타입만 빌드하는 것이 좋다.

     

     

    - QEMU with GDB

    : 파일 시스템 구현 시, 도저히 안되겠어서 QEMU에서 GDB를 사용하기로 했다. gdb를 사용하기 위해서는 컴파일 시, gcc 옵션으로 `-g`를 사용해야 하고 .elf 파일이 필요하다. 그리고 QEMU 명령은 아래와 같이 변경한다.

    qemu-system-x86_64 -M pc-0.15 -m 4096 -drive id=disk,file=f32-test.img,if=none -device ahci,id=ahci -device ide-drive,drive=disk,bus=ahci.0 -drive format=raw,file=Disk.img,if=floppy -rtc base=localtime -boot d -gdb tcp::1234 -S

    : 위의 명령을 치면 QEMU는 GDB Connection을 기다린다. 그래서 QEMU 화면이 멈춘 것처럼 동작한다. 이제 GDB를 실행한다. 그리고 나서 `target remote localhost:1234`를 입력해서 QEMU에 연결한다. 성공하면 이제 디버깅 심볼 파일이 필요하다. 이 때, 필요한 게 컴파일 시 생겨나는 *.elf 파일이다. `file ${SYMBOL.elf}` 로 심볼을 GDB에 로드한다. 이제 준비는 끝났다. 아래 링크를 통해 GDB를 재미있게 활용해보자.

     

    - https://yohda.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EB%A6%AC%EB%88%85%EC%8A%A4-GDB

     

    - QEMU 모니터

    : QEMU에서 동작하는 게스트 OS의 상태를 실시간으로 모니터링 할 수 있는 유틸리티다. QEMU 자체에 내장되어 있고, GDB와 같은 소스 레벨의 디버깅은 아니지만 게스트 OS의 메모리 상태부터 디바이스의 구성, 실시간으로 디바이스를 바꿀 수 있는 기능등이 탑재되어 있어서 상당히 편리하다. 

     

    : QEMU 모니터 진입

    " <Ctrl + Alt + 2> 키를 통해 모니터로 진입할 수 있다. <Ctrl + Alt + 1> 키를 통해 게스트 OS로 빠져나온다.

     

    : info block

    " 현재 게스트 OS의 디스크 드라이브들의 상태를 보여준다.

     

    : info qom-tree

    " 현재 동작하고 있는 QEMU 머신의 디바이스 트리 구조를 보여준다

     

    : info qtree

    " `info qom-tree`에서 보여주는 것보다 더 디테일한 내용들을 보여준다.

     

     

    - 디버그 정보

    : QEMU 실행 시, `-d` 옵션을 선택하면 디버그 정보를 출력해준다. 대개는 `-d int` 옵션을 자주 사용한다. `int`는 `interrupts/exceptions` 정보를 출력해준다. 아쉬운 점은 QEMU에서 `-d` 옵션 관련해서 공식적인 문서를 제공해주지 않는다는 것이다.

    : QEMU는 인터럽트 및 익셉션이 발생하면 위와 같은 정보를 출력해주는데, 내용은 다음과 같다.

     

    " check_exception old: 0xffffffff new 0xd
        12: v=0d e=0fa0 i=0 cpl=0 IP=0008:0007f965 pc=0007f965 SP=0010:0007f96c env->regs[R_EAX]=00000000

    " v=0d : 인터럽트 벡터 번호를 의미한다. 0x0D는 십진수 13이다. 즉, General Protection Fault를 의미한다.
    " e=0fa0 : 에러 코드를 의미한다. #GP는 에러 코드를 포함하고 있다. 그 해석법은 이 글을 참고하자. #DF 같은 경우는 에러 코드가 기본적으로 `0`이다.
    " cpl : 현재 명령어를 실행한 CPU의 실행 권한을 보여준다. 이 값은 각 세그먼트 디스크립터의 DPL과 비교된다. 만약, CPL이 값이 물리적 더 크다면, 에러를 발생시킨다.
    " IP : CS 디스크립터와 IP의 값을 같이 보여준다.
    " pc : 현재 실행한 주소
    " SP : 스택 포인터 주소

    " [X]S [ GDT 오프셋 ] [ 세그먼트 디스크립터 베이스 어드레스 ] [ 세그먼트 디스크립터 크기 ] [ 세그먼트 디스크립터 플래그 ] DPL=n [ CS|DS ] [ R|WA ]

    = `GDT 오프셋`은 해당 세그먼트 디스크립터가 GDT 내에서 어디에 위치되어 있는지를 의미한다. 32비트 x86 에서는 디스크립터 사이즈는 8B다. 두 번째, 세 번째, 네 번째는 그대로 이해하면 된다. DPL은 디스크립터의 실행 권한을 의미한다. DS는 데이터 디스크립터를 의미하고, CS32는 32비트 코드 디스크립터를 의미한다. R은 `READ ONLY`, WA는 `WRITE/READ`를 의미한다.

     

    " CPL=A II=B A20=C SMM=D HLT=E

    = `A20`은 말 그대로 A20의 활성화 여부를 알려준다.

     

    " GDT [ GDT 베이스 어드레스 ] [ GDT 길이 ]

    = 위의 로그는 GDT가 0x00007F29에 있다고 말하는 것이다. 그리고 길이는 0x18, 즉, 24B이다. NULL, CODE, DATA 디스크립터 3개가 있으니 길이는 24가 맞다. bl.elf를 확인해보면 

    $ nm -v bl.elf
    ...
    00007f29 t _gdt_tbl
    00007f41 t _gdtr
    ...

     

    " IDT [ IDT 베이스 어드레스 ] [ IDT 길이 ]

    = 위의 로그는 IDT가 0x00104030에 있다고 말하는 것이다. 그리고 길이는 0x7FF, 즉, 2047B이다. IDT 엔트리가 8바이트 인것을 고려해서 총 256개 있다.  

    $ nm -v kernel.elf
    ...
    00104020 b idtr
    00104030 b idt_tbl
    ...

     

    : 위의 에러를 해석해보면 다음과 같다.

    " OSDEV에 의하면, #GP의 에러 코드는 다음과 같다. 
    출처 -&nbsp;https://wiki.osdev.org/Exceptions#Selector_Error_Code
    " e=0fa0는 `00000111110100 - 00 - 0` 은 다음과 같이 해석된다.
    = 0 : 외부 인터럽트가 아니다. 즉, CPU 내부에서 발생한 인터럽트다.
    = 00 : GDT에 접근하다가 발생한 에러다.
    = 00001/1111/0100 : GDT 오프셋을 의미한다. 즉, 0x1F4 오프셋을 갖는 세그먼트 디스크립터에 접근하다가 에러가 발생했다는 뜻이다.

    : 위의 해석된 내용을 보면, 500번째 세그먼트 디스크립터에 접근했다는 것인데 그런 디스크립터는 존재하지 않는다. 

     

     

    - 라즈베리파이

    : YohdaOS는 ARM도 지원해야 하므로, ARM64를 사용해야 한다. 레퍼런스로 사용하기 좋은 보드가 라즈베리파이 이므로 QEMU에서 라즈베리파이를 설정하는 방법을 알아보자. 현재 내가 사용중인 qemu-system-aarch64 에는 machine type으로 라즈베리파이를 지원하지 않는다. QEMU 6.2.0 를 수동으로 설치해서 라즈베리파이3B가 정상적으로 QEMU를 통해 실행되는지를 확인해 볼 것이다. 6.2.0을 쓰는 이유는 아래의 링크때문이다.

     

    - https://farabimahmud.github.io/emulate-raspberry-pi3-in-qemu/

     

    Emulate Raspberry Pi 3 using QEMU in 64 bit

    I have tried to figure out a way to run raspberry pi using QEMU but could not. So here I am putting all the references I have pieced together that should just work out of the box.

    farabimahmud.github.io

     

    : 그러나 QEMU 8.0.0도 머신 타입으로 라즈베리파이3B를 지원하는 것으로 보인다.

    춯처 -&nbsp;https://www.qemu.org/docs/master/system/arm/raspi.html

     

    - 2023-03-20기준 QEMU 공식 홈페이지의 LTS 버전은 7.2.0으로 보인다. 그런데, 해당 버전에서는 qemu-system-aarch64가 raspi3b를 지원하지 않는다. 그런데, 6.1.0과 6.2.0까지는 지원을 한다. 그래서 수동 설치를 진행하려고 한다.

     

     

     

    : 아래의 명령을 통해 라즈베리파이3B를 실행할 수 있다. 일단 지금은 SD Card를 장착시키지 않은 코드이다. 추후에 파일 시스템  추가시 SD Card를 장착하려고 한다.

    qemu-system-aarch64 -M r aspi3b -m 1024 -serial null -serial stdio -kernel kernel8.img

     

    'Linux > development tool' 카테고리의 다른 글

    [GIT] 리눅스 커널 코드 분석  (0) 2023.10.05
    [개발 도구] GDB  (0) 2023.08.07
    [개발 도구] linker script  (0) 2023.08.03
    [개발 도구] Shell Prompt 언어 설정  (0) 2023.08.03
    [LINUX][VIM] - Vim Session  (0) 2023.08.03
Designed by Tistory.