Skip to content

1. Install [Making a QEMU disk image bootable with GRUB]

poo1130 edited this page Aug 23, 2015 · 1 revision

Making a QEMU disk image bootable with GRUB

  • 운영환경 : ubuntu 14.04

  • Ubuntu 설치후 터미널 실행

 # sudo apt-get-update
  # sudo apt-get-upgrade
  • Vim 편집기 / Github : clone를 목적으로 사용
 # sudo apt-get-install vim
  # sudo apt-get-install git
  • 소스 컴파일을 위한 기본 라이브러리 및 툴 설치 및 컴파일러 설치
 # sudo apt-get-install autoconf automake libtool flex bison tree
 # sudo apt-get-install g++ gcc
  • 컴파일리와 링커 최신버전 컴파일 설치를 위한 라이브러리 설치

    (기본적으로 위에서 update, upgrade 실시되었다면 최신버전이 이미 설치되어있다고 나옵니다. 만약 없다면 다음과 같은 명령어를 입력하여 설치 하시면 됩니다.)

  # sudo apt-get-install patchutils texinfo
  • ./usr/bin을 최우선 순위로 PATH 변수 설정(매우중요) g++ / gcc 컴파일 오류시 해결방법
  # Export PATH="/usr/bin:$PATH"
  압축 해제 ->  왼쪽 사이드 매뉴 에서 파일 클릭하고 거기에 압축해제된 파일 집어넣기 
  터미널 실행
  # cd binutils-2.25 디렉토리로 이동 
  # ./configure  --enable-64bit-bfd  --disable-shared  --disable-nls
  # Make configure-host
  # Make all
  # Sudo make install
  • Objconv 설치
 # git clone https://github.com/vertis/objconv
 # cd objconv 
 # g++ -o objconv  -O2  src/*.cpp (숫자 0 아닙니다 영문 대문자 O입니다 !!)
 # sudo cp objconv  /usr/bin/objconvtc 
  • 파티션 툴 설치
 # sudo apt-get install kpartx
 # sudo apt-get install bxImage
  • 사용가능한 파티션들의 장치 매퍼 리스트에 장치를 생성
 가상 머신 QEMU 설치
 # sudo apt-get install qemu
  • Grub install
 Clone Grub
 # git clone https://github.com/kbu1564/SecurityBootloader.git
 Grub 소스 컴파일
 # cd SecurityBootloader/grub/
 # ./linguas.sh
 # ./autogen.sh
 # ./configure --prefix=/home/사용자계정이름/g2/usr
 # Make 
 # Make install 
  • 가상 머신 테스트 하기 위한 가상 이미지 파일 시스템 생성
# cd ~
# qemu-img create -f raw brdisk-img.raw 4G
# sudo mkfs.ext2 brdisk-img.raw 
# fdisk brdisk-img.raw
fdisk brdisk-img.raw 셋팅 값 ( 주의 사항 : 천천히 보고 할것) 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xc65f2bd8.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content wont be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): x
Expert command (m for help): c
Number of cylinders (1-1048576, default 261): 406
Expert command (m for help): h
Number of heads (1-256, default 255): 16
Expert command (m for help): s
Number of sectors (1-63, default 63): 63
Expert command (m for help): r
Command (m for help): p
Disk brdisk-img.raw: 2147 MB, 2147483648 bytes
1 heads, 16 sectors/track, 262144 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc65f2bd8
Device Boot      Start         End      Blocks   Id  System
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): 2000000            
Command (m for help): p
Disk brdisk-img.raw: 2147 MB, 2147483648 bytes
1 heads, 16 sectors/track, 262144 cylinders, total 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc65f2bd8
Device Boot      Start         End      Blocks   Id  System
brdisk-img.raw1            2048     4194303      !@#!!@+  83  Linux
Command (m for help): w
The partition table has been altered!
Syncing disks. 

  • 생성한 파티션 실제 폴더에 mount 우선 해당 가상 드라이브 이미지 파일에 대한 장치드라이브 생성
    #	cd ~
    # sudo losetup /dev/loop0 brdisk-img.raw
  • 생성된 장치에 대한 boot mount 실행
    # cd~
    # mkdir boot
    # sudo mount /dev/loop0  boot
    # sudo ./g2/usr/sbin/grub-install --force --no-floppy --boot-directory=/home/사용자계정명/boot /dev/loop0
    # sudo ./g2/usr/sbin/grub-mkconfig ~/boot/grub/grub.cfg
  • grub 비디오 부분 값 수정
  # cd ~
  # sudo vim ~/boot/grub/grub.cfg 
  수정 내용 
   set default="0"
   set timout="3"  
   menuentry "Buildroot" {
   Insmod gzio
   lnsmod part_msdos
   lnsmod ext2
   }
  • Qemu 실행
     # cd ~
     # qemu-system-i386 brdisk-img.raw -serial stdio

결과

결과