На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Осваиваем эмулятор, [QEMU] [uBoot] [ARM] [Verdex]
      Итак, отправной точкой для данной темы нам будет служить оригинальная статья: Gumstix emulation for QEMU, в которой говориться о возможности запуска образа на другой платформе.

      Достаточно принципиальным фактом является то, что Gumstix базируется на ARM архитектуре и это ограничивает круг доступных эмуляторов.
      В данной теме будет обсуждаться эмулятор QEMU. Не смотря на наличие его компиляций под разные операционные системы, простейшим случаем будет использование его под *nix .

      Берём актуальную, на данный момент, версию qemu-0.12.2.
      Разворачиваем архив. Переходим в корень.
      Для начала, стоит сконфигурить сборку
      ExpandedWrap disabled
        ./configure --target-list=arm-softmmu
      указав интересующую целевую платформу

      ExpandedWrap disabled
        make
      собрать эмулятор

      ExpandedWrap disabled
        make install
      установить в систему - требуются административные права

      так-же можно использовать дополнительные директивы при сборке (make): all clean cscope distclean dvi html info install install-doc recurse-all speed tar tarbin test build-all


      После успешной сборки и установки эмулятора, можно переходить к сборке образа.
      В роли загрузчика применяется U-Boot
      Его исполняемый код для Verdex можно взять здесь. Там-же можно скачать образ ядра и файловой системы; или-же использовать полученные образы в Здравствуй, Мир! (ls -1 ~/gumstix/gumstix-oe/tmp/deploy/glibc/images/gumstix-custom-verdex/).
      Эти три составляющие следует собрать в один файл в соответствии c аппаратной архитектурой.
      ExpandedWrap disabled
        rm flash
        dd of=flash bs=1k count=128k if=/dev/zero
        dd of=flash bs=1k conv=notrunc seek=0     if=uBoot.bin
        dd of=flash bs=1k conv=notrunc seek=256   if=rootfs.jffs2
        dd of=flash bs=1k conv=notrunc seek=31744 if=uImage.bin
      в той или иной степени имеющей описание в исходных кодах эмулятора (hw/gumstix.c)


      Единый образ получен, пришло время запуска:
      ExpandedWrap disabled
        qemu-system-arm -M verdex -pflash flash -monitor null -nographic -m 289
      указывая эмулируемую платформу verdex (перечень доступных приведён в приложении), способ загрузки образа и эмулируемый размер RAM

      Процесс пошёл, мы видим родные строчки процесса загрузки.. но в определённый момент, всё это дело омрачает навязчивое сообщение: Internal resource leak before ...
      Причиной его появления, на сколько я понимаю, является неудаление всех созданных временных переменных в исходном коде самого эмулятора - собственно это сообщение и выводится для сигнализации о возникновении такой ситуации (см. target-arm/translate.c). И с ходу, это дело подрулить мне не удалось.

      Однако, в природе ещё существует QEMU OpenSolaris релиз.
      Скачиваем qemu-0.9.1-06222008-sol, конфигурируем, собираем и устанавливаем аналогично.

      Запускаем:
      ExpandedWrap disabled
        [centos@CentOS GUMimg]$ qemu-system-arm -M verdex -pflash flash -nographic -m 289
        pxa2xx_clkpwr_write: CPU frequency change attempt
         
         
        U-Boot 1.2.0 (May 10 2008 - 21:22:03) - PXA270@600 MHz - 1604
         
        *** Welcome to Gumstix ***
         
        DRAM:  256 MB
        pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0x90
        Flash: 32 MB
        Using default environment
         
        pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0x90
        pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0x90
        Hit any key to stop autoboot:  0
        Instruction Cache is ON
        Copying kernel to 0xa2000000 from 0x01f00000 (length 0x00100000)...done
        ## Booting image at a2000000 ...
           Image Name:   Angstrom/2.6.21/gumstix-custom-v
           Image Type:   ARM Linux Kernel Image (uncompressed)
           Data Size:    1030052 Bytes = 1005.9 kB
           Load Address: a0008000
           Entry Point:  a0008000
        OK
         
        Starting kernel ...
         
        Linux version 2.6.21 (centos@CentOS) (gcc version 4.1.2) #1 Tue Jan 19 14:46:39 MSK 2010
        CPU: XScale-PXA270 [69054114] revision 4 (ARMv5TE), cr=00007977
        Machine: The Gumstix Platform
        Memory policy: ECC disabled, Data cache writeback
        Run Mode clock: 208.00MHz (*16)
        Turbo Mode clock: 624.00MHz (*3.0, active)
        Memory clock: 104.00MHz (/2)
        System bus clock: 208.00MHz
        CPU0: D VIVT write-back cache
        CPU0: I cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
        CPU0: D cache: 16384 bytes, associativity 64, 32 byte lines, 8 sets
        Built 1 zonelists.  Total pages: 65024
        Kernel command line: console=ttyS0,115200n8 root=1f01 rootfstype=jffs2 reboot=cold,hard
        PID hash table entries: 1024 (order: 10, 4096 bytes)
        Console: colour dummy device 80x30
        Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
        Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
        Memory: 256MB = 256MB total
        Memory: 257664KB available (1808K code, 196K data, 148K init)
        Mount-cache hash table entries: 512
        CPU: Testing write buffer coherency: ok
        NET: Registered protocol family 16
        Time: pxa_timer clocksource has been installed.
        NET: Registered protocol family 2
        IP route cache hash table entries: 2048 (order: 1, 8192 bytes)
        TCP established hash table entries: 8192 (order: 4, 65536 bytes)
        TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
        TCP: Hash tables configured (established 8192 bind 8192)
        TCP reno registered
        JFFS2 version 2.2. (NAND) (SUMMARY)  (C) 2001-2006 Red Hat, Inc.
        io scheduler noop registered
        io scheduler cfq registered (default)
        Console: switching to colour frame buffer device 80x24
        pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 22) is a FFUART
        pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 21) is a BTUART
        pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 20) is a STUART
        Probing Gumstix Flash ROM at physical address 0x00000000 (16-bit bankwidth)
        pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0
        Gumstix Flash ROM: Found 1 x16 devices at 0x0 in 16-bit bank
         Intel/Sharp Extended Query Table at 0x0031
        Using buffer write method
        Using static partitions on Gumstix Flash ROM
        Creating 3 MTD partitions on "Gumstix Flash ROM":
        0x00000000-0x00040000 : "Bootloader"
        0x00040000-0x01f00000 : "RootFS"
        0x01f00000-0x02000000 : "Kernel"
        TCP cubic registered
        NET: Registered protocol family 1
        NET: Registered protocol family 17
        XScale DSP coprocessor detected.
        VFS: Mounted root (jffs2 filesystem).
        Freeing init memory: 148K
        INIT: version 2.86 booting
        Starting the hotplug events dispatcher udevd
        Synthesizing the initial hotplug events
        Remounting root file system...
        gumstix_smc91x_init: smc91x chip found
        gumstix_smc91x_init: found 1 smc91x chip(s)
        smc91x: IOADDR d0870300 doesn't match configuration (0).
        smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>
        eth0: SMC91C11xFD (rev 1) at d0870300 IRQ 131 DMA 8 [nowait]
        eth0: Ethernet addr: 52:54:00:12:34:56
        Bluetooth: Core ver 2.11
        NET: Registered protocol family 31
        Bluetooth: HCI device and connection manager initialized
        Bluetooth: HCI socket layer initialized
        Bluetooth: L2CAP ver 2.8
        Bluetooth: L2CAP socket layer initialized
        Bluetooth: HIDP (Human Interface Emulation) ver 1.2
        usbcore: registered new interface driver usbfs
        usbcore: registered new interface driver hub
        usbcore: registered new device driver usb
        pxa27x-ohci pxa27x-ohci: PXA27x OHCI
        pxa27x-ohci pxa27x-ohci: new USB bus registered, assigned bus number 1
        pxa27x-ohci pxa27x-ohci: irq 3, io mem 0x4c000000
        pxa27x-ohci pxa27x-ohci: init err (00000000 0000)
        drivers/usb/host/ohci-pxa27x.c: can't start pxa27x
        pxa27x-ohci pxa27x-ohci: startup error -75
        pxa27x-ohci pxa27x-ohci: USB bus 1 deregistered
        pxa27x-ohci: probe of pxa27x-ohci failed with error -75
        Detected netCF-vx board: using older GPIO configuration
        CPLD responded with: 00
        Bluetooth: RFCOMM socket layer initialized
        Bluetooth: RFCOMM TTY layer initialized
        Bluetooth: RFCOMM ver 1.8
        root: mount: special device /dev/hda1 does not exist
        root: mount: special device /dev/mmcblk0p1 does not exist
        root: mount: special device /dev/sda1 does not exist
        Setting up IP spoofing protection: rp_filter.
        Configuring network interfaces... eth0: link up
        eth0      no wireless extensions.
         
        udhcpc (v1.2.1) started
        udhcpc[564]: udhcpc (v1.2.1) started
        Sending discover...
        udhcpc[564]: Sending discover...
        Sending select for 10.0.2.15...
        udhcpc[564]: Sending select for 10.0.2.15...
        Lease of 10.0.2.15 obtained, lease time 86400
        udhcpc[564]: Lease of 10.0.2.15 obtained, lease time 86400
        adding dns 10.0.2.3
        cs: pcmcia_socket0: time out after reset.
        cfio: module license 'unspecified' taints kernel.
        cs: pcmcia_socket0: time out after reset.
        Before register driver
        After register driver
        Error for wireless request "Set ESSID" (8B1A) :
            SET failed on device wlan0 ; No such device.
        Error for wireless request "Set Mode" (8B06) :
            SET failed on device wlan0 ; No such device.
        SIOCGIFFLAGS: No such device
        wlan0     No such device
         
        udhcpc (v1.2.1) started
        udhcpc[616]: udhcpc (v1.2.1) started
        SIOCGIFINDEX failed!: No such device
        udhcpc[616]: SIOCGIFINDEX failed!: No such device
        done.
        Configuring dbus-1
         System startup links for /etc/init.d/dbus-1 already exist.
        Configuring ntpdate
        update-rc.d: /etc/init.d/busybox-cron: file does not exist
         System startup links for /etc/init.d/ntpdate already exist.
        Configuring update-modules
        INIT: Entering runlevel: 5
        Starting Dropbear SSH server: dropbear.
        Starting HTTP server: boagethostbyname:: Success
        Starting system message bus: dbus.
        Starting ntpd: done
        Starting syslogd/klogd: done
        Starting 32kHz clock...Settled
        Starting Bluetooth subsystem:
        Trying baud rate 921600...
        No response after reset
        No response from BT module
        Trying baud rate 921600...
        No response after reset
        No response from BT module
        Trying baud rate 115200...
        No response after reset
        No response from BT module
        Trying baud rate 57600...
        No response after reset
        No response from BT module
        Can't initialize device: Success
        ALSA: loading sound modules...
        ASoC version 0.13.0
        AC97 SoC Audio Codec 0.6
        asoc: AC97 HiFi <-> pxa2xx-ac97 mapping ok
        pxa2xx_ac97_cold_reset: cold reset timeout (GSR=0x0)
        pxa2xx_ac97_read: read error (ac97_reg=7c GSR=0x0)
        pxa2xx_ac97_read: read error (ac97_reg=7e GSR=0x0)
        AC'97 0 access is not valid [0xffffffff], removing mixer.
        soc-audio: probe of soc-audio failed with error -5
        ALSA: Restoring mixer settings...
        /usr/sbin/alsactl: load_state:1329: No soundcards found...
        Running ntpdate to synchronize clockError : Name or service not known
        .
        Starting bonjour:
        Starting Vixie-cron.
        Starting i2c...
        tsc2003 i2c touch screen controller
        i2c: error: exhausted retries
        i2c: msg_num: 0 msg_idx: -2000 msg_ptr: 0
        i2c: ICR: 000007e0 ISR: 00000002
        i2c: log: [00000442:000007e0]
        I2C: i2c-0: PXA I2C adapter
        tsc2003 i2c touch screen controller
        i2c: error: exhausted retries
        i2c: msg_num: 0 msg_idx: -2000 msg_ptr: 0
        i2c: ICR: 000007e0 ISR: 00000002
        i2c: log: [00000442:000007e0]
        I2C: i2c-1: PXA I2C adapter
        i2c /dev entries driver
         
        OpenEmbedded Linux gumstix-custom-verdex ttyS0
         
        Angstrom 2007.9-test-20100119 gumstix-custom-verdex ttyS0
         
        gumstix-custom-verdex login: root
        Password:
         
        Welcome to gumstix!
        For information on how to customize or update this software please visit:
        http://www.gumstix.net
         
        root@gumstix-custom-verdex:~$



      Однако, если вдруг захочется пересобрать запускаемый образ и запустить его, нас будет ожидать сюрприз
      ExpandedWrap disabled
        pflash_write: Unimplemented flash cmd sequence (offset 014c0000, wcycle 0x1 cmd 0x20 value 0x70
        Gumstix Flash ROM: block erase error: (bad command sequence, status 0xffff)
        Erase at 0x01480000 failed immediately: errno -22
        Gumstix Flash ROM: Waiting for chip to be ready timed out. Status 0
        Erase at 0x01460000 failed immediately: errno -5
        ....


      Выход пока я знаю только один: запустить однажды образ из под оригинального qemu, а затем его можно запускать из под qemu-sol.
      В процессе первого запуска, образ подвергается некоторой модификации.


      Отдельно можно отметить наличие ещё qemu-gumstix-2006-07-12, но список интересуемых нас платформ слишком мал: integratorcp926 ARM Integrator/CP (ARM926EJ-S) (default), integratorcp1026 ARM Integrator/CP (ARM1026EJ-S), versatilepb ARM Versatile/PB (ARM926EJ-S), versatileab ARM Versatile/AB (ARM926EJ-S), gumstix PXA255 Gumstix.



      Приложение:
      Цитата QEMU_Supported-machines
      syborg Syborg (Symbian Virtual Platform)
      musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S)
      mainstone Mainstone II (PXA27x)
      n800 Nokia N800 tablet aka. RX-34 (OMAP2420)
      n810 Nokia N810 tablet aka. RX-44 (OMAP2420)
      cheetah Palm Tungsten|E aka. Cheetah PDA (OMAP310)
      sx1 Siemens SX1 (OMAP310) V2
      sx1-v1 Siemens SX1 (OMAP310) V1
      tosa Tosa PDA (PXA255)
      akita Akita PDA (PXA270)
      spitz Spitz PDA (PXA270)
      borzoi Borzoi PDA (PXA270)
      terrier Terrier PDA (PXA270)
      connex Gumstix Connex (PXA255)
      verdex Gumstix Verdex (PXA270)
      lm3s811evb Stellaris LM3S811EVB
      lm3s6965evb Stellaris LM3S6965EVB
      realview-eb ARM RealView Emulation Baseboard (ARM926EJ-S)
      realview-eb-mpcore ARM RealView Emulation Baseboard (ARM11MPCore)
      realview-pb-a8 ARM RealView Platform Baseboard for Cortex-A8
      realview-pbx-a9 ARM RealView Platform Baseboard Explore for Cortex-A9
      versatilepb ARM Versatile/PB (ARM926EJ-S)
      versatileab ARM Versatile/AB (ARM926EJ-S)
      integratorcp ARM Integrator/CP (ARM926EJ-S) (default)
        Кроме всего прочего, QEMU предоставляет и эмуляцию устройства вывода информации.

        Для этого, перед конфигурацией и сборкой QEMU необходимо проверить в системе наличия SDL-devel пакета.
        Если таковой уже установлен, при конфигурировании увидим:
        ExpandedWrap disabled
          SDL support       yes
        иначе, следует установить вышеобозначенный пакет.

        Процесс последующей сборки и установки остаётся без изменений.


        Остался вопрос: каким образом осуществить перенос файлов в/из эмулируемой системы?
        Один из вариантов: имитация внешнего носителя, а именно SD карты; т.е. создание его образа и подключение к обоим системам.

        После нескольких различных неудачных попыток создать файл образа SD, остановился на создании его средствами mksdcard.

        1. Создаём образ SD
        ExpandedWrap disabled
          ./mksdcard 128M sd.img

        2. Монтируем его к какой-либо точке и производим запись требуемых данных
        ExpandedWrap disabled
          mount sd.img SD -o loop

        3. Выполняем
        ExpandedWrap disabled
          umount SD

        4. Запускаем эмулятор
        ExpandedWrap disabled
          qemu-system-arm -M verdex -pflash flash -serial stdio -m 289 -sd sd.img

        5. Далее, через терминальное окно осуществляем консольные команды.
        6. Данные с образа SD будут тут: /media/mmcblk0
        Прикреплённая картинка
        Прикреплённая картинка
          также, можно перенаправить имеющиеся устройства, например, добавляем эмуляцию манипулятора "мышь":
          ExpandedWrap disabled
            qemu-system-arm -M verdex -pflash flash -serial stdio -m 289 -sd sd.img -usbdevice mouse
          и запускаем один из примеров пакета nano-X
          Прикреплённая картинка
          Прикреплённая картинка
            Цитата SVK @
            всё это дело омрачает навязчивое сообщение: Internal resource leak before ...
            Цитата SVK @
            Однако, в природе ещё существует QEMU OpenSolaris релиз.

            С выходом 0.14.0 версии qemu шаманства с двумя версиями эмулятора уходят в прошлое :)
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,1440 ]   [ 16 queries used ]   [ Generated: 29.07.21, 00:56 GMT ]