This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-AM64B:与通过 Linux 在 R5内核上运行 LED 闪烁示例相关的查询

Guru**** 1774980 points
Other Parts Discussed in Thread: TPS650861
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1340883/sk-am64b-query-related-to-running-led-blink-example-on-r5-core-through-linux

器件型号:SK-AM64B

团队成员您好

我能够 使用 remoteproc 命令在 R5_0_0内核上运行 LED 闪烁示例。
为此、我使用了 mcu_plus_sdk_am64x_09_01_00_41 SDK。  https://dev.ti.com/tirex/explore/node?node=A__Acm3ikTTJ1WqHgJWiJz0tA__AM64-ACADEMY__WI1KRXP__LATEST 页面中提到的步骤之外、还可以下载 TPS650861器件。

我正在运行/lib/firmware 文件夹中的所有命令。 我必须执行以下步骤:

a. 删除文件夹中的现有.out (如果有任何同名)。  

b.将最新的.out 复制到工作文件夹

c.使用  标题/sys/class/remoteproc/remoteproc */名称 组件。 在本例中、它是针对 R5_0_0的 remoteproc1。

d.使用更新符号链接 ln -SF GPIO_LED_BLINK .OUT am64-main-r5f0_0-FW 命令

e.运行命令   echo gpio_LED_blink.out >/sys/class/remoteproc/remoteproc1/firmware

f.运行命令 回声开始>/sys/class/remoteproc/remoteproc1/state

注: 如果启动不起作用(发生这种情况是因为 LED 闪烁程序在每次重新启动时自动开始运行)。 我删除了 输出 和  am64-main-r5f0_0-FW  /lib/firmware 文件夹中的文件

然后重新启动设备并按顺序执行上述命令。 这起作用了。

链接器文件已按照 YouTube 视频 https://www.youtube.com/watch?v=VuJLyO5R2yM 中提到的指令进行更新。 请参阅以下步骤:

可能不需要步骤4、因为我能够使用&不进行剥离来运行.out 文件。


我有以下问题:

A.我是 运行我们在 SDK 中编译的 LED 闪烁示例、 MCU_PLUS_SDK_am64x_09_00_00_35。 除了链接器文件是根据 dev.ti.com/.../node 中的说明创建的外、我已经完成了上面工作项目中完成的所有更改。 我将附加以下链接器文件。 我认为与链接器文件有关。 您能否浏览链接器文件并告诉我吗?

B.军械带命令的重要性。 它到底有什么作用?

c.重新启动后、程序会在 R5内核上自动启动。 是否仅在执行 remoteproc 命令时才可以开始执行?

谢谢

阿美

PS:当我遇到上传问题时、会附加链接器文件作为单独的消息

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    /* This is the stack that is used by code running within main()
     * In case of NORTOS,
     * - This means all the code outside of ISR uses this stack
     * In case of FreeRTOS
     * - This means all the code until vTaskStartScheduler() is called in main()
     *   uses this stack.
     * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack
     */
    --stack_size=16384
    /* This is the heap size for malloc() API in NORTOS and FreeRTOS
     * This is also the heap used by pvPortMalloc in FreeRTOS
     */
    --heap_size=32768
    -e_vectors  /* This is the entry of the application, _vector MUST be plabed starting address 0x0 */
    
    /* This is the size of stack when R5 is in IRQ mode
     * In NORTOS,
     * - Here interrupt nesting is enabled
     * - This is the stack used by ISRs registered as type IRQ
     * In FreeRTOS,
     * - Here interrupt nesting is disabled
     * - This is stack that is used initally when a IRQ is received
     * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks
     * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more
     */
    __IRQ_STACK_SIZE = 256;
    /* This is the size of stack when R5 is in IRQ mode
     * - In both NORTOS and FreeRTOS nesting is disabled for FIQ
     */
    __FIQ_STACK_SIZE = 256;
    __SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */
    __ABORT_STACK_SIZE = 256;  /* This is the size of stack when R5 is in ABORT mode */
    __UNDEFINED_STACK_SIZE = 256;  /* This is the size of stack when R5 is in UNDEF mode */
    
    SECTIONS
    {
        /* This has the R5F entry point and vector table, this MUST be at 0x0 */
        .vectors:{} palign(8) > R5F_VECS
    
        /* This has the R5F boot code until MPU is enabled,  this MUST be at a address < 0x80000000
         * i.e this cannot be placed in DDR
         */
        GROUP {
            .text.hwi: palign(8)
            .text.cache: palign(8)
            .text.mpu: palign(8)
            .text.boot: palign(8)
            .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */
        } > MSRAM
    
        /* This is rest of code. This can be placed in DDR if DDR is available and needed */
        GROUP {
            .text:   {} palign(8)   /* This is where code resides */
            .rodata: {} palign(8)   /* This is where const's go */
        } > MSRAM
    
        /* This is rest of initialized data. This can be placed in DDR if DDR is available and needed */
        GROUP {
            .data:   {} palign(8)   /* This is where initialized globals and static go */
        } > MSRAM
    
        /* This is rest of uninitialized data. This can be placed in DDR if DDR is available and needed */
        GROUP {
            .bss:    {} palign(8)   /* This is where uninitialized globals go */
            RUN_START(__BSS_START)
            RUN_END(__BSS_END)
            .sysmem: {} palign(8)   /* This is where the malloc heap goes */
            .stack:  {} palign(8)   /* This is where the main() stack goes */
        } > MSRAM
    	
    	/* add the resource table */
        GROUP {
            /* This is the resource table used by linux to know where the IPC "VRINGs" are located */
            .resource_table: {} palign(4096)
        } > DDR_0
    
    
        /* This is where the stacks for different R5F modes go */
        GROUP {
            .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8)
            RUN_START(__IRQ_STACK_START)
            RUN_END(__IRQ_STACK_END)
            .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8)
            RUN_START(__FIQ_STACK_START)
            RUN_END(__FIQ_STACK_END)
            .svcstack: {. = . + __SVC_STACK_SIZE;} align(8)
            RUN_START(__SVC_STACK_START)
            RUN_END(__SVC_STACK_END)
            .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8)
            RUN_START(__ABORT_STACK_START)
            RUN_END(__ABORT_STACK_END)
            .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8)
            RUN_START(__UNDEFINED_STACK_START)
            RUN_END(__UNDEFINED_STACK_END)
        } > MSRAM
    
        /* Sections needed for C++ projects */
        GROUP {
            .ARM.exidx:  {} palign(8)   /* Needed for C++ exception handling */
            .init_array: {} palign(8)   /* Contains function pointers called before main */
            .fini_array: {} palign(8)   /* Contains function pointers called after main */
        } > MSRAM
    
        /* General purpose user shared memory, used in some examples */
        .bss.user_shared_mem (NOLOAD) : {} > USER_SHM_MEM
        /* this is used when Debug log's to shared memory are enabled, else this is not used */
        .bss.log_shared_mem  (NOLOAD) : {} > LOG_SHM_MEM
        /* this is used only when IPC RPMessage is enabled, else this is not used */
        .bss.ipc_vring_mem   (NOLOAD) : {} > RTOS_NORTOS_IPC_SHM_MEM
        /* General purpose non cacheable memory, used in some examples */
        .bss.nocache (NOLOAD) : {} > NON_CACHE_MEM
    }
    
    /*
    NOTE: Below memory is reserved for DMSC usage
     - During Boot till security handoff is complete
       0x701E0000 - 0x701FFFFF (128KB)
     - After "Security Handoff" is complete (i.e at run time)
       0x701F4000 - 0x701FFFFF (48KB)
    
     Security handoff is complete when this message is sent to the DMSC,
       TISCI_MSG_SEC_HANDOVER
    
     This should be sent once all cores are loaded and all application
     specific firewall calls are setup.
    */
    
    MEMORY
    {
        R5F_VECS  : ORIGIN = 0x00000000 , LENGTH = 0x00000040
        R5F_TCMA  : ORIGIN = 0x00000040 , LENGTH = 0x00007FC0
        R5F_TCMB0 : ORIGIN = 0x41010000 , LENGTH = 0x00008000
    
        /* memory segment used to hold CPU specific non-cached data, MAKE to add a MPU entry to mark this as non-cached */
        NON_CACHE_MEM : ORIGIN = 0x70060000 , LENGTH = 0x8000
    
        /* when using multi-core application's i.e more than one R5F/M4F active, make sure
         * this memory does not overlap with other R5F's
         */
        MSRAM     : ORIGIN = 0x70080000 , LENGTH = 0x40000
    	
        /* Resource table must be placed at the start of the "external code/data mem"
         * section that Linux allocates for the core.
         * R5F0_0 default allocation is at 0xa0100000
         */
        DDR_0     : ORIGIN = 0xa0100000 , LENGTH = 0x100000
    
        /* This section can be used to put XIP section of the application in flash, make sure this does not overlap with
         * other CPUs. Also make sure to add a MPU entry for this section and mark it as cached and code executable
         */
        FLASH     : ORIGIN = 0x60100000 , LENGTH = 0x80000
    
        /* shared memory segments */
        /* On R5F,
         * - make sure there is a MPU entry which maps below regions as non-cache
         */
        USER_SHM_MEM            : ORIGIN = 0x701D0000, LENGTH = 0x80
        LOG_SHM_MEM             : ORIGIN = 0x701D0000 + 0x80, LENGTH = 0x00004000 - 0x80
        RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0x701D4000, LENGTH = 0x0000C000
    }
    

     使用 09_00_00_35 SDK 的链接器文件 linker.cmd。 此文件已根据 dev.ti.com/.../node 上的说明进行修改

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     /* This is the stack that is used by code running within main()
      * In case of NORTOS,
      * - This means all the code outside of ISR uses this stack
      * In case of FreeRTOS
      * - This means all the code until vTaskStartScheduler() is called in main()
      *   uses this stack.
      * - After vTaskStartScheduler() each task created in FreeRTOS has its own stack
      */
    
     --stack_size=16384
    /* This is the heap size for malloc() API in NORTOS and FreeRTOS
    * This is also the heap used by pvPortMalloc in FreeRTOS
    */
     --heap_size=32768
    -e_vectors  /* This is the entry of the application, _vector MUST be placed starting address 0x0 */
    
    /* This is the size of stack when R5 is in IRQ mode
     * In NORTOS,
     * - Here interrupt nesting is enabled
     * - This is the stack used by ISRs registered as type IRQ
     * In FreeRTOS,
     * - Here interrupt nesting is enabled
     * - This is stack that is used initally when a IRQ is received
     * - But then the mode is switched to SVC mode and SVC stack is used for all user ISR callbacks
     * - Hence in FreeRTOS, IRQ stack size is less and SVC stack size is more
     */
    __IRQ_STACK_SIZE = 256;
    /* This is the size of stack when R5 is in IRQ mode
     * - In both NORTOS and FreeRTOS nesting is disabled for FIQ
     */
    __FIQ_STACK_SIZE = 256;
    __SVC_STACK_SIZE = 4096; /* This is the size of stack when R5 is in SVC mode */
    __ABORT_STACK_SIZE = 256;  /* This is the size of stack when R5 is in ABORT mode */
    __UNDEFINED_STACK_SIZE = 256;  /* This is the size of stack when R5 is in UNDEF mode */
    
    
    
    SECTIONS
    {
        .vectors  : {
        } > R5F_VECS   , palign(8) 
    
    
        GROUP  :   {
        .text.hwi : {
        } palign(8)
        .text.cache : {
        } palign(8)
        .text.mpu : {
        } palign(8)
        .text.boot : {
        } palign(8)
        .text:abort : {
        } palign(8)
        } > R5F_TCMA  
    
    
        GROUP  :   {
        .text : {
        } palign(8)
        .rodata : {
        } palign(8)
        } > DDR_1  
    
    
        GROUP  :   {
        .data : {
        } palign(8)
        } > DDR_1  
    
    
        GROUP  :   {
        .bss : {
        } palign(8)
        RUN_START(__BSS_START)
        RUN_END(__BSS_END)
        .sysmem : {
        } palign(8)
        .stack : {
        } palign(8)
        } > DDR_1  
    
    
        GROUP  :   {
        .irqstack : {
            . = . + __IRQ_STACK_SIZE;
        } align(8)
        RUN_START(__IRQ_STACK_START)
        RUN_END(__IRQ_STACK_END)
        .fiqstack : {
            . = . + __FIQ_STACK_SIZE;
        } align(8)
        RUN_START(__FIQ_STACK_START)
        RUN_END(__FIQ_STACK_END)
        .svcstack : {
            . = . + __SVC_STACK_SIZE;
        } align(8)
        RUN_START(__SVC_STACK_START)
        RUN_END(__SVC_STACK_END)
        .abortstack : {
            . = . + __ABORT_STACK_SIZE;
        } align(8)
        RUN_START(__ABORT_STACK_START)
        RUN_END(__ABORT_STACK_END)
        .undefinedstack : {
            . = . + __UNDEFINED_STACK_SIZE;
        } align(8)
        RUN_START(__UNDEFINED_STACK_START)
        RUN_END(__UNDEFINED_STACK_END)
        } > DDR_1  
    
    
        GROUP  :   {
        .ARM.exidx : {
        } palign(8)
        .init_array : {
        } palign(8)
        .fini_array : {
        } palign(8)
        } > DDR_1  
    
        .bss.user_shared_mem (NOLOAD) : {
        } > USER_SHM_MEM    
    
        .bss.log_shared_mem (NOLOAD) : {
        } > LOG_SHM_MEM    
    
        .bss.ipc_vring_mem (NOLOAD) : {
        } > RTOS_NORTOS_IPC_SHM_MEM    
    
    
        GROUP  :   {
        .resource_table : {
        } palign(4096)
        } > DDR_0  
    
    
    }
    
    
    MEMORY
    {
        R5F_VECS   : ORIGIN = 0x0 , LENGTH = 0x40 
        R5F_TCMA   : ORIGIN = 0x40 , LENGTH = 0x7FC0 
        R5F_TCMB0   : ORIGIN = 0x41010000 , LENGTH = 0x8000 
        MSRAM   : ORIGIN = 0x70080000 , LENGTH = 0x40000 
        FLASH   : ORIGIN = 0x60100000 , LENGTH = 0x80000 
        DDR_0   : ORIGIN = 0xA0100000 , LENGTH = 0x1000 
        DDR_1   : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000 
        LINUX_IPC_SHM_MEM   : ORIGIN = 0xA0000000 , LENGTH = 0x100000 
        USER_SHM_MEM   : ORIGIN = 0xA5000000 , LENGTH = 0x80 
        LOG_SHM_MEM   : ORIGIN = 0xA5000080 , LENGTH = 0x3F80 
        RTOS_NORTOS_IPC_SHM_MEM   : ORIGIN = 0xA5004000 , LENGTH = 0xC000 
    
        /* For memory Regions not defined in this core but shared by other cores with the current core */
    
    
    }
    

    使用 09_01_00_41 SDK 的 linker.cmd。 该文件是根据 YouTube 视频中的引用创建的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    主题专家不在办公室 、将在 本周结束时与您联系。

    此致、
    克鲁纳尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    除上述查询之外。 我将添加与同一主题相关的另一个查询。

    当我从 Linux 运行 LED 闪烁示例时、在 R5内核上按预期(使用 SDK 09_01_00_41)工作。

    但当我运行 I2C LED 示例时、这些 LED (连接到 IO 扩展器)只是保持亮起状态、没有按预期闪烁/闪烁。 我认为它与从 Linux 运行时的中断处理有关。 我不是很确定。 请让我知道那里出了什么问题?

    谢谢

    阿美

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amey、您好!

    由于我周五再次度假、此回复需要简短。 我会在下周回复的。

    引导远程内核的说明  

    默认情况下、具有 SPL 引导功能的 AM64x Linux SDK 在 Linux 引导期间引导远程内核。 请参阅此处:
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AdAyuKWUWVV5j4wBc7C6XA__AM64-ACADEMY__WI1KRXP__LATEST

    您只需在 sysfs 界面中更新固件名称、
    /sys/class/remoteproc/remoteproc1/firmware

    符号链接中的固件名称将
    ln -SF GPIO_LED_BLINK .OUT am64-main-r5f0_0-FW

    您不需要同时执行两种操作。 请参阅上面链接的页面。

    我尚未观看 Youtube 视频、但它可能相对于我在 SDK 9.0上测试的 AM64x Academy 而言已过时。 (注意!!! SDK 9.1与 SDK 9.0之间有一些明显的变化、因此我还没有时间更新 SDK 9.1的 Academy 页面。 未来的客户、请参阅 amey 的上一个主题、了解详情: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1323865/sk-am64b-syscfg-ti_drivers_config-o-build-errors-while-trying-to-build-led-blink-example-with-ipc

    臂条  

    我不熟悉这个命令。 我想它存在于您引用的视频中吗? 如果您告诉我时间戳、我可以快速看一下。

    在执行 Linux 命令之前、我是否可以阻止内核执行?  

    是的。

    这里有多个选项。 程序最简单的方法可能是在引导期间加载 MCU+代码、但向 MCU+代码添加一个 while ()循环、等待直到 Linux 应用程序发送 RPMsg 告知 MCU+代码开始执行。

    还应该有一个选项、用于在 Linux devicetree 文件中禁用远程内核并从终端手动启动内核、 不过,我有数年没有这样做,所以我不能很好地描述在这个时候该怎么做。

    快速查看 linker.cmd 文件、  

    在快速扫描时、我看到 linker.cmd 文件之间的最大区别是您的 SDK 9.1 linker.cmd 文件在 DDR (DDR_1)中放置了大量数据、而您的 SDK 9.0 linker.cmd 文件将这些数据放置在 MSRAM 中。 您可以检查.map 文件(在.out 文件旁边生成)以查看使用的存储器是否多于为 linker.cmd 文件中的数据段分配的存储器。

    您还会注意到资源表的分配大小存在差异-这是正常情况。 出于某种原因、SDK 9.0 (仅限 AM64x SDK 9.0)要求资源表分配为1MB、即使资源表只占用4KB。 SDK 9.1返回到先前的行为、即4KB 资源表只需要4KB 分配。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Nick 的回复。

    如果您给我一个时间戳,我可以快速看一下。

    我已在上面的第一篇文章中附上 YouTube 视频中显示的 ppt 的屏幕截图。  在上图中、您可以看到视频中共享此信息的时间戳。  

    虽然不需要运行此命令、但我能够执行两个.out 文件(使用和不使用 armstrip 命令)、我只是想知道为什么需要它。  

    我将查看.map 文件。  

    请 随时查看另一个查询(引用如下)

    从以上查询分离。 我正在添加与同一主题相关的另一个查询。

    谢谢

    阿美

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amey、您好!

    armstrip 命令

    啊,还可以。 在这种情况下、strip 命令会删除二进制文件中不需要运行程序的任何额外信息。

    我并不擅长 R5F 固件二进制文件的具体构建、因此在这里我只能讨论一般概念。 默认情况下、当我们使用"调试"配置文件构建远程内核二进制文件时(可能也是使用"发布"配置文件构建二进制文件时)、会在二进制文件中内置称为"符号"的其他信息、以及指令代码和数据代码。 https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/09_01_00_41/exports/docs/api_guide_am64x/CCS_PROJECTS_PAGE.html#autotoc_md417

    该"symbol"信息是一种支持 CCS 调试器将工程源代码与在远程内核上运行的编译二进制代码映射的信息。 如果希望能够在工程运行时使用 CCS 调试工程、则不需要去除符号数据。

    另一方面、如果您只是尝试使二进制文件系统占用尽可能少的空间、那么您可能需要去掉符号数据。 我还没有试验这个功能,所以我不知道你节省多少空间,因为去掉符号.

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amey、您好!

    当 Linux 在运行时、I2C 扩展器示例不工作  

    在 Linux 运行时、任何在 AM64x EVM 上使用 I2C 扩展器的 MCU+ SDK I2C 示例都可能不起作用。 我们目前正在调试 R5F PRU 以太网+ Linux 示例的类似问题、其中 R5F 和 Linux 都希望使用通过 Linux 控制的 I2C 扩展器连接的外设。

    正如我们在 AM64x 学院多核模块的"如何分配外设"页中所讨论的那样:
    https://dev.ti.com/tirex/explore/node?a=7qm9DIS__LATEST&node=A__AROmAnuFxeqz306G2XuoZw__AM64-ACADEMY__WI1KRXP__LATEST

    通常、每个外设都只能由单个软件实例控制。 因此、对于 AM64x EVM、I2C1应由 Linux 或其中一个 R5F 内核控制。 这是有问题的、因为我们将一组有用的信号分组到了同一个 I2C 实例中。

    实际上、我将在本周晚些时候与一些致力于网络用例的开发人员进行会面、看看他们是否能够解决这个问题。 但与此同时、R5F 内核最好使用一个不受 Linux 控制的 I2C 实例(或一个可在 Linux 中禁用而不会丢失关键的 Linux 功能的 I2C 实例)。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Nick

    感谢您对 armstrip 命令的回复。 有助于澄清问题

    I2C 示例使用 I2C1端口与 LED 进行通信、因为该端口在 EVK 中进行硬接线。 因此、 在 LED 示例中可能无法更改 I2C 端口、除非我通过用户扩展端口使用外部 I2C 芯片。

    我将看到我是否可以在 Linux 器件树中禁用 I2C1、从而解决该问题

    但假设 Linux 正在使用 I2C1、那么它会使用什么呢? 是否提供了对这些内容的引用?

    谢谢

    阿美

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amey、您好!

    您对最终设计有什么要求?

    如果您只是在寻找一个 LED 示例、而您不关心如何连接到 LED、那么我们还有一个使用 GPIO 信号来控制 LED 的示例:
    https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/09_01_00_41/exports/docs/api_guide_am64x/EXAMPLES_DRIVERS_GPIO_LED_BLINK.html

    如果您正在寻找通过 I2C 控制 LED 的示例、当然可以尝试在 Linux devicetree 中禁用 I2C1来查看会发生什么情况。 我本来打算这么做的、但后来我对 Linux 使用的所有不同信号(例如 SD 卡控制信号)都很紧张。 我不确定 Linux 是否会正常启动、或者如果存在问题(例如 SD 卡通信速率会降低)、Linux 是否会启动。

    或者现在、可以将设计的"I2C LED"部分与设计的其余部分分离开来。 然后、一旦您拥有了自己的自定义电路板、其中 Linux 和 R5F 内核均具有单独的 I2C 实例、您就可以将这两个项目组合到一个项目中。

    此致、

    尼克

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Nick

    我正在尝试学习多核开发。 尝试使用 I2C 示例只是一步而已。 在此测试过程中、我意识到 Linux 正在初始化它可以使用或不可以使用的外设。 在最终设计中、Linux 中可能不需要其中一个 I2C 和 SPI (不是 OSPI)。

    我将进行试用、如果需要、可在单独的主题中发帖

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Nick

    我在 DTS 文件中禁用 I2C1、并在 SD 卡中复制新编译的 dtb 文件。

    I2C 闪烁示例现在通过 remoteproc 在 Linux 中

    谢谢

    阿美

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amey、您好!

    很高兴听到一切都在为您服务! 如果出现其他问题、请随时创建新主题。

    此致、

    尼克