diff options
-rw-r--r-- | meta/classes/qemuboot.bbclass | 14 | ||||
-rwxr-xr-x | scripts/runqemu | 16 |
2 files changed, 26 insertions, 4 deletions
diff --git a/meta/classes/qemuboot.bbclass b/meta/classes/qemuboot.bbclass index 15a9e63f2b..54044c38da 100644 --- a/meta/classes/qemuboot.bbclass +++ b/meta/classes/qemuboot.bbclass | |||
@@ -36,6 +36,9 @@ | |||
36 | # Note, runqemu will replace @MAC@ with a predefined mac, you can set | 36 | # Note, runqemu will replace @MAC@ with a predefined mac, you can set |
37 | # a custom one, but that may cause conflicts when multiple qemus are | 37 | # a custom one, but that may cause conflicts when multiple qemus are |
38 | # running on the same host. | 38 | # running on the same host. |
39 | # Note: If more than one interface of type -device virtio-net-device gets added, | ||
40 | # QB_NETWORK_DEVICE_prepend might be used, since Qemu enumerates the eth* | ||
41 | # devices in reverse order to -device arguments. | ||
39 | # | 42 | # |
40 | # QB_TAP_OPT: netowrk option for 'tap' mode, e.g., | 43 | # QB_TAP_OPT: netowrk option for 'tap' mode, e.g., |
41 | # "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no" | 44 | # "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no" |
@@ -43,6 +46,15 @@ | |||
43 | # | 46 | # |
44 | # QB_SLIRP_OPT: network option for SLIRP mode, e.g., -netdev user,id=net0" | 47 | # QB_SLIRP_OPT: network option for SLIRP mode, e.g., -netdev user,id=net0" |
45 | # | 48 | # |
49 | # QB_CMDLINE_IP_SLIRP: If QB_NETWORK_DEVICE adds more than one network interface to qemu, usually the | ||
50 | # ip= kernel comand line argument needs to be changed accordingly. Details are documented | ||
51 | # in the kernel docuemntation https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt | ||
52 | # Example to configure only the first interface: "ip=eth0:dhcp" | ||
53 | # QB_CMDLINE_IP_TAP: This parameter is similar to the QB_CMDLINE_IP_SLIRP parameter. Since the tap interface requires | ||
54 | # static IP configuration @CLIENT@ and @GATEWAY@ place holders are replaced by the IP and the gateway | ||
55 | # address of the qemu guest by runqemu. | ||
56 | # Example: "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0::eth0" | ||
57 | # | ||
46 | # QB_ROOTFS_OPT: used as rootfs, e.g., | 58 | # QB_ROOTFS_OPT: used as rootfs, e.g., |
47 | # "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0" | 59 | # "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0" |
48 | # Note, runqemu will replace "@ROOTFS@" with the one which is used, such as core-image-minimal-qemuarm64.ext4. | 60 | # Note, runqemu will replace "@ROOTFS@" with the one which is used, such as core-image-minimal-qemuarm64.ext4. |
@@ -63,6 +75,8 @@ QB_DEFAULT_KERNEL ?= "${KERNEL_IMAGETYPE}" | |||
63 | QB_DEFAULT_FSTYPE ?= "ext4" | 75 | QB_DEFAULT_FSTYPE ?= "ext4" |
64 | QB_OPT_APPEND ?= "-show-cursor" | 76 | QB_OPT_APPEND ?= "-show-cursor" |
65 | QB_NETWORK_DEVICE ?= "-device virtio-net-pci,netdev=net0,mac=@MAC@" | 77 | QB_NETWORK_DEVICE ?= "-device virtio-net-pci,netdev=net0,mac=@MAC@" |
78 | QB_CMDLINE_IP_SLIRP ?= "ip=dhcp" | ||
79 | QB_CMDLINE_IP_TAP ?= "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0" | ||
66 | 80 | ||
67 | # This should be kept align with ROOT_VM | 81 | # This should be kept align with ROOT_VM |
68 | QB_DRIVE_TYPE ?= "/dev/sd" | 82 | QB_DRIVE_TYPE ?= "/dev/sd" |
diff --git a/scripts/runqemu b/scripts/runqemu index dd0aa4b28f..6f24093d77 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
@@ -185,6 +185,8 @@ class BaseConfig(object): | |||
185 | self.vmtypes = ('hddimg', 'iso') | 185 | self.vmtypes = ('hddimg', 'iso') |
186 | self.fsinfo = {} | 186 | self.fsinfo = {} |
187 | self.network_device = "-device e1000,netdev=net0,mac=@MAC@" | 187 | self.network_device = "-device e1000,netdev=net0,mac=@MAC@" |
188 | self.cmdline_ip_slirp = "ip=dhcp" | ||
189 | self.cmdline_ip_tap = "ip=192.168.7.@CLIENT@::192.168.7.@GATEWAY@:255.255.255.0" | ||
188 | # Use different mac section for tap and slirp to avoid | 190 | # Use different mac section for tap and slirp to avoid |
189 | # conflicts, e.g., when one is running with tap, the other is | 191 | # conflicts, e.g., when one is running with tap, the other is |
190 | # running with slirp. | 192 | # running with slirp. |
@@ -1032,7 +1034,9 @@ class BaseConfig(object): | |||
1032 | 1034 | ||
1033 | if self.fstype == 'nfs': | 1035 | if self.fstype == 'nfs': |
1034 | self.setup_nfs() | 1036 | self.setup_nfs() |
1035 | self.kernel_cmdline_script += ' ip=dhcp' | 1037 | netconf = " " + self.cmdline_ip_slirp |
1038 | logger.info("Network configuration:%s", netconf) | ||
1039 | self.kernel_cmdline_script += netconf | ||
1036 | # Port mapping | 1040 | # Port mapping |
1037 | hostfwd = ",hostfwd=tcp::2222-:22,hostfwd=tcp::2323-:23" | 1041 | hostfwd = ",hostfwd=tcp::2222-:22,hostfwd=tcp::2323-:23" |
1038 | qb_slirp_opt_default = "-netdev user,id=net0%s,tftp=%s" % (hostfwd, self.get('DEPLOY_DIR_IMAGE')) | 1042 | qb_slirp_opt_default = "-netdev user,id=net0%s,tftp=%s" % (hostfwd, self.get('DEPLOY_DIR_IMAGE')) |
@@ -1147,9 +1151,11 @@ class BaseConfig(object): | |||
1147 | client = gateway + 1 | 1151 | client = gateway + 1 |
1148 | if self.fstype == 'nfs': | 1152 | if self.fstype == 'nfs': |
1149 | self.setup_nfs() | 1153 | self.setup_nfs() |
1150 | netconf = "192.168.7.%s::192.168.7.%s:255.255.255.0" % (client, gateway) | 1154 | netconf = " " + self.cmdline_ip_tap |
1151 | logger.info("Network configuration: %s", netconf) | 1155 | netconf = netconf.replace('@CLIENT@', str(client)) |
1152 | self.kernel_cmdline_script += " ip=%s" % netconf | 1156 | netconf = netconf.replace('@GATEWAY@', str(gateway)) |
1157 | logger.info("Network configuration:%s", netconf) | ||
1158 | self.kernel_cmdline_script += netconf | ||
1153 | mac = "%s%02x" % (self.mac_tap, client) | 1159 | mac = "%s%02x" % (self.mac_tap, client) |
1154 | qb_tap_opt = self.get('QB_TAP_OPT') | 1160 | qb_tap_opt = self.get('QB_TAP_OPT') |
1155 | if qb_tap_opt: | 1161 | if qb_tap_opt: |
@@ -1171,8 +1177,10 @@ class BaseConfig(object): | |||
1171 | if self.net_bridge: | 1177 | if self.net_bridge: |
1172 | self.setup_net_bridge() | 1178 | self.setup_net_bridge() |
1173 | elif self.slirp_enabled: | 1179 | elif self.slirp_enabled: |
1180 | self.cmdline_ip_slirp = self.get('QB_CMDLINE_IP_SLIRP') or self.cmdline_ip_slirp | ||
1174 | self.setup_slirp() | 1181 | self.setup_slirp() |
1175 | else: | 1182 | else: |
1183 | self.cmdline_ip_tap = self.get('QB_CMDLINE_IP_TAP') or self.cmdline_ip_tap | ||
1176 | self.setup_tap() | 1184 | self.setup_tap() |
1177 | 1185 | ||
1178 | def setup_rootfs(self): | 1186 | def setup_rootfs(self): |