Changeset 877


Ignore:
Timestamp:
Dec 18, 2016, 11:08:06 PM (3 years ago)
Author:
amain
Message:

qemu: add several convenience make targets to manage multiple qemu sessions

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/qemu/qemu.mk

    r872 r877  
    1616# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1717
    18 # use make qrun QROOTFS=<sid|stretch|jessie|wheezy>
    19 QROOTFS ?= jessie
     18# use make qrun _QROOTFS=<sid|stretch|jessie|wheezy>
     19
     20ifeq ($(QSESSION),)
     21_QSESSION := $(shell cat $(TMP_DIR)/qemu/session             2>/dev/null)
     22else
     23_QSESSION := $(QSESSION)
     24endif
     25_QROOTFS  := $(shell cat $(TMP_DIR)/qemu/$(_QSESSION)/rootfs 2>/dev/null)
     26_QENDIAN  := $(shell cat $(TMP_DIR)/qemu/$(_QSESSION)/endian 2>/dev/null)
     27_QARCH    := $(if $(filter le,$(_QENDIAN)),mipsel,mips)
    2028
    2129/usr/bin/pv:
     
    2836        sudo apt-get install qemu-system-mips
    2937
    30 qemu/prepare: | $(TMP_DIR)/qemu/$(QROOTFS)/hda.img $(TMP_DIR)/qemu/$(QROOTFS)/vmlinux.elf
     38/usr/bin/qemu-system-mipsel:
     39        sudo apt-get install qemu-system-mipsel
    3140
    32 $(TMP_DIR)/qemu/$(QROOTFS)/vmlinux.elf:
    33         wget -O $(TMP_DIR)/qemu/$(QROOTFS)/vmlinux.elf "http://downloads.debwrt.net/firmware/snapshots/mips/malta/be/debwrt-firmware-malta-be-vmlinux.elf?direct=1"
     41qemu/add qadd:
     42        @if [ "$(QROOTFS)" = "" -a "$(QENDIAN)" = "" -a "$(QSESSION)" = "" ]; \
     43        then \
     44            echo "usage: make qemu/add QSESSION=<name> [QENDIAN=be|le] [QROOTFS=<drelease>|current]"; \
     45            echo ""; \
     46            echo "name    : session name"; \
     47            echo "be      : big endian Malta (default)"; \
     48            echo "le      : little endian Malta"; \
     49            echo "current : use rootfs from build/ dir"; \
     50            echo "drelease: download/use latest <drelease> snapshot rootfs"; \
     51            echo "          (sid|stretch|jessie(default)|wheezy)"; \
     52            echo ""; \
     53            echo "Example: 1. make qemu/set QSESSION=test1 QENDIAN=be QROOTFS=jessie"; \
     54            echo "         2. make qemu/prepare (optional)"; \
     55            echo "         3. make qrun"; \
     56            echo; \
     57            echo "Add a new qemu session. When running qemu/prepare:"; \
     58            echo; \
     59            echo "* latest snapshot Malta DebWrt kernel is downloaded"; \
     60            echo "* latest snapshot Malta DebWrt <drelease> rootfs is downloaded"; \
     61            echo "  (or current built rootfs is used)"; \
     62            echo; \
     63            exit 1; \
     64        fi
     65        @mkdir -p $(TMP_DIR)/qemu/$(QSESSION)
     66        @echo $(QSESSION) >$(TMP_DIR)/qemu/session
     67        @QENDIAN=$${QENDIAN:-be}    ; echo $${QENDIAN} >$(TMP_DIR)/qemu/$(QSESSION)/endian
     68        @QROOTFS=$${QROOTFS:-jessie}; echo $${QROOTFS} >$(TMP_DIR)/qemu/$(QSESSION)/rootfs
    3469
    35 $(TMP_DIR)/qemu/$(QROOTFS)/image.bz2:
    36         mkdir -p $(TMP_DIR)/qemu/$(QROOTFS)
    37         wget -O $(TMP_DIR)/qemu/$(QROOTFS)/image.bz2 "http://downloads.debwrt.net/rootfs/snapshots/mips/jessie/debwrt-rootfs-jessie-mips-trunk.tar.bz2?direct=1"
     70qemu/set qset:
     71        @if [ "$(QSESSION)" = "" ]; \
     72        then \
     73            echo "usage: make qemu/set QSESSION=<name>"; \
     74            exit 1; \
     75        elif [ ! -d $(TMP_DIR)/qemu/$(QSESSION) ]; \
     76        then \
     77            echo "Session does not exist: $(QSESSION)"; \
     78            exit 1; \
     79        fi
     80        @echo $(QSESSION) >$(TMP_DIR)/qemu/session
    3881
    39 $(TMP_DIR)/qemu/$(QROOTFS)/hda.img: | $(TMP_DIR)/qemu/$(QROOTFS)/image.bz2 /usr/bin/pv /sbin/kpartx
    40         mkdir -p $(TMP_DIR)/qemu/$(QROOTFS)/mnt
    41         qemu-img create $(TMP_DIR)/qemu/$(QROOTFS)/_hda.img 10G
    42         /sbin/sfdisk $(TMP_DIR)/qemu/$(QROOTFS)/_hda.img <qemu/hda.sfdisk
    43         @sudo /sbin/kpartx -asv $(TMP_DIR)/qemu/$(QROOTFS)/_hda.img \
     82qemu/remove qrm:
     83        @if [ "$(QSESSION)" = "" ]; \
     84        then \
     85            echo "usage: make qemu/remove QSESSION=<name>"; \
     86            exit 1; \
     87        elif [ ! -d $(TMP_DIR)/qemu/$(QSESSION) ]; \
     88        then \
     89            echo "Session does not exist: $(QSESSION)"; \
     90            exit 1; \
     91        fi
     92        sudo rm -rf $(TMP_DIR)/qemu/$(QSESSION)
     93
     94qemu/list qls:
     95        @echo "List of sessions:"
     96        @find $(TMP_DIR)/qemu \
     97              -mindepth 1 \
     98              -maxdepth 1 \
     99              -type d \
     100              -printf "%f\n" 2>/dev/null \
     101           | sort \
     102           | while read dir; \
     103             do \
     104                 if [ "$(_QSESSION)" = "$${dir}" ]; \
     105                 then \
     106                     sel="(selected)"; \
     107                 else \
     108                     sel=""; \
     109                 fi; \
     110                 if [ -f "$(TMP_DIR)/qemu/$${dir}/prepared" ]; \
     111                 then \
     112                     prep="yes"; \
     113                 else \
     114                     prep="no"; \
     115                 fi; \
     116                 fs=$$(cat $(TMP_DIR)/qemu/$${dir}/rootfs); \
     117                 en=$$(cat $(TMP_DIR)/qemu/$${dir}/endian); \
     118                 echo "* $${dir} Malta($${en})@$${fs} [prepped=$${prep}] $${sel}"; \
     119             done
     120
     121qemu/prepare qprep: | $(TMP_DIR)/qemu/$(_QSESSION)/hda.img $(TMP_DIR)/qemu/$(_QSESSION)/vmlinux.elf
     122        @touch $(TMP_DIR)/qemu/$(_QSESSION)/prepared
     123
     124$(TMP_DIR)/qemu/$(_QSESSION)/vmlinux.elf:
     125        wget -qO $(TMP_DIR)/qemu/$(_QSESSION)/vmlinux.elf "http://downloads.debwrt.net/firmware/snapshots/$(_QARCH)/malta/$(_QENDIAN)/debwrt-firmware-malta-$(_QENDIAN)-vmlinux.elf?direct=1"
     126
     127$(TMP_DIR)/qemu/$(_QSESSION)/image.bz2:
     128        mkdir -p $(TMP_DIR)/qemu/$(_QSESSION)
     129        wget -qO $(TMP_DIR)/qemu/$(_QSESSION)/image.bz2 "http://downloads.debwrt.net/rootfs/snapshots/$(_QARCH)/jessie/debwrt-rootfs-$(_QROOTFS)-$(_QARCH)-trunk.tar.bz2?direct=1"
     130
     131$(TMP_DIR)/qemu/$(_QSESSION)/hda.img: | $(TMP_DIR)/qemu/$(_QSESSION)/image.bz2 /usr/bin/pv /sbin/kpartx
     132        mkdir -p $(TMP_DIR)/qemu/$(_QSESSION)/mnt
     133        qemu-img create $(TMP_DIR)/qemu/$(_QSESSION)/_hda.img 10G
     134        /sbin/sfdisk $(TMP_DIR)/qemu/$(_QSESSION)/_hda.img <qemu/hda.sfdisk
     135        @sudo /sbin/kpartx -asv $(TMP_DIR)/qemu/$(_QSESSION)/_hda.img \
    44136          | while read line; \
    45137            do \
     
    49141                then \
    50142                    sudo mkfs.ext4 /dev/mapper/$${part}; \
    51                     sudo mount /dev/mapper/$${part} $(TMP_DIR)/qemu/$(QROOTFS)/mnt; \
    52                     echo "Extracting DebWrt $(QROOTFS)...."; \
    53                     pv $(TMP_DIR)/qemu/$(QROOTFS)/image.bz2 \
     143                    sudo mount /dev/mapper/$${part} $(TMP_DIR)/qemu/$(_QSESSION)/mnt; \
     144                    echo "Extracting DebWrt $(_QROOTFS)...."; \
     145                    pv $(TMP_DIR)/qemu/$(_QSESSION)/image.bz2 \
    54146                     | sudo tar xjf - \
    55                                 -C $(TMP_DIR)/qemu/$(QROOTFS)/mnt; \
     147                                -C $(TMP_DIR)/qemu/$(_QSESSION)/mnt; \
    56148                    sudo cp qemu/interfaces \
    57                             $(TMP_DIR)/qemu/$(QROOTFS)/mnt/etc/network/interfaces; \
     149                            $(TMP_DIR)/qemu/$(_QSESSION)/mnt/etc/network/interfaces; \
    58150                    sync; \
    59                     sudo umount -f $(TMP_DIR)/qemu/$(QROOTFS)/mnt || true; \
     151                    sudo umount -f $(TMP_DIR)/qemu/$(_QSESSION)/mnt || true; \
    60152                    n=1; \
    61153                else \
     
    65157            err=$$?; \
    66158            sync; \
    67             sudo /sbin/kpartx -sd $(TMP_DIR)/qemu/$(QROOTFS)/_hda.img; \
     159            sudo /sbin/kpartx -sd $(TMP_DIR)/qemu/$(_QSESSION)/_hda.img; \
    68160            exit $${err}
    69         mv $(TMP_DIR)/qemu/$(QROOTFS)/_hda.img $(TMP_DIR)/qemu/$(QROOTFS)/hda.img
     161        mv $(TMP_DIR)/qemu/$(_QSESSION)/_hda.img $(TMP_DIR)/qemu/$(_QSESSION)/hda.img
    70162
    71 qrun: | qemu/prepare
    72         qemu-system-mips -M malta \
    73                          -kernel $(TMP_DIR)/qemu/$(QROOTFS)/vmlinux.elf \
    74                          -hda $(TMP_DIR)/qemu/$(QROOTFS)/hda.img \
    75                          -append "root=/dev/sda1 console=ttyS0" \
    76                          -nographic \
    77                          -netdev user,id=n0,net=192.168.1.0/24 \
    78                          -device e1000,netdev=n0
     163qemu/run qrun: | qemu/prepare
     164        if [ ! -d $(TMP_DIR)/qemu/$(QSESSION) ]; \
     165            echo "Session does not exist: $(QSESSION)"; \
     166            exit 1; \
     167        fi
     168        qemu-system-$(_QARCH) \
     169           -M malta \
     170           -kernel $(TMP_DIR)/qemu/$(_QSESSION)/vmlinux.elf \
     171           -hda $(TMP_DIR)/qemu/$(_QSESSION)/hda.img \
     172           -append "root=/dev/sda1 console=ttyS0" \
     173           -nographic \
     174           -netdev user,id=n0,net=192.168.1.0/24 \
     175           -device e1000,netdev=n0
    79176
    80177
  • trunk/rules/help.txt

    r874 r877  
    8383plugins/clean                    : Cleans the plugin area, removes plugin patches to DebWrt (leaves plugin patches to OpenWrt in place, use openwrt/clean)
    8484
    85 qemu/prepare                     : Automatic download of debwrt rootfs and kernel
    86 qrun                             : Run DebWrt in qemu emulator (will automaticall run qemu/prepare if needed)
    87 
     85qemu/prepare                     : Automatic download of selected debwrt rootfs and kernel
     86qemu/add QSESSION=<ses> ...      : Add a qemu session (see qemu/add for more help)
     87qemu/remove QSESSION=<ses> ...   : Remove a qemu session
     88qemu/list                        : List qemu sessions
     89qemu/set QSESSION=<ses>          : Set new default session
     90qemu/run [QSESSION=<ses>]        : Run DebWrt in qemu emulator (will automaticall run qemu/prepare if needed)
     91qadd                             : Shortcut for qemu/add
     92qrm                              : Shortcut for qemu/remove
     93qprep                            : Shortcut for qemu/prepare
     94qls                              : Shortcut for qemu/list
     95qrun                             : Shortcut for qemu/run
    8896
    8997Links:
Note: See TracChangeset for help on using the changeset viewer.