Xilinx / qemu

Xilinx's fork of Quick EMUlator (QEMU) with improved support and modelling for the Xilinx platforms.

Home Page:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821395464/QEMU+User+Documentation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Booting qnx os with qemu

asifsid-32 opened this issue · comments

Hello,

I am trying to boot QNX OS on top of qemu using QNX IFS (aarch64).

Following command is being used -

qemu-system-aarch64 -machine xlnx-zcu102 -m 1G -kernel IFS.bin -drive file=filesystem.qcow2,if=none,id=drv0 -nographic -serial mon:stdio

Using this it gives a shutdown error and the kernel does not load.

Can someone help how we can boot the QNX kernel on top of qemu with xilinx machine ?

Thanks

Hi,

A couple of questions:

What do you have in the IFS.bin binary? Is there only the QNX OS expected to run at EL1? Or is there SW that expects to run at EL3? The command-line will depend on that.

Are you able to run this on real HW? Are you in that case running it together with ARM Trusted Firmware and the PMU FW from Xilinx? or are you using something else?

Best regards,
Edgar

Hii @edgarigl

Thanks for the comment.
We were able to boot the QNX OS on QEMU with xilinx machine using the following command -

./qemu-system-aarch64 -M xlnx-zcu102 -m 8G -serial mon:stdio -display none -device loader,file=QNX-IFS.bin,cpu-num=0 -global xlnx,zynqmp-boot.cpu-num=0 -global xlnx,zynqmp-boot.use-pmufw=true

Regards
Asif

Hi!

I suggest that you don't use the xlnx-zcu102 machine but our more complete device-tree based machine, those are a lot more complete.
You're going to need to build the device-trees from here:
https://github.com/Xilinx/qemu-devicetrees

There's more information here:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821395464/QEMU+User+Documentation

To run something like a binary from EL3, here's an example command-line:
qemu-system-aarch64 -M arm-generic-fdt -serial stdio -display none -m 2G -hw-dtb dts/LATEST/SINGLE_ARCH/zcu102-arm.dtb -device loader,file=QNX-IFS.bin,cpu-num=0 -device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4

If you need to run with ATF and perhaps the PMU FW, I can provide other examples but it would be good to get more details about your QNX-IFS.bin, i.e what address does it expect to start from? address 0? What EL level?

Best regards,
Edgar

Hii @edgarigl

Thanks for the inputs.
We are trying to configure/generate IPI interrupts for which we have created a separate issue (Link-). Here we are trying to run everything in the same core.

Can you please suggest something on how we can configure the interrupt ?

Regards
Asif

The interrupt you mentioned is not yet connected in the xlnx-zcu102 model, we'll have to fix that in upstream. In the meantime you'll need to use the device-tree machines.

The interrupt you mentioned is not yet connected in the xlnx-zcu102 model, we'll have to fix that in upstream. In the meantime you'll need to use the device-tree machines.

Hii @edgarigl

Thanks for the reply !

  1. Can you please help us with the steps and qemu command we need to follow for using device-tree machines for configuring interrupts ?

  2. IPI interrupts can be configured/generated using device-tree machines ? If yes, how can we do IPI interrupts or any other interrupts ?

  3. When can we expect the IPI in upstream ?

  4. On actual hardware also IPI is not working. Any possible reasons for this ?

Regards
Asif

Hi!

I suggest that you don't use the xlnx-zcu102 machine but our more complete device-tree based machine, those are a lot more complete.
You're going to need to build the device-trees from here:
https://github.com/Xilinx/qemu-devicetrees

There's more information here:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821395464/QEMU+User+Documentation

To run something like a binary from EL3, here's an example command-line:
qemu-system-aarch64 -M arm-generic-fdt -serial stdio -display none -m 2G -hw-dtb dts/LATEST/SINGLE_ARCH/zcu102-arm.dtb -device loader,file=QNX-IFS.bin,cpu-num=0 -device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4

If you need to run with ATF and perhaps the PMU FW, I can provide other examples but it would be good to get more details about your QNX-IFS.bin, i.e what address does it expect to start from? address 0? What EL level?

Best regards,
Edgar

Hello Edgar,

Please find attached the minimal-build file used for generating the QNX-IFS. Address related info can be checked in build file.
EL level i am not sure as i am new to this.

I tried the command suggested by you -

qemu-system-aarch64 -M arm-generic-fdt -serial stdio -display none -m 2G -hw-dtb dts/LATEST/SINGLE_ARCH/zcu102-arm.dtb -device loader,file=QNX-IFS.bin,cpu-num=0 -device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4

but it is not booting the kernel and just hangs after executing. Any other suggestions for interrupts configuration ?
minimal-build.txt

Thanks
Asif

Hi,

Can you try adding -machine linux=yes, e.g:

qemu-system-aarch64 -M arm-generic-fdt -serial stdio -display none -m 2G -hw-dtb dts/LATEST/SINGLE_ARCH/zcu102-arm.dtb -device loader,file=QNX-IFS.bin,cpu-num=0 -device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4 -machine linux=yes

Best regards,
Edgar

Hii @edgarigl

I tried the above command with -machine linux=yes, but it is not booting the kernel and just hangs after executing. Any other suggestions for interrupts configuration ?

Regards
Asif

@asifsid-32 have you had any luck with this?

Hi @edgarigl @asifsid-32,

I have tried to boot the qnx os aarch64 using
qemu-system-aarch64 -M xlnx-zcu102 -m 8G -serial mon:stdio -display none -device loader,file=QNX-IFS.bin,cpu-num=0 -global xlnx,zynqmp-boot.cpu-num=0 -global xlnx,zynqmp-boot.use-pmufw=true

Here is the output of the above command:
~/qnx710/output$ qemu-system-aarch64 -M xlnx-zcu102 -m 8G -serial mon:stdio -display none -device loader,file=QNX-IFS.bin,cpu-num=0 -global xlnx,zynqmp-boot.cpu-num=0 -global xlnx,zynqmp-boot.use-pmufw=true
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
qemu-system-aarch64: warning: global xlnx,zynqmp-boot.cpu-num has invalid class name
qemu-system-aarch64: warning: global xlnx,zynqmp-boot.use-pmufw has invalid class name
QEMU: Terminated

I think, the qemu is up but its unable to boot the OS. The QNX-IFS.bin file is only qnx image file. Am I missing something to pass like the binary file boot.bin or should i include the boot.bin in the QNX-IFS.bin? Any leads would be helpful.

Hi @asifsid-32, how did you generate the QNX_IFS.bin, did you get it from zcu102 bsp or does it also has the boot.bin and IFS together in the same file.
I have issues booting the OS. Any help would be appreciated!

Thank you!