Skip to main content

大小核通信

1 编译小核配置文件

1.1 搭建基础系统

使用IConfigTool工具选择主配置文件

2023-05-23_14-51

勾选 cmd_mcu 命令

2023-05-23_17-25

保存配置以后,进行编译烧录。

编译命令如下:

build$ make x2000_darwin_factory_defconfig

烧录请参考 烧录方法

1.2 配置小核的功能

选择小核的Config.in文件和小核的配置文件

注意:Config.in的路径为 libmcu/Config.in

x2000_test_defconfig路径为: libmcu/configs/x2000_test_defconfig

2023-05-23_15-02

2023-05-23_15-06

2023-05-23_15-04

1.3 编译小核配置

# 切换到工程小核libmcu的编译目录
cd libmcu/

# 配置编译器路径
export PATH=../tools/toolchains/mips-gcc520-glibc222/bin/:$PATH

# 编译对应的配置文件
make x2000_test_defconfig

# 编译小核(生成libmcu-bare.bin小核镜像文件)
make

# 将libmcu-bare.bin镜像文件adb到开发板的/usr/data或者tmp/可写分区
adb push libmcu-bare.bin /usr/data

2 加载小核镜像

2.1 cmd_mcu命令介绍

cmd_mcu命令介绍

# 写小核镜像
cmd_mcu write_firmware /usr/data/libmcu-bare.bin
# 加载小核镜像
cmd_mcu bootup
# 复位小核
cmd_mcu reset
# 关闭小核
cmd_mcu shutdown
# 写字符串数据
cmd_mcu write_str test123456
# 写整型数据
cmd_mcu write_data 0x01 0x02 0x03 0x04
# 往指定内存写数据
cmd_mcu write_mem 0x400 0x01 0x02 0x03
# 读取字符串数据
cmd_mcu read_str 11
# 读取整整型数据
cmd_mcu read_data 4

2.2 加载小核

# 写入小核镜像
cmd_mcu write_firmware /usr/data/libmcu-bare.bin

# 加载小核镜像
cmd_mcu bootup

# 复位小核
cmd_mcu reset

3 大小核通讯测试

应用示例路径:libmcu/vendor/vendor.c

while (1) {
while (!is_data_comming);
is_data_comming = 0;

int len = 0;
char buf[100];
int ret;
int send_len;
/* 从大核读取数据 */
while (1) {
ret = host_cpu_read(buf+len, sizeof(buf)-len);
if (!ret)
break;

len += ret;
}

printf("len: %d : ", len);
int i;
for (i = 0; i < len; i++) {
printf("%c", buf[i]);
}

printf("\n");

send_len = len;
/* 向大核写入数据 */
while (len) {
while(mcu_test_host_busy());

while (len) {
int ret = host_cpu_write(buf, len);
len -= ret;
if (!ret)
break;
}
/* 通知写入数据的长度 */
mcu_notify_host(send_len);
}
}

3.1 大核向小核写入数据

大核通过libhardware2的cmd_mcu write命令可以向小核写数据,小核通过host_cpu_read函数进行读取大核写的数据。

3.2 大核从小核读取数据

大核通过libhardware2的cmd_mcu read命令可以从小核读取数据,小核通过host_cpu_write函数向大核进行写数据。