diff options
| author | Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com> | 2018-11-28 22:44:38 -0800 |
|---|---|---|
| committer | Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com> | 2019-06-28 14:58:31 -0700 |
| commit | 725f0b0ffb49ba8f07f6ca5a6bcc36c83eb4162c (patch) | |
| tree | 3d6c89d9d1e9bf78a8636c5000b48941d98fa53a | |
| parent | 22d9e2a8e00a029be125178ddddd1bbf653eb002 (diff) | |
| download | meta-xilinx-725f0b0ffb49ba8f07f6ca5a6bcc36c83eb4162c.tar.gz | |
qemu-system-aarch64-multiarch: Enable plm argument in runqemu
Adding plm args to enable plm in runqemu for Versal devices
The PLM (Platform Loader/Manager) is responsible for:
• System Initialization
• Boot and Configuration of various devices in system
• Secure boot
• Platform Management
• Error Management
• Partial Reconfiguration
• Subsystem restart
• Health monitoring
With the addition of plm args in the machine configurations (and
appending -multiarch to QB_SYSTEM_NAME), runqemu will support multiarch
emulation and will spin up one instance for the APU and one instance
for the PLM.
Signed-off-by: Jaewon Lee <jaewon.lee@xilinx.com>
Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com>
| -rw-r--r-- | meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch b/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch index 2c92c686..ba0e2743 100644 --- a/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch +++ b/meta-xilinx-bsp/recipes-devtools/qemu/files/qemu-system-aarch64-multiarch | |||
| @@ -13,15 +13,27 @@ mach_path = tempfile.mkdtemp() | |||
| 13 | 13 | ||
| 14 | # Separate PMU and APU arguments | 14 | # Separate PMU and APU arguments |
| 15 | APU_args = sys.argv[1:] | 15 | APU_args = sys.argv[1:] |
| 16 | PMU_args = APU_args[APU_args.index('-pmu-args')+1] | 16 | mbtype='' |
| 17 | APU_args.remove('-pmu-args') | ||
| 18 | APU_args.remove(PMU_args) | ||
| 19 | PMU_args = PMU_args.split() | ||
| 20 | 17 | ||
| 21 | PMU_rom = PMU_args[PMU_args.index('-kernel')+1] | 18 | if '-pmu-args' in APU_args: |
| 22 | error_msg = None | 19 | MB_args = APU_args[APU_args.index('-pmu-args')+1] |
| 20 | APU_args.remove('-pmu-args') | ||
| 21 | APU_args.remove(MB_args) | ||
| 22 | MB_args = MB_args.split() | ||
| 23 | PMU_rom = MB_args[MB_args.index('-kernel')+1] | ||
| 24 | mbtype='PMU' | ||
| 25 | elif '-plm-args' in APU_args: | ||
| 26 | MB_args = APU_args[APU_args.index('-plm-args')+1] | ||
| 27 | APU_args.remove('-plm-args') | ||
| 28 | APU_args.remove(MB_args) | ||
| 29 | MB_args = MB_args.split() | ||
| 30 | mbtype='PLM' | ||
| 31 | else: | ||
| 32 | error_msg = '\nMultiarch not setup properly.' | ||
| 33 | sys.exit(error_msg) | ||
| 23 | 34 | ||
| 24 | if os.path.exists(PMU_rom): | 35 | error_msg = None |
| 36 | if (mbtype == 'PMU' and os.path.exists(PMU_rom)) or mbtype == 'PLM': | ||
| 25 | 37 | ||
| 26 | # We need to switch tcp serial arguments (if they exist, e.g. qemurunner) to get the output correctly | 38 | # We need to switch tcp serial arguments (if they exist, e.g. qemurunner) to get the output correctly |
| 27 | tcp_serial_ports = [i for i, s in enumerate(APU_args) if 'tcp:127.0.0.1:' in s] | 39 | tcp_serial_ports = [i for i, s in enumerate(APU_args) if 'tcp:127.0.0.1:' in s] |
| @@ -30,16 +42,16 @@ if os.path.exists(PMU_rom): | |||
| 30 | if len(tcp_serial_ports) == 2: | 42 | if len(tcp_serial_ports) == 2: |
| 31 | APU_args[tcp_serial_ports[0]],APU_args[tcp_serial_ports[1]] = APU_args[tcp_serial_ports[1]],APU_args[tcp_serial_ports[0]] | 43 | APU_args[tcp_serial_ports[0]],APU_args[tcp_serial_ports[1]] = APU_args[tcp_serial_ports[1]],APU_args[tcp_serial_ports[0]] |
| 32 | 44 | ||
| 33 | pmu_cmd = binpath + '/qemu-system-microblazeel ' + ' '.join(PMU_args) + ' -machine-path ' + mach_path | 45 | mb_cmd = binpath + '/qemu-system-microblazeel ' + ' '.join(MB_args) + ' -machine-path ' + mach_path |
| 34 | apu_cmd = binpath + '/qemu-system-aarch64 ' + ' '.join(APU_args) + ' -machine-path ' + mach_path | 46 | apu_cmd = binpath + '/qemu-system-aarch64 ' + ' '.join(APU_args) + ' -machine-path ' + mach_path |
| 35 | 47 | ||
| 36 | # Debug prints | 48 | # Debug prints |
| 37 | print('\nPMU instance cmd: %s\n' % pmu_cmd) | 49 | print('\n%s instance cmd: %s\n' % (mbtype, mb_cmd)) |
| 38 | print('APU instance cmd: %s\n' % apu_cmd) | 50 | print('APU instance cmd: %s\n' % apu_cmd) |
| 39 | 51 | ||
| 40 | 52 | ||
| 41 | # Invoke QEMU pmu instance | 53 | # Invoke QEMU pmu instance |
| 42 | process_pmu = subprocess.Popen(pmu_cmd, shell=True, stderr=subprocess.PIPE) | 54 | process_pmu = subprocess.Popen(mb_cmd, shell=True, stderr=subprocess.PIPE) |
| 43 | 55 | ||
| 44 | # Invoke QEMU APU instance | 56 | # Invoke QEMU APU instance |
| 45 | process_apu = subprocess.Popen(apu_cmd, shell=True, stderr=subprocess.PIPE) | 57 | process_apu = subprocess.Popen(apu_cmd, shell=True, stderr=subprocess.PIPE) |
| @@ -47,8 +59,9 @@ if os.path.exists(PMU_rom): | |||
| 47 | error_msg = '\nQEMU APU instance failed:\n%s' % process_apu.stderr.read().decode() | 59 | error_msg = '\nQEMU APU instance failed:\n%s' % process_apu.stderr.read().decode() |
| 48 | 60 | ||
| 49 | else: | 61 | else: |
| 50 | error_msg = '\nError: Missing PMU ROM: %s' % PMU_rom | 62 | if mbtype == 'PMU': |
| 51 | error_msg += '\nSee "meta-xilinx/README.qemu.md" for more information on accquiring the PMU ROM.\n' | 63 | error_msg = '\nError: Missing PMU ROM: %s' % PMU_rom |
| 64 | error_msg += '\nSee "meta-xilinx/README.qemu.md" for more information on accquiring the PMU ROM.\n' | ||
| 52 | 65 | ||
| 53 | shutil.rmtree(mach_path) | 66 | shutil.rmtree(mach_path) |
| 54 | sys.exit(error_msg) | 67 | sys.exit(error_msg) |
