读取文件会覆盖保留的内存。无法加载'hello_world.bin

Reading file would overwrite reserved memory. Failed to load 'hello_world.bin

我有带载板的 imx7d-pico。这台微型电脑 经常用于 Android 事物。 PDF(数据表)轻松 找到了。

我(在过去两周)一直在尝试本教程: https://github.com/TechNexion/freertos-tn/tree/freertos_1.0.1_imx7d

 export ARMGCC_DIR=${HOME}/gcc-arm-none-eabi-4_9-2015q3/
 after ./build_release.sh I do
 sudo cp ${HOME}/freertos-tn/examples/imx7d_pico_m4/demo_apps/hello_world/armgcc/release/hello_world.bin
/media/neuberfran/boot
 ls mmc 0:1 (result command in U-boot)
 10572   hello_world.bin

  then:
=> fatload mmc 0:1 0x7F8000 hello_world.bin (with issue) 
   ** Reading file would overwrite reserved memory **
   Failed to load 'hello_world.bin 
=> dcache flush (I can't)
=> bootaux 0x7F8000 (I can't)

我用这个正确地生成了我的图像 Yocto-hardknott-technexion:

$ mkdir tn-imx-yocto
$ cd tn-imx-yocto
$ repo init -u https://github.com/TechNexion/tn-imx-yocto-manifest.git -b hardknott_5.10.y-next -m imx-5.10.52-2.1.0.xml
$ repo sync -j8
$ DISTRO=fsl-imx-x11 MACHINE=pico-imx7 BASEBOARD=pi source tn-setup-release.sh -b build-x11-pico-imx7
$ bitbake core-image-base

imx7d-pico-pi-qca-m4.dts

#include "imx7d-pico-pi-qca.dts"

/ {
    memory {
        linux,usable-memory = <0x80000000 0x1ff00000>;
    };

    m4_tcm: tcml@007f8000 {
        compatible = "fsl, m4_tcml";
        reg = <0x007f8000 0x8000>;
    };

    gpio-leds {
        status = "disabled";
    };
};

&adc1 {
    status = "disabled";
};

&adc2 {
    status = "disabled";
};

&gpt3 {
    status = "disabled";
};

&gpt4 {
    status = "disabled";
};

&ocram {
    reg = <0x00901000 0xf000>;
};

&rpmsg{
    vdev-nums = <1>;
    reg = <0x9fff0000 0x10000>;
    status = "okay";
};

&uart6 {
    status = "disabled";
};

&wdog3{
    status = "disabled";

微微imx7.conf

#@TYPE: Machine
#@NAME: pico-imx7
#@SOC: i.MX7/Solo/Dual/UtraLowPower
#@DESCRIPTION: Machine configuration for PICO-IMX7 with QCA(Qualcomm)/BRCM(Broadcom) WLAN module
#@MAINTAINER: Po Cheng <po.cheng@technexion.com>

MACHINEOVERRIDES =. "mx7:mx7d:"
MACHINEOVERRIDES_EXTENDER_pico-imx7 = "uenv"

include conf/machine/include/imx-base.inc
include conf/machine/include/tune-cortexa7.inc
require conf/machine/tn-base.inc

#
# Kernel Device Trees
#
PREFERRED_PROVIDER_virtual/kernel ?= "linux-tn-imx"
PREFERRED_PROVIDER_virtual/kernel_mx7 = "linux-tn-imx"

KERNEL_DEVICETREE = "imx7d-pico-pi-qca.dtb" 
#                         imx7d-pico-pi-m4.dtb \
#"
KERNEL_DEVICETREE_append = " imx7d-pico-pi-m4.dtb"
#                    imx7d-pico-pi.dtb \
#                     imx7d-pico-pi-c2-qca.dtb imx7d-pico-pi-c2.dtb \
#                     imx7d-pico-nymph-qca.dtb imx7d-pico-nymph.dtb \
#                     imx7d-pico-dwarf-qca.dtb imx7d-pico-dwarf.dtb \
#                     imx7d-pico-hobbit-qca.dtb imx7d-pico-hobbit.dtb \
#"

# Setup the additional devicetree file
#KERNEL_DEVICETREE_append_voicehat = " imx7d-pico-pi-qca-voicehat.dtb \
#                                      imx7d-pico-pi-voicehat.dtb \
#                                      imx7d-pico-pi-c2-qca-voicehat.dtb \
#                                      imx7d-pico-pi-c2-voicehat.dtb "

# Bootloader Specifics
UBOOT_MACHINE = "pico-imx7d_spl_defconfig"

#M4_MACHINE = "pico-imx7d-pi"
#IMAGE_BOOTFILES_DEPENDS += "imx-m4-demos-tn:do_deploy"
#IMAGE_BOOTFILES += "hello_world.bin rpmsg_lite_pingpong_rtos_linux_remote.bin rpmsg_lite_str_echo_rtos_imxcm4.bin"

在 U-boot printenv 命令中,目前我对 m4 和 tcm

一无所知
printenv                                
arch=arm
baseboard=pi
baudrate=115200
board=pico-imx7d
board_name=pico-imx7d
boot_fdt=try
bootcmd=mmc dev ${mmcdev}; if mmc rescan; then if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadbootscript; then run bootscript; fi; if run loadfit; then run fitboot; fi; if run loadimage; then run mmcboot; else echo WARN: Cannot load kernel from boot media; fi; else run netboot; fi
bootdelay=2
bootenv=uEnv.txt
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc4
cpu=armv7
default_baseboard=pi
fastboot_dev=mmc0
fbcmd=fastboot 0
fdt_addr=0x83000000
fdt_file=imx7d-pico-pi-qca-m4.dtb
fdt_high=0xffffffff
fdtcontroladdr=9cd62ed0
fit_addr=0x87880000
fit_high=0xffffffff
fit_overlay=for ov in ${dtoverlay}; do echo Overlaying ${ov}...; setenv fitov "${fitov}#${ov}"; done; echo fit conf: ${fdtfile}${fitov};
fitargs=setenv bootargs console=${console},${baudrate} root=/dev/ram0 rootwait rw modules-load=g_acm_ms g_acm_ms.stall=0 g_acm_ms.removable=1 g_acm_ms.file=${mmcrootdev} g_acm_ms.iSerialNumber=00:00:00:00:00:00 g_acm_ms.iManufacturer=TechNexion
fitboot=echo Booting from FIT image...; run searchbootdev; run setfdt; run fit_overlay; run fitargs; bootm ${fit_addr}#conf@${fdtfile}${fitov};
fitov=""
form=pico
image=zImage
importbootenv=echo Importing environment from mmc ...; env import -t -r $loadaddr $filesize
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x80800000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdtfile}
loadfit=fatload mmc ${mmcdev}:${mmcpart} ${fit_addr} tnrescue.itb
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot} 
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run m4boot; run searchbootdev; run mmcargs; echo baseboard is ${baseboard}; run setfdt; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then echo WARN: Cannot load the DT; echo fall back to load the default DT; setenv baseboard ${default_baseboard}; run setfdt; run loadfdt; bootz ${loadaddr} - ${fdt_addr}; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcdev=0
mmcpart=1
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; run loadbootenv; run importbootenv; run setfdt; run netargs; ${get_cmd} ${loadaddr} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdtfile}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
script=boot.scr
searchbootdev=if test ${bootdev} = SD0; then setenv mmcrootdev /dev/mmcblk2; setenv mmcroot /dev/mmcblk2p2 rootwait rw; else setenv mmcrootdev /dev/mmcblk0; setenv mmcroot /dev/mmcblk0p2 rootwait rw; fi
serial#=0091ceb8deadbeef
setfdt=if test -n ${wifi_module} && test ${wifi_module} = qca; then setenv fdtfile ${som}-${form}-${baseboard}-${wifi_module}${mcu}.dtb; else setenv fdtfile ${som}-${form}-${baseboard}${mcu}.dtb;fi
soc=mx7
soc_type=imx7d
som=imx7d
splashimage=0x8c000000
splashpos=m,m
splashsource=mmc_fs
stdout=serial
update_m4_from_sd=if sf probe 0:0; then if run loadm4image; then setexpr fw_sz ${filesize} + 0xffff; setexpr fw_sz ${fw_sz} / 0x10000; setexpr fw_sz ${fw_sz} * 0x10000; sf erase 0x0 ${fw_sz}; sf write ${loadaddr} 0x0 ${filesize}; fi; fi
vendor=technexion
wifi_module=qca

Environment size: 3808/8188 bytes

我该如何解决这个问题? (请)

I solved with two changes in device-tree files:

in imx7d.dtsi
I put status = "okay";
in rpmsg: rpmsg{

in imx7d-pico-pi-qca-m4.dts
I put:

reserved-memory {
        rpmsg_vrings: vrings0@0x8ff00000 {
            reg = <0x8fff0000 0x10000>;
            no-map;
        };
    };

&

&rpmsg{
    memory-region = <&rpmsg_vrings>;
    vdev-nums = <1>;
    reg = <0x9fff0000 0x10000>;
    status = "okay";
};