QNX Image does not boot with UEFI which has no "Legacy Boot"

Hi,
~/qnx-ide-7.1-workspace/x86-64-generic/images/x86_64-uefi.build
I have tried same standard uefi image on an old x86 platform and a new platform.

old platform: BIOS supports “Legacy Boot”, I suppose that is CRM feature.
The QNX Image boots fine, I can telnet, launch gles2_gears(after enabling graphics) etc.

New Platform: UEFI does not have “Legacy Boot”. and the boot process just hangs somewhere. I can’t ping it and no gles2_gears/screen is launched.

Can you please support to fix it?

Another question: I am using standard Intel-NUCs for this, How to enable debug logs on them? On display, I see no logs coming.

https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/s/startup-uefi.html

Looks like you just replace the startup-x86 in your boot file with startup-uefi. There are options for logging to the console with this command to help you figure out what’s going on.

Tim

Hi Tim,
Thanks for suggestion. I tried as below snapshot: -

But it had zero impact on behavior. There came no command line and screen is stuck on same message -

Also tried other commands startup-uefi -Nnode120 -vvvv -Dconsole and variants but connected display is always blank and target is stuck during boot time (I can confirm because ping does not work in these UEFI builds)…
FYI: I don’t have serial port on current platform so I am stuck with blank screen right now…

Looking at the first screenshot, why are you loading the image at 0x140000? Is that were you were loading it on the other machine that worked?

I’m curious what your build file looked like on the system that works compared to this one. Can you post both build files. I’m wondering if the issue is addressing.

Tim

Hi Tim,
I got a debug board where I have Serial output. So now I know that RTOS is actually booting but the problems are in Display and in Network. That is why I could not see gles2_gears launching and no ping on network port. So I guessed that RTOS might have crashed. But now I have better idea.

Network Port issue:
In build scripts there is a list of supported PCI devices. As below -
image

But on my new board, the Network Controller device was not in that list.

and even if I add it (in script as highlighted above), the E1000 Driver fails to UP the wm0 interface.

image

ifconfig also does not show wm0 interface.

image

So, what is right way to add new pci device in QNX RTOS?

Display issue:
When I launch graphics image, gles2_gears fails to launch below is error:

Unable to access /dev/screen
Running gles2-gears ...
libkhronos: Exiting: Failed to open configuration file.

This could be because right now HDMI port is not functional on board.

There is nothing to do to add a PCI device as they are automatically detected at startup. Of course, the PCI server has to be running : pci-server --config=/your_path/pci_server.cfg &

You have to tell the network manager which driver to use. For the E1000 driver, something like this : io-pkt-v6-hc -ptcpip -de1000 mac=$mac_addr

/dev/screen is created by Screen application. Is it started on your device ?
If yes, does it load correctly ? You can check with slog2info (sloginfo on older QNX versions).
Configuring Screen can be quite complicated.

Hi,
Even after I mention driver name and mac address the interface is not detected.
I am more concerned about Network interface not being detected.
How can I debug this further?

You want pci-tool

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/p/pci-tool.html

You need to make sure that pci-tool is included in your boot image so you’ll have to modify your build script for the boot image if it’s not there by default (it’s likely not).

Tim

Hi Tim,
The pci-tool is actually there, else with below logic I would not see ethernet interface being timeout.
FYI: I added the highlighted line because this is “1a1e” device was not listed and logic was not going in then.. block. After adding 1a1e device, I was able to see that if_up is failing after 10 attempts.
That means just adding 1a1e device was not good enough, and we need to do somethign more to enable the new device type. (at least thats what I concluded)

Can you post a screen shot of the output of pci-tool -V. Right now it’s getting cut up to make a list. We need to see the entire output so we can see exactly which Intel NIC card is in this machine. It may be one that needs a different driver

https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.utilities/topic/utils-d.html

There are 3 Intel NIC drivers.

Tim

The E1000 driver might need some additional configuration : http://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/d/devnp-e1000.so.html

Also, look at slog2info output to get details about the E1000 driver startup.

Hi,
The slog output is as follows:

I checked the presence of so file, its there.

# find . -name devnp-e1000.so
./proc/boot/devnp-e1000.so

So only doubt remains is that the eth-device e1000 is not present on my platform… or device type not recognized… At the same time I can recognize pci device “8086/1a1e” on Linux. So Device is actually present on platform.

can you make any conclusion?

Some more trials from command prompt:

What I understand from the messages is that the device is not found (not the driver library).

Can you provide the output of pci-tool -vas Tim requested ?

The 2nd last device is 8086/1a1e which is network controller

# pci-
pci-server   pci-tool     
# pci-tool -vas

B000:D00:F00 @ idx 0
        vid/did: 8086/a706
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/00/00
                Host-to-PCI Bridge Device

B000:D02:F00 @ idx 1
        vid/did: 8086/a7a0
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 03/00/00
                PC Compatible VGA Display Controller

B000:D05:F00 @ idx 2
        vid/did: 8086/a75d
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 04/80/00
                Other Multi-media Device

B000:D06:F00 @ idx 3
        vid/did: 8086/a74d
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/04/00
                PCI-to-PCI Bridge Device

B000:D07:F00 @ idx 4
        vid/did: 8086/a76e
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/04/00
                PCI-to-PCI Bridge Device

B000:D07:F01 @ idx 5
        vid/did: 8086/a73f
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/04/00
                PCI-to-PCI Bridge Device

B000:D07:F02 @ idx 6
        vid/did: 8086/a72f
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/04/00
                PCI-to-PCI Bridge Device

B000:D07:F03 @ idx 7
        vid/did: 8086/a71f
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/04/00
                PCI-to-PCI Bridge Device

B000:D08:F00 @ idx 8
        vid/did: 8086/a74f
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 08/80/00
                Other Base Systems Peripheral

B000:D10:F00 @ idx 9
        vid/did: 8086/a77d
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 11/80/00
                Other DA/DSP Controller

B000:D13:F00 @ idx 10
        vid/did: 8086/a71e
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/03/30
                USB Serial Bus Controller (Intel eXtensible HCI)

B000:D13:F02 @ idx 11
        vid/did: 8086/a73e
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/03/40
                USB Serial Bus Controller (Intel eXtensible HCI)

B000:D13:F03 @ idx 12
        vid/did: 8086/a76d
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/03/40
                USB Serial Bus Controller (Intel eXtensible HCI)

B000:D18:F00 @ idx 13
        vid/did: 8086/51fc
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 07/00/00
                Generic XT Compatible Simple Communications Controller (UART)

B000:D20:F00 @ idx 14
        vid/did: 8086/51ed
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/03/30
                USB Serial Bus Controller (Intel eXtensible HCI)

B000:D20:F02 @ idx 15
        vid/did: 8086/51ef
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 05/00/00
                RAM Memory Controller

B000:D21:F00 @ idx 16
        vid/did: 8086/51e8
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D21:F01 @ idx 17
        vid/did: 8086/51e9
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D22:F00 @ idx 18
        vid/did: 8086/51e0
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 07/80/00
                Other Simple Communications Controller

B000:D22:F03 @ idx 19
        vid/did: 8086/51e3
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 07/00/02
                16550 Compatible Simple Communications Controller (UART)

B000:D25:F00 @ idx 20
        vid/did: 8086/51c5
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D25:F01 @ idx 21
        vid/did: 8086/51c6
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D30:F00 @ idx 22
        vid/did: 8086/51a8
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 07/80/00
                Other Simple Communications Controller

B000:D30:F03 @ idx 23
        vid/did: 8086/51ab
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D31:F00 @ idx 24
        vid/did: 8086/5199
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 06/01/00
                PCI-to-ISA Bridge Device

B000:D31:F03 @ idx 25
        vid/did: 8086/51ca
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 04/01/00
                Audio Multi-media Device

B000:D31:F04 @ idx 26
        vid/did: 8086/51a3
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/05/00
                SMBus Serial Bus Controller

B000:D31:F05 @ idx 27
        vid/did: 8086/51a4
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 0c/80/00
                Other Serial Bus Controller

B000:D31:F06 @ idx 28
        vid/did: 8086/1a1e
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 02/00/00
                Ethernet Network Controller

B001:D00:F00 @ idx 29
        vid/did: c0a9/540a
                Micron/Crucial Technology, <device id - unknown>
        class/subclass/reg: 01/08/02
                Non-volatile Memory Subsystem (NVMe Interface IO Controller)

the fact it says ‘Unknown’ is not a good sign. I googled the 1a1e address and it’s an Intel I219LM Ethernet card. I pretty sure the I219L Ethernet card is supported by this driver. The LM apparently means it’s mean for home PCs vs Industrial ones so I imagine it should work but since the device reports as unknown you may have to manually specify enough options for it to get recognized. Start with the device ID
did=0x1a1e

pkt-v6-hc -ptcpip -de1000 did=0x1a1e

Tim

Hi Tim,
You are right. On linux, lspci says below -
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (16) I219-LM (rev 01)

And ifconfig -

eno0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 88:88:88:88:87:88 brd ff:ff:ff:ff:ff:ff
    altname enp0s31f6
    inet6 fe80::5ec9:5fa1:646f:4332/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

So, on QNX:
when you say “enough option to get recognized” can you please give me example for it?
I even tried below command, although return code is 0, it does not enumerates interface…

# io-pkt-v6-hc -d e1000 mac=888888888788,vid=8086,did=1a1e,mtu=1500,verbose=4,force_link
# echo $?
0
#
I-search:
# io-pkt-v6-hc -d e1000 mac=888888888788,vid=8086,did=1a1e,mtu=1500,verbose=4,force_link
# if_up -p wm0
if_up: retries exhausted
# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136
        inet 127.0.0.1 netmask 0xff000000
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
# nicinfo -v
#

The ‘Unknown’ comes from the lack of information in the PCI vid/did database. This file is named pcidatabase.com-tab_delimited.txt and should be located at /etc/system/config/pci/.
At line 7620, there is 8086 Intel Corporation which identifies the vid 8086. But there is no line to identify the did 1a1e.

From the capture you provided, the network device is part of a compound device. So there are shared resources with other functions in the same physical device.
To get more information on the network device, can you provide the output of pci-tool -vvv -D0x1a1e ?

Have you tried to use the absolute path to the driver library ? Just to be sure there is no path problem : pkt-v6-hc -ptcpip -d/proc/boot/devnp-e1000.so mac=$mac_addr

For Intel network devices, there are 2 other drivers : speedo and ixgbe. It might be worth trying them.

# pci-tool -vvv -D0x1a1e

----------------------------------------------------------------------------------
B000:D31:F06 @ idx 0
        vid/did: 8086/1a1e
                Intel Corporation, <device id - unknown>
        class/subclass/reg: 02/00/00
                Ethernet Network Controller
        revid: 1
        cmd/status registers: 6/10
        Capabilities list (2):
                     01 (PMI) --> 05 (MSI)
        Address Space list - 1 assigned
            [0] MEM, addr=88300000, size=20000, align: 20000, attr: 32bit CONTIG ENABLED
        Interrupt list - 0 assigned
        hdrType: 0
                ssvid: 8086  Intel Corporation
                ssid:  0000

        PMI Capability Details
                PMI supported states: D0 D3hot D3cold *
                PMI current state: D0
                PME's supported from states: D0 D3hot D3cold *
                PME's are disabled

There is no interrupt assigned to the device. This might be the source of the problem.

I suppose it’s OS specific issue!!