ttyRPMSG does not exist iMX7D

I want to use RPMSG to get data from the M4 and visualize it with Qt on the A7.
I followed this instruction: Communicating between cores with RPMsg

  1. Question: How can I reboot the A7 after interrupting the bootloader to use fatload? I used bootelf because boot does not exist.

  2. Question: I does not get any feedback after rebooting. I execute modprrobe imx_rpmsg_tty and nothing happen. echo imx_rpmsg_tty > /etc/modules-load.d/rpmsg_tty.conf works. stty -F /dev/ttyRPMSG -echo does not work → I get the reply stty: /dev/ttyRPMSG: No such file or directory.

On the M4 I only get:
RPMSG String Echo FreeRTOS RTOS API Demo…
RPMSG Init as Remote

The linux verison:
Linux b2qt-colibri-imx7-emmc 4.14.170-0+git.5c643afa32be #1 SMP Thu Sep 10

Greetings @PG03!

Regarding your first question, you can try running run distro_bootcmd. We’ve been using Distro Boot on our BSP for a while and it seems that the B2Qt image inherits from that.

For your second question, I may have to test this functionality and try to reproduce that on my side. Can you please show me the output of dmesg | grep rpmsg?

Thank you for your awnsers.
I get this when I use run distro_bootcmd

Colibri iMX7 # run distro_bootcmd
switch to partitions #0, OK
mmc0(part 0) is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
1243 bytes read in 12 ms (100.6 KiB/s)
## Executing script at 87000000
SCRIPT FAILED: continuing...
switch to partitions #0, OK
mmc1 is current device
Scanning mmc 1:1...

Device 0: unknown device
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
*** Unhandled DHCP Option in OFFER/ACK: 125
*** Unhandled DHCP Option in OFFER/ACK: 125
DHCP client bound to address 10.0.0.236 (2050 ms)
Using FEC0 device
TFTP from server 192.168.10.1; our IP address is 10.0.0.236; sending through gateway 10.0.0.138
Filename 'boot.scr.uimg'.
Load address: 0x87000000
Loading: T T T T T T T T T T 
Retry count exceeded; starting again
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
*** Unhandled DHCP Option in OFFER/ACK: 125
*** Unhandled DHCP Option in OFFER/ACK: 125
DHCP client bound to address 10.0.0.236 (2052 ms)
Using FEC0 device
TFTP from server 192.168.10.1; our IP address is 10.0.0.236; sending through gateway 10.0.0.138
Filename 'boot.scr.uimg'.
Load address: 0x81000000
Loading: T T T T T T T T T T 
Retry count exceeded; starting again

This is the output of dmesg | grep rpmsg
root@b2qt-colibri-imx7-emmc:~# dmesg | grep rpmsg
[ 0.056060] imx rpmsg driver is registered.

@PG03,

Thank you for the info. Can also provide the output of printenv on U-Boot?

This is the output:

Colibri iMX7 # printenv
arch=arm
baudrate=115200
board=colibri_imx7
board_name=colibri_imx7
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_file=zImage
boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 mmc1 usb0 dhcp 
bootcmd=run emmcboot ; echo ; echo emmcboot failed ; setenv fdtfile ${soc}-colibri-emmc-${fdt_board}.dtb && run distro_bootcmd;
bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_usb0=devnum=0; run usb_boot
bootdelay=1
bootm_size=0x10000000
bootubipart=ubi
console=ttymxc0
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
emmcboot=run setup; run emmcfinduuid; run set_emmcargs; setenv bootargs ${defargs} ${emmcargs} ${setupargs} ${vidargs}; echo Booting from internal eMMC chip...; run m4boot && load mmc ${emmcdev}:${emmcbootpart} ${fdt_addr_r} ${soc}-colibri-emmc-${fdt_board}.dtb && load mmc ${emmcdev}:${emmcbootpart} ${kernel_addr_r} ${boot_file} && run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}
emmcbootpart=1
emmcdev=0
emmcfinduuid=part uuid mmc ${emmcdev}:${emmcrootpart} uuid
emmcrootpart=2
eth1addr=00:14:2d:75:d6:80
ethact=FEC0
ethaddr=00:14:2d:65:d6:80
ethprime=FEC
fdt_addr_r=0x82000000
fdt_board=eval-v3
fdt_fixup=fdt addr ${fdt_addr_r} && fdt rm /soc/aips-bus@30800000/spba-bus@30800000/serial@30890000
fdt_high=0xffffffff
fdtcontroladdr=bdd78bf0
fileaddr=80800000
filesize=28510
initrd_high=0xffffffff
ip_dyn=yes
ipaddr=192.168.10.2
kernel_addr_r=0x81000000
kernel_file=zImage
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x80800000
m4boot=;
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
netmask=255.255.255.0
nfsargs=ip=:::::eth0: root=/dev/nfs
nfsboot=run setup; setenv bootargs ${defargs} ${nfsargs} ${setupargs} ${vidargs}; echo Booting from NFS...;dhcp ${kernel_addr_r} && tftp ${fdt_addr_r} ${soc}-colibri${variant}-${fdt_board}.dtb && run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}
pxefile_addr_r=0x87100000
ramdisk_addr_r=0x82100000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
scriptaddr=0x87000000
sdboot=run setup; run sdfinduuid; run set_sdargs; setenv bootargs ${defargs} ${sdargs} ${setupargs} ${vidargs}; echo Booting from MMC/SD card...; run m4boot && load mmc ${sddev}:${sdbootpart} ${kernel_addr_r} ${kernel_file} && load mmc ${sddev}:${sdbootpart} ${fdt_addr_r} ${soc}-colibri-${fdt_board}.dtb && run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}
sdbootpart=1
sddev=1
sdfinduuid=part uuid mmc ${sddev}:${sdrootpart} uuid
sdrootpart=2
serial#=06674048
serverip=192.168.10.1
set_emmcargs=setenv emmcargs ip=off root=PARTUUID=${uuid} ro rootfstype=ext4 rootwait
set_sdargs=setenv sdargs root=PARTUUID=${uuid} ro rootwait
setethupdate=if env exists ethaddr; then; else setenv ethaddr 00:14:2d:00:00:00; fi; tftpboot ${loadaddr} ${board}/flash_eth.img && source ${loadaddr}
setsdupdate=mmc rescan && setenv interface mmc && fatload ${interface} 0:1 ${loadaddr} ${board}/flash_blk.img && source ${loadaddr}
setup=setenv setupargs console=tty1 console=${console},${baudrate}n8 ${memargs} consoleblank=0; setenv bootm_boot_mode sec
setupdate=run setsdupdate || run setusbupdate || run setethupdate
setusbupdate=usb start && setenv interface usb && fatload ${interface} 0:1 ${loadaddr} ${board}/flash_blk.img && source ${loadaddr}
soc=imx7d
splashpos=m,m
updlevel=2
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
variant=-emmc
vendor=toradex
videomode=video=ctfb:x:640,y:480,depth:18,pclk:39722,le:48,ri:16,up:33,lo:10,hs:96,vs:2,sync:0,vmode:0

Environment size: 6354/8188 bytes

@PG03,

Thanks! Can you please try run bootcmd?

Now it is working, thank you!

Thats great!