Install QNX IFS

To manually install QNX OS, you need to copy the QNX IFS image from the microSD card to the internal storage on the board (e.g.: eMMC).

Typically, the board comes pre-installed with U-Boot. If it doesn't, you'll have to first manually install U-Boot. Steps can be found at the following link: Yocto Recovery SD card (https://variwiki.com/index.php?title=Yocto_Recovery_SD_card&release=mx8mp-yocto-mickledore-6.1.36_2.1.0-v1.3) , which will flash the entire eMMC with U-Boot as a raw partition and ROOTFS in another partition. Copy the required files like DTB, required binaries to the external microSD card.

After the target boots, you can run U-Boot commands to load QNX IFS from microSD card, load FDT file from on-board eMMC, then use boot commands to Boot QNX OS.

After QNX OS starts, if you copy QNX IFS from microSD card to on-board eMMC, then after another reset, you can boot the QNX IFS from the on-board eMMC.

Note:
Utilities like fdisk and mkdosfs etc. need to be fetched from your QNX SDP installation.
  1. Insert the microSD card to your board and power up the board. U-Boot should boot as seen from the output on your serial console.
    U-Boot SPL 2023.04-lf_v2023.04_var02+gca1dfc1574a (Sep 12 2024 - 13:30:09 +0000)
    SEC0:  RNG instantiated
    Normal Boot
    Trying to boot from BOOTROM
    Boot Stage: Primary boot
    image offset 0x8000, pagesize 0x200, ivt offset 0x0
    
    
    U-Boot 2023.04-lf_v2023.04_var02+gca1dfc1574a (Sep 12 2024 - 13:30:09 +0000)
    
    CPU:   i.MX8MP[8] rev1.1 1800 MHz (running at 1200 MHz)
    CPU:   Commercial temperature grade (0C to 95C) at 39C
    Reset cause: POR
    Model: Variscite DART-MX8M-PLUS 1.x on DT8MCustomBoard 2.0 and above
    DRAM:  4 GiB
    optee optee: OP-TEE api uid mismatch
    PTN5150: Vendor ID [0x3], Version ID [0x1], Addr [I2C1 0x3d]
    Core:  213 devices, 28 uclasses, devicetree: separate
    MMC:   FSL_SDHC: 1, FSL_SDHC: 2
    Loading Environment from MMC... *** Warning - bad CRC, using default environment
    
    In:    serial
    Out:   serial
    Err:   serial
    SEC0:  RNG instantiated
    switch to partitions #0, OK
    mmc2(part 0) is current device
    
    Part number: VSM-DT8MP-302
    Assembly: AS310210259
    Production date: 2024 Feb 11
    Serial Number: f8:dc:7a:d4:75:3a
    SOM revision: 1.3
    flash target is MMC:2
    Net:   Get shared mii bus on ethernet@30be0000
    ADIN1300 PHY detected at addr 1
    eth1: ethernet@30be0000, eth0: ethernet@30bf0000 [PRIME]
    Fastboot: Normal
    Normal Boot
    Hit any key to stop autoboot:
                    
  2. Press any key on your keyboard to cancel the auto-boot command.
    Hit any key to stop autoboot:  0
    uboot=>
                    
  3. Run the U-Boot commands to load QNX IFS and board device tree from the mmcdev 1 i.e. the external microSD card then use boot command to boot to QNX OS.
    Note:
    Ater setting the corresponding boot media device (i.e., setenv mmcdev 1 or 0), the "boot" command is able to execute the boot.scr script, where all the steps to load IFS and the DTB file are defined.
    For example:
    u-boot=> setenv mmcdev 1
    u-boot=> boot
    Running BSP bootcmd ...
    switch to partitions #0, OK
    mmc1 is current device
    1693 bytes read in 2 ms (826.2 KiB/s)
    Running bootscript from mmc ...
    ## Executing script at 40480000
    dwceqos_macaddr=f8 dc 7a d4 75 3a
    14273812 bytes read in 593 ms (23 MiB/s)
    63736 bytes read in 4 ms (15.2 MiB/s)
    Working FDT set to c0000000
    ## Starting application at 0x40800000 ...
    Watchdog is enabled
    board_smp_num_cpu: 4 cores
    board_smp_num_cpu: 4 cores
    board_smp_num_cpu: 4 cores
    Found ENET0 MAC in FDT: f8:dc:7a:d4:75:3a
    
    Welcome to QNX 8.0.0 on DART_i.MX8MP_CPU_Board !
    
    Starting Watchdog driver...
    Starting I2C driver ...
    Setting OS clock from RTC ...
    Starting PCI Server ...
    Starting CAN driver (/dev/can1)...
    Starting Serial driver (/dev/ser1)...
    Starting Serial driver (/dev/ser2)...
    Starting Serial driver (/dev/ser3)...
    Starting Serial driver (/dev/ser4)...
    Starting SPI master driver ...
    Starting eMMC driver (/dev/emmc0)...
    Starting SD1 memory card driver (/dev/sd0)...
    Path=0 - imx
     target=0 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=1 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=2 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=3 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=4 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=5 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=6 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=7 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
    Starting OTG1 & OTG2 controller in the host mode ...
    Starting USB Type-C CC-Logic controller ...
    Launching devb-umass ...
    Starting devf-ram filesystem ...
    Starting networking ...
    Starting DHCP client ...
    Starting SSH daemon ...
    Starting devc-pty manager ...
    Starting qconn daemon ...
    Starting GPIO driver (/dev/gpio)...
    Starting shell ...
                    
Note:
If the user wants to have automatic boot through the internal emmc i.e. mmcdev 0, then perform the steps of formatting the partition and copying the binaries to internal emmc as shown below. Remember to change the SW7 switch configuration to eMMC position i.e. INT to boot from the DART-MX8M internal storage.
  1. After the board boots succesfully from the external MMC(microSD card), you need to format the emmc file system. Use mkdosfs command to format the file system and mount both the mmcdev 0 and 1 using DOS filesystem. For example:
    Starting shell ...
    
    $ mkdosfs /dev/emmc0t131
    
    Format complete: FAT32 (4096-byte clusters), 15229884 kB available.
    
    $ mount -t dos /dev/sd0t11 /sd
    
    $ mount -t dos /dev/emmc0t131 /emmc
    
                    
  2. After that copy the required binaries from microSD card to emmc (internal). Use sync to update filesystems to match cached data. Restart the board after removing the SD card from the board. Now the board will boot automatically since mmcdev is first taken as 0 and mmdev=0 is emmc where images are copied. For example:
    $ cp -R /sd/* /emmc/
    
    $ sync
    
    $ shutdown
    
    U-Boot SPL 2023.04-lf_v2023.04_var02+gca1dfc1574a (Sep 12 2024 - 13:30:09 +0000)
    
    U-Boot SPL 2023.04-lf_v2023.04_var02+gca1dfc1574a (Sep 12 2024 - 13:30:09 +0000)
    SEC0:  RNG instantiated
    Normal Boot
    Trying to boot from BOOTROM
    Boot Stage: Primary boot
    image offset 0x8000, pagesize 0x200, ivt offset 0x0
    
    
    U-Boot 2023.04-lf_v2023.04_var02+gca1dfc1574a (Sep 12 2024 - 13:30:09 +0000)
    
    CPU:   i.MX8MP[8] rev1.1 1800 MHz (running at 1200 MHz)
    CPU:   Commercial temperature grade (0C to 95C) at 43C
    Reset cause: POR
    Model: Variscite DART-MX8M-PLUS 1.x on DT8MCustomBoard 2.0 and above
    DRAM:  4 GiB
    optee optee: OP-TEE api uid mismatch
    PTN5150: Vendor ID [0x3], Version ID [0x1], Addr [I2C1 0x3d]
    Core:  213 devices, 28 uclasses, devicetree: separate
    MMC:   FSL_SDHC: 1, FSL_SDHC: 2
    Loading Environment from MMC... *** Warning - bad CRC, using default environment
    
    In:    serial
    Out:   serial
    Err:   serial
    SEC0:  RNG instantiated
    switch to partitions #0, OK
    mmc2(part 0) is current device
    
    Part number: VSM-DT8MP-302
    Assembly: AS310210259
    Production date: 2024 Feb 11
    Serial Number: f8:dc:7a:d4:75:3a
    SOM revision: 1.3
    flash target is MMC:2
    Net:   Get shared mii bus on ethernet@30be0000
    ADIN1300 PHY detected at addr 1
    eth1: ethernet@30be0000, eth0: ethernet@30bf0000 [PRIME]
    Fastboot: Normal
    Normal Boot
    Hit any key to stop autoboot:  0
    Running BSP bootcmd ...
    switch to partitions #0, OK
    mmc2(part 0) is current device
    1693 bytes read in 2 ms (826.2 KiB/s)
    Running bootscript from mmc ...
    ## Executing script at 40480000
    dwceqos_macaddr=f8 dc 7a d4 75 3a
    14273812 bytes read in 45 ms (302.5 MiB/s)
    63736 bytes read in 2 ms (30.4 MiB/s)
    Working FDT set to c0000000
    ## Starting application at 0x40800000 ...
    Watchdog is enabled
    board_smp_num_cpu: 4 cores
    board_smp_num_cpu: 4 cores
    board_smp_num_cpu: 4 cores
    Found ENET0 MAC in FDT: f8:dc:7a:d4:75:3a
    
    Welcome to QNX 8.0.0 on DART_i.MX8MP_CPU_Board !
    
    Starting Watchdog driver...
    Starting I2C driver ...
    Setting OS clock from RTC ...
    Starting PCI Server ...
    Starting CAN driver (/dev/can1)...
    Starting Serial driver (/dev/ser1)...
    Starting Serial driver (/dev/ser2)...
    Starting Serial driver (/dev/ser3)...
    Starting Serial driver (/dev/ser4)...
    Starting SPI master driver ...
    Starting eMMC driver (/dev/emmc0)...
    Starting SD1 memory card driver (/dev/sd0)...
    Path=0 - imx
     target=0 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=1 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=2 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=3 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=4 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=5 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=6 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
     target=7 lun=0     Direct-Access(0) - SDMMC: AJTD4R Rev: 0.6
    Starting OTG1 & OTG2 controller in the host mode ...
    Starting USB Type-C CC-Logic controller ...
    Launching devb-umass ...
    Starting devf-ram filesystem ...
    Starting networking ...
    Starting DHCP client ...
    Starting SSH daemon ...
    Starting devc-pty manager ...
    Starting qconn daemon ...
    Starting GPIO driver (/dev/gpio)...
    Starting shell ...
                    
    Once QNX OS is running, you can test it by executing any shell commands, or any commands residing within the OS image, such as uname, pidin, mount, etc.
    # pidin ar
         pid Arguments
           1 procnto-smp-instr -mr
           2 pipe
       20483 slogger2
       20484 dumper
       20485 mqueue
       20486 random
       20487 wdtkick -t 5000
       20488 i2c-imx -p 0x30A20000 -i67 -c66000000
       20489 i2c-imx -p 0x30A30000 -i68 -c66000000
       20490 i2c-imx -p 0x30A40000 -i69 -c66000000
       20491 i2c-imx -p 0x30A50000 -i70 -c66000000
       24588 pci-server --bus-scan-limit=1 -c
       24589 devcan-flexcan -h -M -b250K -u1 can0
       24590 devc-sermx1 -e -F -S -u 1 -c 24000000 0x30860000,58
       24591 devc-sermx1 -e -F -S -u 2 -c 24000000 0x30890000,59
       24592 devc-sermx1 -e -F -S -u 3 -c 24000000 0x30880000,60
       24593 devc-sermx1 -e -F -S -u 4 -c 24000000 0x30A60000,61
       24594 spi-ecspi
       24595 devb-sdmmc-mx8x cam cache,quiet sdmmc partitions=on
       blk ra=64k:2048k,memory=sysram&below4G:sysram,maxio=256,cache=4m
       disk name=emmc sdio idx=2,emmc,bw=8,hs=tuning_mode=standard,verbose=1
       24596 devb-sdmmc-mx8x cam pnp,cache,quiet
       blk ra=64k:2048k,memory=sysram&below4G:sysram,maxio=256,cache=4m
       disk name=sd sdio idx=1,bs=cd=0x30210000^12^588,verbose=1
       24597 io-usb-otg -d hcd-imx8-xhci ioport=0x38100000,
       irq=72,ioport=0x38200000,irq=73
       24598 nxp-ptn5150a-imx8mp -a 0x3d -u2
       24599 devb-umass cam pnp dos exe=all disk name=umass
       24601 devf-ram -i 9,0 -s0,16m
       65560 io-sock -m phy -m fdt -m phy -d dwceqos -m pci -d em -d ix -d
       re -m usb -d axe -d axge -d cdce -d smsc
       65564 dhcpcd: [manager] [ip4] [ip6] -bqq
      106525 /usr/sbin/sshd
      114714 devc-pty
      114715 qconn
      118814 gpio-imx8mp
      118815 ksh
      118816 pidin ar
    #
    # uname -a
    QNX localhost 8.0.0 2024/11/22-10:55:54EST DART_i.MX8MP_CPU_Board aarch64le
                    
Page updated: