- 正如上面接受的答案中提到的,我们可以使用
mcuxpresso_sdk
为 Coral Dev CM4 构建 bin/elf。
- 此外,我想从 Coral 回购中捕获使用
multicore_example
,的详细信息。rtos_example
- 另外,我想在 rpmsg/remoteproc 对 linux 内核 v4.14 中的 imx8mq 支持上添加几点,imx8mq 所需的补丁和 dts 支持。
FreeRTOS SDK 示例 - 从 u-boot 启动 CM4
- Coral 开发的 SDK 源
hello_world_tflite
示例无需任何更改即可工作。
- 为什么?调用该函数为 CM4 控制台配置 UART 引脚(在
main.c
中)BOARD_InitPins
pin_mux.c
- 此配置不适用于其他示例。因此,我将文件
board.h, board.c, clock_config.c, clock_config.h, pin_mux.c, pin_mux.h
从 hello_world_tflite 复制到其他示例项目。
- 并且
BOARD_InitPins()
必须调用
- 示例
rtos_examples/freertos_hello
$ cd mcuxpresso_sdk/boards/evkmimx8mq/rtos_examples/freertos_hello/
// copy board files from hello_word_tflite example
$ cp -rf ../../demo_apps/hello_world_tflite/[pin_mux.* board.* clock_config.*] ./
// freertos_hello.c -> main -> BOARD_InitBootPins() -> BOARD_InitPins()
// Update pin_mux.c, BOARD_InitBootPins() call BOARD_InitPins()
void BOARD_InitBootPins(void)
{
+ BOARD_InitPins();
}
$ cd armgcc
//compile your project
// copy release/freertos_hello.bin to your SDcard/emmc/tftpboot location
// I use tftp
u-boot=> tftp 0x7e0000 192.168.0.33:/tftpboot/coral/boot/freertos_hello.bin
u-boot=> bootaux 0x7e0000
// Open other emulated console and verify output
从 Linux Remoteproc 加载 CM4 elf
Linux 内核支持
Linux DTS 支持
- 这是我当前的 dts smip 来自
arch/arm64/boot/dts/freescale/fsl-imx8mq-phanbell.dts
. (在 dts 文件顶部添加)
/ {
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
m4_reserved: m4@0x80000000 {
no-map;
reg = <0 0x80000000 0 0x1000000>;
};
};
imx8mq-cm4 {
compatible = "fsl,imx8mq-cm4";
memory-region = <&m4_reserved>;
syscon = <&src>;
clocks = <&clk IMX8MQ_CLK_M4_ROOT>;
};
};
&rpmsg{
/*
* 64K for one rpmsg instance:
* --0xb8000000~0xb800ffff: pingpong
*/
vdev-nums = <1>;
reg = <0x0 0xb8000000 0x0 0x10000>;
status = "okay";
};
&uart2{
status="disabled";
};
&uart3{
status="disabled";
};
Linux RPMsg 支持
- 我启用了 imx rpmsg 模块示例
IMX_RPMSG_TTY and IMX_RPMSG_PINGPONG
- 也启用
RPMSG_CHAR
- CM4 应用程序端 rpmsg 自述文件也可以在这里找到
- 通过上面列出的对 linux 内核和 CM4 sdk 应用示例的更改,我们可以使用 remoteproc 将 elf 加载到 CM4 并使用
pmsg_lite_str_echo_rtos
示例在 APU 和 M4 之间进行通信
使用 remoteproc 的示例 CM4 精灵加载
- 使用 remoteproc加载 ddr 构建
hello_world.elf
。elf 文件应该位于/lib/firmware
您的珊瑚根文件系统中。复制到相应位置。
$ cd /path/to/mcuxpresso_sdk/...../hello_world/armgcc
$ ./build_ddr_release.sh
$ sudo cp ddr_release/hello_world.elf (sdcard/emmc/nfs rootfs)/lib/firmware/
// load firmware using remoteproc
root@coraldev:~# echo hello_world_tflite.elf > /sys/class/remoteproc/remoteproc0/firmware
root@coraldev:~# echo start > /sys/class/remoteproc/remoteproc0/state
[ 109.365150] remoteproc remoteproc0: powering up imx-rproc
[ 109.372949] remoteproc remoteproc0: Booting fw image hello_world_tflite.elf, size 295228
[ 109.381399] remoteproc remoteproc0: filesz 0x240 memsz 0x240
[ 109.387196] remoteproc remoteproc0: da 0x80000000 mem 0x240
[ 109.392959] remoteproc remoteproc0: filesz 0x1ee78 memsz 0x1ee78
[ 109.399094] remoteproc remoteproc0: da 0x80000240 mem 0x1ee78
[ 109.405366] remoteproc remoteproc0: filesz 0x6f4 memsz 0x6f4
[ 109.411181] remoteproc remoteproc0: da 0x8001f0b8 mem 0x6f4
[ 109.416945] remoteproc remoteproc0: filesz 0x0 memsz 0x3ba8
[ 109.422638] remoteproc remoteproc0: da 0x8001f7c0 mem 0x3ba8
[ 109.428501] remoteproc remoteproc0: remote processor imx-rproc is now up
- 但有时我无法查看 M4 UART 控制台
hello_world*
加载除我得到的任何其他示例bad phdr da 0x80000000 mem 0x240
。这我不知道如何解决
- 也许应该更新 dts mem reg
- 也许等待 imx8mq remoteproc 的官方支持
- 但是基本的学习和实验是有效的
Linux端rpmsg char驱动示例
multicore_examples/rpmsg_lite_str_echo_rtos/armgcc
使用更新板初始化引脚编译
- 从 u-boot 加载 bin
- linux启动后,up insmod
imx_rpmsg_tty.ko
(需要在menuconfig中启用)
// Load cm4
u-boot=> tftp 0x7e0000 192.168.0.33:/tftpboot/coral/boot/rpmsg_lite_str_echo_rtos_imxcm4.bin
u-boot=> bootaux 0x7e0000
// on linux side
root@coraldev:~# insmod /lib/modules/4.14.98+/kernel/drivers/rpmsg/imx_rpmsg_tty.ko
root@coraldev:~# ls -las /dev/ttyRPMSG30
0 crw-rw---- 1 root dialout 235, 0 Jan 1 04:52 /dev/ttyRPMSG30
root@coraldev:~# echo "hello from linux" > /dev/ttyRPMSG30
// on CM4 console, other emulated ttyUSB1
RPMSG String Echo FreeRTOS RTOS API Demo...
Nameservice sent, ready for incoming messages...
Get Message From Master Side : "hello world!" [len : 12]
Get Message From Master Side : "hello from linux" [len : 16]
Get New Line From Master Side
- 我已经尝试在这里更新我尝试在珊瑚开发中使用 CM4 的所有内容
- 我仍然面临remoteproc的问题。
- 我希望其中一些信息对偶然发现这篇文章的人有所帮助