Problem with remote shell over IPC

Dear All, 

I'm using NRF54H20 taht have two cores: App and network. Network has uart and I have a shell on it. Now I want to add network core to shell to switch between cores using command "shell ipc". 

I add line 

zephyr,shell-ipc = &ipc0;

to dts of both cores.

additionally added few lines to App core conf:

CONFIG_IPC_SERVICE=y
CONFIG_MBOX=y
CONFIG_SHELL=y
CONFIG_SHELL_BACKENDS=y
CONFIG_SHELL_BACKEND_SERIAL=y
CONFIG_SHELL_IPC=y
CONFIG_SHELL_IPC_BACKEND_RX_RING_BUFFER_SIZE=1024
CONFIG_SHELL_PROMPT_UART="Also-IoT:~$ "
CONFIG_SHELL_PROMPT_IPC="Also-IoT-net:~$ "

and on Network core conf:

CONFIG_SHELL=y

CONFIG_MBOX=y
CONFIG_IPC_SERVICE=y

CONFIG_SHELL_BACKENDS=y
CONFIG_SERIAL=n
CONFIG_UART_CONSOLE=n

CONFIG_SHELL_IPC=y
CONFIG_SHELL_BACKEND_SERIAL=n
CONFIG_SHELL_PROMPT_IPC="Also-IoT-net:~$ "

this changes cause that when I'm executing command "shell backends" I have: 

Also-IoT:~$ shell backends
Active shell backends:
   0. :Also-IoT-net:~$  (shell_ipc)
   1. :Also-IoT:~$  (shell_uart)
   

Which means that backend is ready but I did not get a command "shell ipc" to switch to Network core shell

additionally I'm getting lot of logs like below: 

[00:28:55.723,101] <inf> shell_ipc: RX ring buffer full. Dropping 5 bytes
[00:28:56.852,594] <inf> shell_ipc: RX ring buffer full. Dropping 118 bytes
[00:28:56.852,719] <inf> shell_ipc: RX ring buffer full. Dropping 30 bytes
[00:28:56.852,790] <inf> shell_ipc: RX ring buffer full. Dropping 30 bytes
[00:28:56.852,859] <inf> shell_ipc: RX ring buffer full. Dropping 19 bytes
[00:28:56.852,928] <inf> shell_ipc: RX ring buffer full. Dropping 4 bytes
[00:28:56.853,014] <inf> shell_ipc: RX ring buffer full. Dropping 5 bytes
[00:28:57.966,961] <inf> shell_ipc: RX ring buffer full. Dropping 118 bytes
[00:28:57.967,105] <inf> shell_ipc: RX ring buffer full. Dropping 30 bytes
[00:28:57.967,178] <inf> shell_ipc: RX ring buffer full. Dropping 30 bytes
[00:28:57.967,248] <inf> shell_ipc: RX ring buffer full. Dropping 19 bytes
[00:28:57.967,317] <inf> shell_ipc: RX ring buffer full. Dropping 4 bytes

That looks like data are incoming over ipc but somehow shell on app core do not recognize it or do not know where source of this data is. 

Can you help me whats missing ?

  • Hello, have you seen the nrf/samples/nrf5340/remote_shell sample application for the nRF5340? While written for the nRF5340, it details the overlays, kconfig, and prj.conf you will need to imitate in your setup in the nRF54H20. Please take a look, the files I think will be of most interest are exactly as I listed here, I believe they'll provide the 'Aha!' moment you're looking for. Let me know if this doesn't work out for you though.

  • Yes. Based on this example I achieved such situation :-) Now I'm looking what I missed. From my perspective network core sending some logs and I see it on app core as a full RX ring buffer. I don't know why App core do not read it and write on his shell console and why I do not have this "shell ipc" command. How to link &ipc0 with shell on app core side ? My dts on app side has such ipc structure: 

    ipc0: &cpuapp_cpurad_ipc {
    	status = "okay";
    	mbox-names = "rx", "tx";
    	tx-region = <&cpuapp_cpurad_ipc_shm>;
    	rx-region = <&cpurad_cpuapp_ipc_shm>;
    	tx-blocks = <32>;
    	rx-blocks = <32>;
    
    	bt_hci_ipc0: bt_hci_ipc0 {
    		compatible = "zephyr,bt-hci-ipc";
    		status = "okay";
    	};
    };
    
     

    I also tried to use &cpuapp_cpurad_ipc as a subset of ipc0 but same result. 

    One thing:

     

    CONFIG_IPC_SERVICE_BACKEND_RPMSG=y

    Do not exist in SDK 0.17 (latest) so no chance to make it in a same way as in remote shell example. 

  • Sorry as I should have kept digging...I found the following which does support the nRF54H20 and demonstrates remote shell IPC service: IPC service

    Note that in the section for building and configuration the H20 it does expect this to be between the two domains. 

Related