10 sierpnia 2013 blog raspberry qemu

Uruchomienie systemu dla Raspberry Pi (Raspbian) w emulatorze Qemu.

Uruchomienie

Usunięcie zawartości pliku ld.so.preload jest konieczne, żeby móc się zalogować.

Montowanie partycji z obrazu:

$ sudo fdisk -lu 2013-07-26-wheezy-raspbian.img 

Dysk 2013-07-26-wheezy-raspbian.img: 1939 MB, bajtów: 1939865600, sektorów: 3788800
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x00047c7a

					Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
2013-07-26-wheezy-raspbian.img1            8192      122879       57344    c  W95 FAT32 (LBA)
2013-07-26-wheezy-raspbian.img2          122880     3788799     1832960   83  Linux

Offset do polecenia mount można otrzymać poprzez pomnożenie bloku początkowego (122880) przez 512.

$ sudo fdisk -lu 2013-07-26-wheezy-raspbian.img | grep img2 | awk '{print($2*512);}'
62914560

Czyli zamontowanie sprowadza się do polecenia:

mkdir /mnt/qemuimg
sudo mount 2013-07-26-wheezy-raspbian.img -o offset=62914560 /mnt/qemuimg

Następnie:

# czyścimy ld.so.preload
sudo rm -f /mnt/qemuimg/etc/ld.so.preload
sudo touch /mnt/qemuimg/etc/ld.so.preload
# odmontowujemy
sudo umount /mnt/qemuimg

Ściągnięcie kernela:

wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu

Włączenie systemu:

qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 ro" -net nic,vlan=1 -net user,vlan=1 -hda 2013-07-26-wheezy-raspbian.img -redir tcp:5022::22

Powiększenie dostępnego miejsca

Można wykonać dopiero po instalacji i wstępnej konfiguracji systemu!

Powiększamy plik i montujemy go jako urządzenie loop:

truncate -s 8G 2013-07-26-wheezy-raspbian.img
sudo losetup -fv 2013-07-26-wheezy-raspbian.img

Uruchamiamy fdisk:

sudo fdisk  /dev/loop0

Wyświetlenie listy partycji (litera p):

Witamy w programie fdisk (util-linux 2.23.2).

Zmiany pozostaną tylko w pamięci do chwili ich zapisania.
Przed użyciem polecenia zapisu prosimy o ostrożność.

Polecenie (m wyświetla pomoc): p

Widać już powiększony dysk:

Dysk /dev/loop0: 8589 MB, bajtów: 8589934592, sektorów: 16777216
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: dos
Identyfikator dysku: 0x00047c7a

 Urządzenie Rozruch   Początek      Koniec   Bloków   ID  System
/dev/loop0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/loop0p2          122880     3788799     1832960   83  Linux

Usuwamy drugą partycję (d, 2):

Polecenie (m wyświetla pomoc): d
Numer partycji (1,2, domyślnie 2): 
Partycja 2 usunięta

Tworzymy nową partycję (n, enter, enter, 122880). Trzeba podać początek zgodny z tym, co widać wyżej (122880).

Polecenie (m wyświetla pomoc): n
Typ partycji:
   p   główna (głównych: 1, rozszerzonych: 0, wolnych: 3)
   e   rozszerzona
Wybór (domyślne p): 
Przyjęto wartość domyślną p
Numer partycji (2-4, domyślnie 2): 
Pierwszy sektor (2048-16777215, domyślnie 2048): 122880
Ostatni sektor, +sektorów lub +rozmiar{K,M,G} (122880-16777215, domyślnie 16777215): 
Przyjęto wartość domyślną 16777215
Partycja 2 typu Linux o rozmiarze 8 GiB ustawiona

Zapisanie zmian (w):

Polecenie (m wyświetla pomoc): w
Tablica partycji została zmodyfikowana!

Wywoływanie ioctl() w celu ponownego odczytu tablicy partycji.

UWAGA: ponowny odczyt tablicy partycji zakończył się błędem 22: Zły argument.
Jądro nadal używa starej tablicy. Nowa tablica będzie używana po
następnym restarcie systemu albo po uruchomieniu partprobe(8) lub kpartx(8)
Synchronizacja dysków.

Odłączamy urządzenie loop0:

sudo losetup -d /dev/loop0

Po uruchomieniu Raspbiana używamy resize2fs:

pi@pi:~$ sudo resize2fs /dev/sda2
resize2fs 1.42.5 (29-Jul-2012)
System plików /dev/sda2 jest zamontowany pod /; wymagana zmiana rozmiaru w locie
old_desc_blocks = 1, new_desc_blocks = 1
System plików na /dev/sda2 ma teraz 2081792 bloków.

Sprawdzenie:

pi@pi:~$ df -h
System plików  rozm. użyte dost. %uż. zamont. na
rootfs          7,9G  1,5G  6,1G  20% /
/dev/root       7,9G  1,5G  6,1G  20% /
devtmpfs        124M     0  124M   0% /dev
tmpfs            25M  192K   25M   1% /run
tmpfs           5,0M     0  5,0M   0% /run/lock
tmpfs            50M     0   50M   0% /run/shm

Ponowne uruchomienie:

pi@pi:~$ sudo reboot

Uwagi

Warto zajrzeć