Kontrol Paneli

QEMU ile Gömülü Linux Sistemlerinin Öykünmesi

QEMU ile Gömülü Linux Sistemlerinin Öykünmesi

 

1. Giriş

Gömülü yazılım geliştirme, geliştirme kartları, harici modül aygıtları vb. gibi yerleşik donanım aygıtlarına dayanır, ancak hata ayıklama işinin çevre birimleriyle hiçbir ilgisi yoksa, donanım satın almadan QEMU kullanılarak yalnızca çekirdek hata ayıklaması simüle edilebilir.

Linux ve Windows ana bilgisayarları ve öykünülmüş PowerPC, ARM, MIPS ve SPARC hedefleri için kullanılabilir. QEMU, ana bilgisayar ve hedef işlemci arasında minimum bir çeviri katmanı sağlama yaklaşımını benimser. Ana işlemci, öykünücüyü çalıştıran işlemcidir ve öykünmekte olan şey hedef işlemcidir.

Aşağıda, QEMU geliştirme ortamını kurma sürecine ayrıntılı bir giriş yer almaktadır.

 

2. Çevre

2.1 Kullanılan ortam

*Ubuntu-18.04.1

VEYA:

* Bilgisayar: Windows10

* Sanal Makine:VirtualBox-5.18

* Sanal İşletim Sistemi:Ubuntu-18.04.1

* Simüle edilmiş geliştirme kartı: vexpres

2.2 Ortamı kurarken kullanılan araçlar

* qemu-4.2.0

* linux-4.14.172 (Linux Çekirdeği)

* u-boot-2017.05

* meşgul kutusu-1.31.1

* arm-linux-gnueabi-gcc

İlgili tüm dosyaları /home/joe/qemu içine koyun

3. Çapraz derleme araçlarını kurun

# sudo apt kurulumu gcc-arm-linux-gnueabi

 

Kurulumun başarılı olup olmadığını kontrol edin

$ arm-linux-gnueabi-gcc -v

Yerleşik incelemeleri kullanma.

COLLECT_GCC=arm-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper

Hedef: arm-linux-gnueabi

Şunlarla yapılandırılmıştır: ../src/configure -v –with-pkgversion='Ubuntu/Linaro 7.5.0-3ubuntu1~18.04′–with-bugurl=file:///usr

İplik modeli: posix

gcc sürüm 7.5.0(Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)

 

4. Linux çekirdeğini yapılandırın ve derleyin

4.1 Linux Çekirdeğini İndirin

Gerekli çekirdek sürümünü www.kernel.org adresinden indirin.

Burada nispeten en son uzun vadeli desteklenen çekirdek sürümü linux-4.4.157'yi indiriyorum

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.157.tar.xz  /qemu dizinine

4.2 Linux çekirdeğinin sıkıştırmasını açın

# tar xvJf linux-4.4.157.tar.xz

4.3 Linux Çekirdeği Derleme

// Çekirdek kaynak dosya dizinini girin

# cd linux-4.4.157

yap CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig

yap CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

menuconfig'i çalıştırmak ncurses paketinin eksik olduğunu gösteriyorsa, yüklemek için aşağıdaki komutu çalıştırmanız yeterlidir)

$ sudo apt-get install libncurses5-dev

Menü konfigürasyonuna girin ve aşağıdaki ayarları yapın

Çapraz alet zinciriyle derleme

Başarılı bir derlemeden sonra, dizinin altında bir çekirdek görüntü dosyası oluşturun

arch/arm/boot, zImage ve dtb, rahat kullanım için ayrı bir klasöre kopyalanabilir

 

5. QEMU Araçlarını Kurun

5.1 QEMU'yu kurun

* wget https://download.qemu.org/qemu-4.2.0.tar.xz

* tar xvJf qemu-4.2.0.tar.xz

* cd qemu-4.2.0

5.2 QEMU'yu yapılandırmadan önce bağımlı paketleri kurun

# uygun kurulum zlib1g-dev
# uygun kurulum libglib2.0-0 libglib2.0-dev
# uygun kurulum libsdl1.2-dev
# uygun kurulum libpixman-1-dev libfdt-dev

Derlemeden sonra dosyaların dağınık olmasını önlemek için, derleme için ara hedef yolu olarak oluşturucu dizini oluşturun.

QEMU'yu yapılandırın, derleyin ve kurun.

5.3 QEMU'yu kol mimarisi altındaki tüm kartları destekleyecek şekilde yapılandırın

# ../configure –target-list=arm-softmmu –audio-drv-list=

Aşağıdaki istem görüntülendiğinde pixman eksikse,

kurmak için sudo apt-get install libpixman-1-dev kullanın.

5.4 QEMU sürümünü görüntüleyin

5.5 QEMU tarafından desteklenen geliştirme kartlarını görüntüleyin

5.6 QEMU'yu Çalıştır

# qemu-sistem-kol -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

TD:

$pwd

/ev/joe/qemu

# qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-.4.157/arch/arm/boot/zImage -dtb linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9. dtb -nographic - "console=ttyAMA0" ekle

qemu'yu daha iyi test etmek ve başlatmak için start.sh başlangıç ​​komut dosyasını oluşturabilir ve komut dosyasına chmod +x start.sh'yi çalıştırma izni verebilirsiniz.

 

#! / Bin / bash

 

qemu-sistem-kolu \

-M vexpress-a9 \

-m 512M \

-kernel /home/joe/jemu/linux-4.4.157/arch/arm/boot/zImage \

-dtb /home/joe/jemu/linux-4.4.157/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \

-nografik \

- "console=ttyAMA0" ekleyin

 

6. Bir kök dosya sistemi oluşturun

Basit bir kök dosya sistemi oluşturmak için meşgul kutusunu kullanın.

6.1 Meşgul kutusu aracını indirin

https://busybox.net/downloads/ adresinden meşgul kutusunu indirin

# wget https://busybox.net/downloads/busybox-1.31.1.tar.bz2

# tar xjvf meşgul kutusu-1.31.1.tar.bz2

# cd meşgul kutusu-1.31.1

# defconfig yap

# yap CROSS_COMPILE=arm-linux-gnueabi-

# make install CROSS_COMPILE=arm-linux-gnueabi-

Kurulumun başarılı olduğunu gösteren aşağıdaki bilgiler istenir.

Kurulum tamamlandıktan sonra, oluşturulan hedef dosya varsayılan olarak ./_install dizinine geçer.

 

6.2 Kök dosya sistemi oluştur

6.2.1 meşgul kutusunu derleyin ve kurun

#mkdir rootfs

# sudo cp -r _install/* rootfs/

6.2.2 Kök dosya sistemine glibc kitaplığı ekleyin, yükleyici ve dinamik kitaplık ekleyin

# sudo cp -r _install/* rootfs/

# sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/

6.2.3 4 tty terminal aygıtı oluşturun (c, karakter aygıtı anlamına gelir, 4 ana aygıt numarasıdır ve 1~4 ikincil aygıt numaralarıdır)

 

6.3 SD kart dosya sistemi görüntüsü yap

6.3.1 Boş bir SD kart görüntüsü oluşturun

# dd if=/dev/zero of=rootfs.ext3 bs=1M sayı=32

6.3.2 SD kartı exts dosya sistemi olarak biçimlendirin

# mkfs.ext3 rootfs.ext3

6.3.3 Kök dosyaları SD karta yazın

# sudo mount -t ext3 rootfs.ext3 /mnt -o döngüsü

# sudo cp -rf rootfs/* /mnt/

# sudo umount /mnt

 

7. Doğrula

7.1 Qemu'yu Başlat

Test etmek için aşağıdaki komutu çalıştırın, derlenmiş çekirdeğin başarıyla çalışıp çalışmadığını kontrol edin

# sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel ~/qemu/zImage –dtb ~/qemu/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

Veya Komut Dosyasını kullanarak:

 

Yukarıdaki testte, çekirdek, kök dosya sisteminden yoksun olduğumuzu öne sürerek panik bildirecektir.

Yukarıdaki sorun, x86 ortamında oluşturulan meşgul kutusu aracından kaynaklanmaktadır.

Meşgul kutusunu kurarken make install kullandık, bu yüzden kullanmalısınız

yap ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install

 

Derleme aracı, kol platformu tarafından kullanılan meşgul kutusu aracını oluşturur.

# dosya rootfs/bin/meşgul kutusu

rootfs/bin/busybox: ELF 32-bit LSB yürütülebilir, ARM, EABI5 sürüm 1 (SYSV), dinamik olarak bağlantılı, yorumlayıcı /lib/ld-, GNU/Linux 3.2.0 için, BuildID[sha1]=cbcd33b8d6c946cb19408a5e8e714de554c87f52, strippedcXNUMXfXNUMX,

 

7.2 Tekrar doğrulayın

Şimdi, Qemu Linux çekirdeğini başlattı ve dosya sistemini başarıyla kurdu ve seri terminal aracılığıyla basit işlevlerle sistemle etkileşime girebilir. Yazdırma işleminde /etc/init.d/rcS dosyasını çalıştıramama sorunu, sadece /etc/init.d/rcS dosyasını eklemeniz yeterlidir. Dosyanın içeriği bir bilgi istemi ifadesi olabilir.

 

7.3 QEMU'dan Çık

qemu'dan çıkmanın iki yolu

* Başka bir terminal girişinde: tüm qemu-sistem-kolunu öldür

* Qemu girişinde: Ctrl+ A; X

QEMU: Sonlandırılmış

 

8. Linux çekirdeğini u-boot ile başlatın

Gömülü sistem genellikle şunları içerir: u-boot, kernel, rootfs ve appfs. Aşağıdaki şekilde gösterilen ARM geliştirme panosunda bu parçaların konumsal ilişkisi

 

Önyükleyici Önyükleme Parametreleri çekirdek Kökler Uygulamalar

 

Rootfs, panoda veya PC'de çalışabilir

 

8.1 U-önyüklemeyi hazırlayın

8.1.1 u-boot'u indirin

http://ftp.denx.de/pub/u-boot/, kullandığımız: u-boot-2021.01.tar.bz2

# tar -jxvf u-boot-2018.09.tar.bz2

8.1.2 U-önyüklemeyi derleme

# vim Make dosyası

CROSS_COMPILE = arm-linux-gnueabi-

# vim yapılandırma.mk

ARCH = kol

# vexpress_ca9x4_defconfig yap, hata

İhtiyaç: sudo apt install bizon

sudo apt kurulum esnekliği

sonra: # make -j4 hatası

İhtiyaç: dışa aktar CROSS_COMPILE=arm-linux-gnueabi-

ARCH'yi dışa aktar = kol

tekrar: # vexpress_ca9x4_defconfig yap

# make -j4

 

 8.1.3 Test edin, u-boot'u başlatın

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic

 

8.2 Çekirdek yapılandırma derlemesi

Çekirdek görüntüsünü başlatmak için u-boot'u kullanın:

Çekirdeği uImage formatında derlemeniz gerekiyor,

uImage'ın yükleme adresini bellekte belirtmeniz gerekiyor

Çekirdeği derlerken belirtin: LOADADDR=? uResim -j4

 

# cd /home/joe/qemu/linux-4.4.157

# LOADADDR yap=0x60003000 uImage -j4

 

U-boot derlemesi tamamlandıktan sonra, tool klasörü altında bir mkimage dosyası oluşturulacaktır, bu dosyayı cross derleyici dizini altındaki bin klasörüne kopyalayın.

$ cd qemu/linux-4.4.157

Hata:

$ sudo apt u-boot araçlarını kurun

uImage'ı edinin

9. QEMU ağ işlevi ayarları

Qemu sanal makinesi u-boot'ta başladığında, uImage'ın belleğe yüklenmesi gerekir ve uImage, TFTP sunucusu aracılığıyla bellekte belirtilen adrese indirilebilir.

9.1 Ana bilgisayar çekirdeğinin tun/tap modülünü destekleyip desteklemediğini kontrol edin

// Köprülü ağın bağlı olduğu iki aracı kurun

# sudo apt install uml-utilities köprü-utils

Tun cihaz dosyası oluştur: /dev/net/tun (genellikle otomatik olarak oluşturulur)

/etc/network/interfaces'i değiştirin (ağı yapılandırın, etkili olması için yeniden başlatın)

# sudo vim /etc/ağ/arayüzler

auto loiface lo inet loopbackauto enp0s3 // sanal ağın adı cardauto br0iface br0 inet dhcpbridge_ports enp0s3

 

9.2 Yeniden Başlatma

# yeniden başlatma

Ardından Qemu'nun ağ ortamını kontrol edin

Sanal ağ bağlantı noktası br0, Qemu sanal makinesi ile Linux ana bilgisayarı arasındaki iletişim için ağ bağlantı noktasıdır.

 

10. TFTP sunucusunu kurun

Qemu simülasyon geliştirme kartı için uImage'ı başlatırken uImage'ı belleğe indirmek için bir TFTP sunucusu oluşturun

 

10.1 tftp aracını yükleyin

 

$ apt-get kurulumu tftp-hpa tftpd-hpa xinetd

 

10.2 Yapılandırma dosyasını değiştirin ve TFTP sunucu dizinini ayarlayın

# sudo vim /etc/default/tftpd-hpa

......

TFTP_DIRECTORY=”/home/joe/tftpboot”

......

10.3 Linux ana bilgisayarında bir tftp dizini oluşturun

# mkdir /home/joe/tftpboot

# chmod 777 /ev/joe/tftpboot

 

10.4 tftp hizmetini yeniden başlatın

# sudo /etc/init.d/tftpd-hpa yeniden başlatma

 

10.5 u-boot'ta çekirdek başlatma parametrelerini ayarlama

uImage ve cexpress-v2p-ca9.dtb'yi tftpboot'a kopyalayın

Doğrulamak için Qemu'yu başlatın

 

$ sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot-2021.01/u-boot –nographic -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -sd rootfs. ext3

 

Şimdi, rootfs dizini, bir yansıtma dosyasına dönüştürülebilen basit bir kök dosya sistemidir ve yansıtma dosyası, geliştirme panosuna yazılabilir veya Linux çekirdeği, Qemu'da u-boot ile başlatılabilir ve üzerine monte edilebilir. ayna dosyası Ayrıca NFS ağ dosya sistemi aracılığıyla önyüklemeye ayarlanabilir.

 

11. NFS dosya sistemini bağlayın

11.1 NFS hizmetini kurun ve yapılandırın

ASLA Kurma

$ sudo apt nfs-kernel-server'ı kurun

 

11.1.2 Yapılandırma

$ sudo mkdir /home/joe/qemu/rootfs

$ sudo chown kimse: nogroup /home/joe/qemu/rootfs

$ sudo chmod 777 /home/joe/qemu/rootfs

$ sudo nano /etc/export

Ekle: /home/joe/qemu/rootfs *(rw,sync,no_root_squash)

 

nfs sunucusunu yeniden başlatın:

$ sudo /etc/init.d/nfs-kernel-server yeniden başlatma

Veya: $systemctl nfs-kernel-server'ı yeniden başlatın

 

NFS paylaşılan dizininin oluşturulup oluşturulmadığını kontrol edin

$ sudo showmount –e

NFS ağ dosya sistemini kullanırken, Linux ana bilgisayarının sistem güvenlik duvarını kapatması gerekir, aksi takdirde sistem çalışırken anormallikler meydana gelir.

 

Sonuç

Umarım, bu blogun yardımıyla QEMU hakkında daha çok şey biliyorsunuzdur. Yukarıda gösterilen tüm teknikler, programımıza yapılan çeşitli gönderimlerde kullanılmıştır. QEMU ile öykünmenin tek ve sabit bir yolu yoktur. Farklı teknikleri keşfedin ve sizin için neyin işe yaradığını görün. Bilgiye kendinizi alıştırın ve beklenmedik şekillerde size nasıl yardımcı olabileceğine şaşıracaksınız.

Bize ulaşın