본문 바로가기

기타[etc]

[QEMU] Rpi jessi

SMALL

ARM 관련 공부를 하기 위해, RPI를 구했는데 기계를 들고 다니면 귀찮을것 같아서 

가상환경을 돌리려고 찾아보다. 시간을 많이 빼앗아서 정리하려 한다.


처음에는 VirtualBox의 rpi.ova 파일을 찾아서 가동시켰다. 잘 되기는 하는데 너무 오래된 패키지와

환경구축 등 귀찮은게 한두가지가 아니라서.. 


환경이 가추어진 RPI Image를 QEMU를 이용해서 돌릴 필요성 느낌


환경 : ubuntu 15.04 32bit


Download 위치 : http://downloads.raspberrypi.org/raspbian/images/

해당 URL에서 원하는 Image를 찾아서 wget으로 다운


Disk Image : 2016-02-09-raspbian-jessie.img


Downlaod 위치 : https://github.com/dhruvvyas90/qemu-rpi-kernel

git clone url 으로 커널 이미지를 다운 받았다.


Kernel Image : kernel-qemu-4.1.7-jessie


기본적으로 qemu를 설치해놓아야 한다.

apt-get install qemu-system-arm과 같이 apt로 쉽게 다운 받을수 있다.


준비물 : qemu, image, kernel


시작

richong@ubuntu:~/qemu$ sudo fdisk -l 2016-02-09-raspbian-jessie.img


Disk 2016-02-09-raspbian-jessie.img: 3.9 GiB, 4127195136 bytes, 8060928 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

Disklabel type: dos

Disk identifier: 0x3e7fd08e


Device                          Boot  Start     End Sectors  Size Id Type

2016-02-09-raspbian-jessie.img1        8192  131071  122880   60M  c W95 FAT32 (

2016-02-09-raspbian-jessie.img2      131072 8060927 7929856  3.8G 83 Linux


위와 같이 나온다.

2016-02-09-raspbian-jessie.img2      131072 8060927 7929856  3.8G 83 Linux

Units: sectors of 1 * 512 = 512 bytes

위 두부분을 확인하면 131072 sector부터 img가 시작이된다.


ㄹ이유는 찾아보지 않았지만 image2, Linux해당 부분이 가동 이미지에 수정이 필요하다.

여튼 저 img2를 이미지로 인식 시키는게 목표이다.



offset을 계산해보면 512 * 131072 = 67108864 


mount를 통해서 해당 2016-02-09-raspbian-jessie.img2 만 등록시킨다.


richong@ubuntu:~/qemu$ sudo mount -v -o offset=67108864 -t ext4 2016-02-09-raspbian-jessie.img ./tmp


와같이 offset설정을 통해서 img2을 tmp 폴더에 마운트 시켰다.


그러면 tmp에는 img2 내용이 올라가있을 것이다.


richong@ubuntu:~/qemu/tmp$ ls

bin   dev  home  lost+found  mnt  proc  run   srv  tmp  var

boot  etc  lib   media       opt  root  sbin  sys  usr


다음으로 해당 tmp에 /etc/ld.so.preload 파일을 수정해주어야 한다.


richong@ubuntu:~/qemu/tmp/etc$ cat /etc/ld.so.preload

/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so


해당 파일을 읽어보면 /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so 내용이 존재하는데 주석처리 #을 넣어준다.

richong@ubuntu:~/qemu/tmp/etc$ vim /etc/ld.so.preload

#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so


그리고 tmp에 마운트 시켰던 것을 umount 시킨다.

richong@ubuntu:~/qemu$ sudo umount ./tmp

이제 img수정을 다 마쳤다. 


richong@ubuntu:~/qemu$ sudo qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-4.1.7-jessie -M versatilepb -cpu arm1176 -m 256 -no-reboot -serial stdio -append "root=/dev/sda2 panic=3 rootfstype=ext4 rw init=/bin/bash" -hda 2016-02-09-raspbian-jessie.img

와 같이 일일이 명령어를 실행해두 된다.

해당 명령어를 설명해보면

qemu-system-arm 명령어를 실행시킨다.

-kernel option : kernel img 설정이다.
 
-M option : 머신을 설정하는 부분인데 -machine 명령어인가? 를통해서 지원가능한 머신을 알 수있다.

-cpu option : 어떠한 CPU를 사용할 것인가.

-m option : 얼마큼의 메모리를 사용할 것인가

-no-reboot option : 재부팅 없게 해라~

-serial option : 시리얼?...은 뭘로 할것ㅇ니지

-append option: 기본적으로 더 설정할 것인지에 대한 내용인데 어떤 쉘쓰고, 파일 시스템, 커널 패닉 걸렸을때 몇초 시간주고 root는 어떤 disk쓸건지 등 

설정

-hda option : 어떤 이미지를 사용 할 것인지.


저걸 일일이 치고 살순 없으니 쉘 설정 파일을 만들어서 사용한다.

richong@ubuntu:~/qemu$ vim config

#!/bin/bash

qemu-system-arm -kernel ./qemu-rpi-kernel/kernel-qemu-4.1.7-jessie -M versatilepb -cpu arm1176 -m 256 -no-reboot -serial stdio -append "root=/dev/sda2 panic=3 rootfstype=ext4 rw init=/bin/bash" -hda 2016-02-09-raspbian-jessie.img

config 파일을 만들어 준다.


richong@ubuntu:~/qemu$ chmod +x config

실행권한을 준다.

그리고 실행한다~

richong@ubuntu:~/qemu$ ./config



gdb까지 잘 된다. 근데 인터넷 설정은 안되어있다... 


/sbin/dhcpcd5 eth0 

명령어를 통해서 eth0을 설정해주면 인터넷도 잘된다.


[추가]

위와 같이 하면 구축에 있어서 부족한 부분이 있다.

http://www.linux-mitterteich.de/fileadmin/datafile/papers/2013/qemu_raspiemu_lug_18_sep_2013.pdf

해당 자료도 참고하면서 마무리 지었다.

LIST

'기타[etc]' 카테고리의 다른 글

arm cross compile  (0) 2016.12.06
/etc/apt/sources.list 파일 수정  (0) 2016.12.06
C++ Virtual  (0) 2016.11.27
효율적인 strstr 함수 만들기  (0) 2016.11.20
DLL 정리  (2) 2016.11.18