IMX8QXP Cortex-M4 RPMSG

        测试M4核与A35核通过rpmsg进行数据通信。

hello_world

        编译目录:SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/armgcc

        源码函数:

int main(void)
{   
    char ch;
    
    /* Init board hardware. */
    sc_ipc_t ipc;
    
    ipc = BOARD_InitRpc();
    BOARD_InitPins(ipc);
    BOARD_BootClockRUN();
    BOARD_InitDebugConsole();
    BOARD_InitMemory();
    
    PRINTF("hello world. \r\n");
    
    while (1)
    {   
        ch = GETCHAR();
        PUTCHAR(ch);
    }
}

        编译命令:./build_release.sh

[wangyb@wangyb-VirtualBox:armgcc]$ ./build_release.sh 
-- TOOLCHAIN_DIR: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10
-- BUILD_TYPE: release
-- TOOLCHAIN_DIR: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10
-- BUILD_TYPE: release
-- The ASM compiler identification is GNU
-- Found assembler: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc
-- The C compiler identification is GNU 10.3.1
-- The CXX compiler identification is GNU 10.3.1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/armgcc
Scanning dependencies of target hello_world.elf
[  8%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/hello_world.c.obj
[  8%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/board.c.obj
[ 12%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/pin_mux.c.obj
[ 16%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/empty_rsc_table.c.obj
[ 36%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/debug_console_lite/fsl_assert.c.obj
[ 20%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/pad/pad_rpc_clnt.c.obj
[ 36%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/pm/pm_rpc_clnt.c.obj
[ 36%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/main/ipc_imx8qx.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/misc/misc_rpc_clnt.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/seco/seco_rpc_clnt.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/fsl_sbrk.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/system_MIMX8QX6_cm4.c.obj
[ 36%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/rm/rm_rpc_clnt.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/uart/fsl_adapter_lpuart.c.obj
[ 76%] Building ASM object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/gcc/startup_MIMX8QX6_cm4.S.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/irq/irq_rpc_clnt.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/lists/fsl_component_generic_list.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/demo_apps/hello_world/clock_config.c.obj
[ 76%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/timer/timer_rpc_clnt.c.obj
[ 80%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/debug_console_lite/fsl_debug_console.c.obj
[ 84%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_gpio.c.obj
[ 88%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_lpuart.c.obj
[ 96%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_common.c.obj
[ 92%] Building C object CMakeFiles/hello_world.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_clock.c.obj
[100%] Linking C executable release/hello_world.elf
[100%] Built target hello_world.elf

        编译文件:release/hello_world.bin

        tftp下载文件进行测试:

loadaddr=0x80280000
dhcp;setenv serverip 192.169.5.48;ping $serverip;tftp ${loadaddr} hello_world.bin;bootaux ${loadaddr}

=> tftp ${loadaddr} hello_world.bin;bootaux ${loadaddr}
Using ethernet@5b040000 device
TFTP from server 192.169.5.48; our IP address is 192.169.5.25
Filename 'hello_world.bin'.
Load address: 0x80280000
Loading: #
	 1 MiB/s
done
Bytes transferred = 8616 (21a8 hex)
## Starting auxiliary core at 0x80280000 ...
Power on aux core 0
Copy image from 0x80280000 to 0x34fe0000
Start M4
bootaux complete

M4:hello world.

rpmsg_lite_str_echo_rtos

        rpmsg源码:SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos

int main(void)
{
    /* Initialize standard SDK demo application pins */
    uint32_t freq;
    sc_pm_clock_rate_t src_rate = SC_133MHZ;

    sc_ipc_t ipc = BOARD_InitRpc();
    BOARD_InitPins(ipc);
    BOARD_BootClockRUN();
    BOARD_InitDebugConsole();
    BOARD_InitMemory();

    if (xTaskCreate(app_task, "APP_TASK", APP_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, &app_task_handle) != pdPASS)
    {
        PRINTF("\r\nFailed to create application task\r\n");
        for (;;)
            ;
    }

    vTaskStartScheduler();

    PRINTF("Failed to start FreeRTOS on core0.\n");
    for (;;)
        ;
}

static void app_task(void *param)
{
    volatile uint32_t remote_addr;
    struct rpmsg_lite_endpoint *volatile my_ept;
    volatile rpmsg_queue_handle my_queue;
    struct rpmsg_lite_instance *volatile my_rpmsg;
    void *rx_buf;
    uint32_t len;
    int32_t result;
    void *tx_buf;
    uint32_t size;

    /* Print the initial banner */
    PRINTF("\r\nRPMSG String Echo FreeRTOS RTOS API Demo...\r\n");

#ifdef MCMGR_USED
    uint32_t startupData;

    /* Get the startup data */
    (void)MCMGR_GetStartupData(kMCMGR_Core1, &startupData);

    my_rpmsg = rpmsg_lite_remote_init((void *)startupData, RPMSG_LITE_LINK_ID, RL_NO_FLAGS);

    /* Signal the other core we are ready */
    (void)MCMGR_SignalReady(kMCMGR_Core1);
#else
    my_rpmsg = rpmsg_lite_remote_init((void *)RPMSG_LITE_SHMEM_BASE, RPMSG_LITE_LINK_ID, RL_NO_FLAGS);
#endif /* MCMGR_USED */

    while (0 == rpmsg_lite_is_link_up(my_rpmsg))
        ;
   my_queue = rpmsg_queue_create(my_rpmsg);
    my_ept   = rpmsg_lite_create_ept(my_rpmsg, LOCAL_EPT_ADDR, rpmsg_queue_rx_cb, my_queue);
    (void)rpmsg_ns_announce(my_rpmsg, my_ept, RPMSG_LITE_NS_ANNOUNCE_STRING, RL_NS_CREATE);

    PRINTF("\r\nNameservice sent, ready for incoming messages...\r\n");

    for (;;)
    {
        /* Get RPMsg rx buffer with message */
        result =
            rpmsg_queue_recv_nocopy(my_rpmsg, my_queue, (uint32_t *)&remote_addr, (char **)&rx_buf, &len, RL_BLOCK);
        if (result != 0)
        {
            assert(false);
        }

        /* Copy string from RPMsg rx buffer */
        assert(len < sizeof(app_buf));
        memcpy(app_buf, rx_buf, len);
        app_buf[len] = 0; /* End string by '\0' */

        if ((len == 2) && (app_buf[0] == 0xd) && (app_buf[1] == 0xa))
            PRINTF("Get New Line From Master Side\r\n");
        else
            PRINTF("Get Message From Master Side : \"%s\" [len : %d]\r\n", app_buf, len);

        /* Get tx buffer from RPMsg */
        tx_buf = rpmsg_lite_alloc_tx_buffer(my_rpmsg, &size, RL_BLOCK);
        assert(tx_buf);
        /* Copy string to RPMsg tx buffer */
        memcpy(tx_buf, app_buf, len);
        /* Echo back received message with nocopy send */
        result = rpmsg_lite_send_nocopy(my_rpmsg, my_ept, remote_addr, tx_buf, len);
        if (result != 0)
        {
            assert(false);
        }
        /* Release held RPMsg rx buffer */
        result = rpmsg_queue_nocopy_free(my_rpmsg, rx_buf);
        if (result != 0)
        {
            assert(false);
        }
    }
}

        编译:

[wangyb@wangyb-VirtualBox:armgcc]$ ./build_release.sh 
-- TOOLCHAIN_DIR: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10
-- BUILD_TYPE: release
-- TOOLCHAIN_DIR: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10
-- BUILD_TYPE: release
-- The ASM compiler identification is GNU
-- Found assembler: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc
-- The C compiler identification is GNU 10.3.1
-- The CXX compiler identification is GNU 10.3.1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/armgcc
Scanning dependencies of target rpmsg_lite_str_echo_rtos_imxcm4.elf
[  2%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/main_remote.c.obj
[  2%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/rsc_table.c.obj
[  4%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/pin_mux.c.obj
[  5%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/pm/pm_rpc_clnt.c.obj
[  7%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/timer/timer_rpc_clnt.c.obj
[  8%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/srtm/channels/srtm_rpmsg_endpoint.c.obj
[ 10%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/rm/rm_rpc_clnt.c.obj
[ 11%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/board.c.obj
[ 13%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/codec/cs42888/fsl_cs42888.c.obj
[ 14%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/queue.c.obj
[ 15%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_lpi2c.c.obj
[ 17%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/portable/GCC/ARM_CM4F/port.c.obj
[ 18%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/lists/fsl_component_generic_list.c.obj
[ 20%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/clock_config.c.obj
[ 21%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/codec/port/cs42888/fsl_codec_adapter.c.obj
[ 23%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/irq/irq_rpc_clnt.c.obj
[ 24%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/codec/i2c/fsl_codec_i2c.c.obj
[ 26%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/main/ipc_imx8qx.c.obj
[ 27%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/srtm/services/srtm_i2c_service.c.obj
[ 28%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/app_srtm.c.obj
[ 30%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/croutine.c.obj
[ 31%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/virtio/virtqueue.c.obj
[ 33%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/system_MIMX8QX6_cm4.c.obj
[ 34%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_clock.c.obj
[ 36%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/rpmsg_lite/rpmsg_lite.c.obj
[ 37%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_common.c.obj
[ 39%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/stream_buffer.c.obj
[ 42%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_lpi2c_freertos.c.obj
[ 42%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/codec/fsl_codec_common.c.obj
[ 43%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/rpmsg_lite/rpmsg_queue.c.obj
[ 44%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/common/llist.c.obj
[ 46%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/seco/seco_rpc_clnt.c.obj
[ 47%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/portable/MemMang/heap_4.c.obj
[ 49%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/str/fsl_str.c.obj
[ 50%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_gpio.c.obj
[ 52%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_lpuart.c.obj
[ 53%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/tasks.c.obj
[ 56%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_sai.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_str_echo_rtos/srtm/channels/srtm_mu_endpoint.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/list.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_sai_edma.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/fsl_sbrk.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/rpmsg_lite/porting/platform/imx8qx_cm4/rpmsg_platform.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/timers.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/uart/fsl_adapter_lpuart.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/i2c/fsl_adapter_lpi2c.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/port/srtm_sem_freertos.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/rtos/freertos/freertos_kernel/event_groups.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/rpmsg_lite/rpmsg_ns.c.obj
[ 56%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/debug_console/fsl_debug_console.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/pad/pad_rpc_clnt.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_irqsteer.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/srtm/srtm_dispatcher.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_edma.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/drivers/fsl_mu.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/serial_manager/fsl_component_serial_manager.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/scfw_api/svc/misc/misc_rpc_clnt.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/srtm/srtm_channel.c.obj
[ 94%] Building ASM object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/gcc/startup_MIMX8QX6_cm4.S.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/srtm/srtm_message.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/devices/MIMX8QX6/utilities/fsl_assert.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/serial_manager/fsl_component_serial_port_uart.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/middleware/multicore/rpmsg_lite/lib/rpmsg_lite/porting/environment/rpmsg_env_freertos.c.obj
[ 98%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/srtm/srtm_service.c.obj
[ 98%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/port/srtm_mutex_freertos.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/srtm/srtm_peercore.c.obj
[ 98%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/port/srtm_message_pool.c.obj
[ 94%] Building C object CMakeFiles/rpmsg_lite_str_echo_rtos_imxcm4.elf.dir/home/wangyb/sda3/SDK_2_9_0_MEK-MIMX8QX/components/srtm/port/srtm_heap_freertos.c.obj
[100%] Linking C executable release/rpmsg_lite_str_echo_rtos_imxcm4.elf
[100%] Built target rpmsg_lite_str_echo_rtos_imxcm4.elf

        修改dts配置rpmsg:fsl-imx8qxp-mek.dtsi最后加入下面的配置。

/delete-node/ &i2c0_cm40;【不能删除节点否则报错:Reference to non-existent node or label "pca9557_a"】
/delete-node/ &i2c1;【不能删除节点:Reference to non-existent node or label "wm8960"】
	
&rpmsg{
    /*
     * 64K for one rpmsg instance:
     */
    vdev-nums = <2>;
    reg = <0x0 0x90000000 0x0 0x20000>;
    status = "okay";
};	
	
&reg_can_en {
    status = "disabled";
};

&reg_can_stby {
    status = "disabled";
};

&intmux_cm40 {
    status = "disabled";
};

&flexcan1 {
    status = "disabled";
};

&flexcan2 {
    status = "disabled";
};

&flexspi0 {
    status = "disabled";
};

&lpuart3 {
    status = "disabled";
};

        下载测试:

dhcp;setenv serverip 192.169.5.48;ping $serverip;tftp ${loadaddr} rpmsg_lite_str_echo_rtos.bin;bootaux ${loadaddr}

        M4打印:

RPMSG String Echo FreeRTOS RTOS API Demo...

        内核启动后M4打印:

Nameservice sent, ready for incoming messages...

        内核rpmsg模块:imx_rpmsg_pingpong.ko,imx_rpmsg_tty.ko

#
# Rpmsg drivers
#
CONFIG_RPMSG=y
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
CONFIG_RPMSG_QCOM_SMD=y
CONFIG_RPMSG_VIRTIO=y
CONFIG_HAVE_IMX_RPMSG=y
CONFIG_IMX_RPMSG_PINGPONG=m
CONFIG_IMX_RPMSG_TTY=m
[wangyb@wangyb-VirtualBox:openwrt-4-glibc-test]$ ls build_dir/target-aarch64_cortex-a35+neon_musl/linux-imx8/linux-4.14.98/drivers/rpmsg/*.ko
build_dir/target-aarch64_cortex-a35+neon_musl/linux-imx8/linux-4.14.98/drivers/rpmsg/imx_rpmsg_pingpong.ko
build_dir/target-aarch64_cortex-a35+neon_musl/linux-imx8/linux-4.14.98/drivers/rpmsg/imx_rpmsg_tty.ko

        加载ko:imx_rpmsg_tty.ko

root@OpenWrt:~# insmod imx_rpmsg_tty.ko 
[   72.676998] imx_rpmsg_tty virtio1.rpmsg-openamp-demo-channel.-1.30: new channel: 0x400 -> 0x1e!
[   72.685893] Install rpmsg tty driver!
[   72.693667] imx-lpi2c 37230000.i2c: can't get irq number【i2c0_cm40: i2c@37230000】

        M4代码中已经初始化了lpi2c,所以这里就初始化失败,按理应该需要删除i2c0_cm40节点重新编写的。

        加载ko后M4打印:

Get Message From Master Side : "hello world!" [len : 12]

        A35核与M4核的通道:ttyRPMSG30

root@OpenWrt:~# ls /dev/ttyRPMSG30 -l
crw-rw----    1 root     dialout   236,   0 Jan  1 04:24 /dev/ttyRPMSG30

root@OpenWrt:~# echo test > /dev/ttyRPMSG30 
root@OpenWrt:~# 

        M4核收到数据打印:

Get Message From Master Side : "test" [len : 4]
Get New Line From Master Side

        M4核收到数据然后发送回去:

        M4核收到数据后,获取A35的通道ID remote_addr地址,然后就可以往这个地址发送数据。或者把remote_addr地址固定就可以发送数据了。

rpmsg_lite_pingpong_rtos

        代码:SDK_2_9_0_MEK-MIMX8QX/boards/mekmimx8qx/multicore_examples/rpmsg_lite_pingpong_rtos/linux_remote

int main(void)
{
    if (xTaskCreate(app_task, "APP_TASK", APP_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1U, &app_task_handle) != pdPASS)
    {
        (void)PRINTF("\r\nFailed to create application task\r\n");
        for (;;)
        {
        }
    }

    vTaskStartScheduler();

    (void)PRINTF("Failed to start FreeRTOS on core0.\r\n");
    for (;;)
    {
    }
}

static void app_task(void *param)
{
    while (msg.DATA <= 10U)
    {
        (void)PRINTF("Waiting for ping...\r\n");
        (void)rpmsg_queue_recv(my_rpmsg, my_queue, (uint32_t *)&remote_addr, (char *)&msg, sizeof(THE_MESSAGE),
                               ((void *)0), RL_BLOCK);
        msg.DATA++;
        (void)PRINTF("Sending pong...\r\n");
        (void)rpmsg_lite_send(my_rpmsg, my_ept, remote_addr, (char *)&msg, sizeof(THE_MESSAGE), RL_BLOCK);
    }

    (void)PRINTF("Ping pong done, deinitializing...\r\n");

    (void)rpmsg_lite_destroy_ept(my_rpmsg, my_ept);
    my_ept = ((void *)0);
    (void)rpmsg_queue_destroy(my_rpmsg, my_queue);
    my_queue = ((void *)0);
    (void)rpmsg_ns_unbind(my_rpmsg, ns_handle);
    (void)rpmsg_lite_deinit(my_rpmsg);
    msg.DATA = 0U;

    (void)PRINTF("Looping forever...\r\n");

    /* End of the example */
    for (;;)
    {
    }
}

        编译后进行测试:

dhcp;setenv serverip 192.169.5.48;ping $serverip;tftp ${loadaddr} rpmsg_lite_pingpong_rtos_linux_remote.bin;bootaux ${loadaddr}

        M4打印:

RPMSG Ping-Pong FreeRTOS RTOS API Demo...
RPMSG Share Base Addr is 0x90010000

        内核启动后M4打印:

Link is up!
Nameservice announce sent.

        加载ko:imx_rpmsg_pingpong.ko 

root@OpenWrt:~# insmod imx_rpmsg_pingpong.ko 
[   46.943888] imx_rpmsg_pingpong virtio1.rpmsg-openamp-demo-channel.-1.30: new channel: 0x400 -> 0x1e!
[   46.956037] imx-lpi2c 37230000.i2c: can't get irq number
[   46.956488] get 1 (src: 0x1e)
[   46.965923] get 3 (src: 0x1e)
[   46.970422] get 5 (src: 0x1e)
[   46.974936] get 7 (src: 0x1e)
[   46.979450] get 9 (src: 0x1e)
[   46.983971] get 11 (src: 0x1e)

M4:
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Waiting for ping...
Sending pong...
Ping pong done, deinitializing...
Looping forever...

        驱动中发送0到M4,M4加一后饭回,A35收到后加一发送,循环10次。

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/123664069