Skip to content

[Bug] 开启DFS后正点原子潘多拉板载支持包编译错误 #11036

@LinuxMint-User

Description

@LinuxMint-User

RT-Thread Version

5.3.0

Hardware Type/Architectures

bsp/stm32/stm32l475-atk-pandora

Develop Toolchain

GCC

Describe the bug

环境

系统:Fedora 43 KDE
工具链:arm-none-eabi-gcc (Fedora 15.2.0-1.fc43) 15.2.0 && scons
使用python虚拟环境运行构建,python版本3.14.0

编译前修改

rtconfig.py:

import os

# toolchains options
ARCH = 'arm'
CPU = 'cortex-m4'
CROSS_TOOL = 'gcc'

# bsp lib config
BSP_LIBRARY_TYPE = None

if os.getenv('RTT_CC'):
    CROSS_TOOL = os.getenv('RTT_CC')
if os.getenv('RTT_ROOT'):
    RTT_ROOT = os.getenv('RTT_ROOT')

# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for Linux use /usr/bin
if CROSS_TOOL == 'gcc':
    PLATFORM = 'gcc'
    EXEC_PATH = '/usr/bin'
elif CROSS_TOOL == 'keil':
    PLATFORM = 'armcc'
    EXEC_PATH = '/usr/bin'  # Keil not available on Linux
elif CROSS_TOOL == 'iar':
    PLATFORM = 'iccarm'
    EXEC_PATH = '/usr/bin'  # IAR not available on Linux
elif CROSS_TOOL == 'llvm-arm':
    PLATFORM = 'llvm-arm'
    EXEC_PATH = '/usr/bin'  # Adjust if LLVM is installed elsewhere

if os.getenv('RTT_EXEC_PATH'):
    EXEC_PATH = os.getenv('RTT_EXEC_PATH')

BUILD = 'debug'

if PLATFORM == 'gcc':
    # toolchains
    PREFIX = 'arm-none-eabi-'
    CC = PREFIX + 'gcc'
    AS = PREFIX + 'gcc'
    AR = PREFIX + 'ar'
    CXX = PREFIX + 'g++'
    LINK = PREFIX + 'gcc'
    TARGET_EXT = 'elf'
    SIZE = PREFIX + 'size'
    OBJDUMP = PREFIX + 'objdump'
    OBJCPY = PREFIX + 'objcopy'

    DEVICE = ' -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections'
    CFLAGS = DEVICE + ' -Dgcc -fstack-usage -fdump-rtl-dfinish'
    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'

    CPATH = ''
    LPATH = ''

    if BUILD == 'debug':
        CFLAGS += ' -O0 -gdwarf-2 -g'
        AFLAGS += ' -gdwarf-2'
    else:
        CFLAGS += ' -O2'

    CXXFLAGS = CFLAGS

    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'

else:
    print('Unsupported platform: ' + PLATFORM)
    exit(1)

def dist_handle(BSP_ROOT, dist_dir):
    import sys
    cwd_path = os.getcwd()
    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
    from sdk_dist import dist_do_building
    dist_do_building(BSP_ROOT, dist_dir)

编译报错一:

scons: Reading SConscript files ...
Newlib version: 4.5.0
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build/applications/main.o
CC build/applications/samples/aht10_sample.o
CC build/applications/samples/pin_sample.o
CC build/board/CubeMX_Config/Src/stm32l4xx_hal_msp.o
CC build/board/board.o
CC build/board/ports/drv_qspi_flash.o
board/ports/drv_qspi_flash.c: In function 'rt_hw_qspi_flash_with_sfud_init':
board/ports/drv_qspi_flash.c:65:61: error: passing argument 5 of 'rt_hw_qspi_device_attach' from incompatible pointer type [-Wincompatible-pointer-types]
   65 |     rt_hw_qspi_device_attach("qspi1", "qspi10", RT_NULL, 4, w25qxx_enter_qspi_mode, RT_NULL);
      |                                                             ^~~~~~~~~~~~~~~~~~~~~~
      |                                                             |
      |                                                             void (*)(struct rt_qspi_device *)
In file included from board/ports/drv_qspi_flash.c:12:
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.h:20:135: note: expected 'void (*)(void)' but argument is of type 'void (*)(struct rt_qspi_device *)'
   20 |  *bus_name, const char *device_name, rt_base_t cs_pin, rt_uint8_t data_line_width, void (*enter_qspi_mode)(), void (*exit_qspi_mode)());
      |                                                                                    ~~~~~~~^~~~~~~~~~~~~~~~~~
board/ports/drv_qspi_flash.c:40:6: note: 'w25qxx_enter_qspi_mode' declared here
   40 | void w25qxx_enter_qspi_mode(struct rt_qspi_device *device)
      |      ^~~~~~~~~~~~~~~~~~~~~~
scons: *** [build/board/ports/drv_qspi_flash.o] Error 1
scons: building terminated because of errors.

编译报错二:

scons: Reading SConscript files ...
Newlib version: 4.5.0
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build/applications/main.o
CC build/applications/samples/aht10_sample.o
CC build/applications/samples/pin_sample.o
CC build/board/CubeMX_Config/Src/stm32l4xx_hal_msp.o
CC build/board/board.o
CC build/board/ports/drv_qspi_flash.o
CC build/board/ports/drv_sensors.o
CC build/kernel/components/dfs/dfs_v1/filesystems/devfs/devfs.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/ff.o
CC build/kernel/components/dfs/dfs_v1/filesystems/elmfat/ffunicode.o
CC build/kernel/components/dfs/dfs_v1/src/dfs.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_file.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_fs.o
CC build/kernel/components/dfs/dfs_v1/src/dfs_posix.o
CC build/kernel/components/drivers/core/device.o
CC build/kernel/components/drivers/i2c/dev_i2c_bit_ops.o
CC build/kernel/components/drivers/i2c/dev_i2c_core.o
CC build/kernel/components/drivers/i2c/dev_i2c_dev.o
CC build/kernel/components/drivers/ipc/completion_comm.o
CC build/kernel/components/drivers/ipc/completion_up.o
CC build/kernel/components/drivers/ipc/condvar.o
CC build/kernel/components/drivers/ipc/dataqueue.o
CC build/kernel/components/drivers/ipc/pipe.o
CC build/kernel/components/drivers/ipc/ringblk_buf.o
CC build/kernel/components/drivers/ipc/ringbuffer.o
CC build/kernel/components/drivers/ipc/waitqueue.o
CC build/kernel/components/drivers/ipc/workqueue.o
CC build/kernel/components/drivers/pin/dev_pin.o
CC build/kernel/components/drivers/sensor/v2/sensor.o
CC build/kernel/components/drivers/sensor/v2/sensor_cmd.o
CC build/kernel/components/drivers/serial/dev_serial.o
CC build/kernel/components/drivers/spi/dev_qspi_core.o
CC build/kernel/components/drivers/spi/dev_spi.o
CC build/kernel/components/drivers/spi/dev_spi_core.o
CC build/kernel/components/drivers/spi/dev_spi_flash_sfud.o
CC build/kernel/components/drivers/spi/sfud/src/sfud.o
CC build/kernel/components/drivers/spi/sfud/src/sfud_sfdp.o
CC build/kernel/components/finsh/cmd.o
CC build/kernel/components/finsh/msh.o
CC build/kernel/components/finsh/msh_file.o
CC build/kernel/components/finsh/msh_parse.o
CC build/kernel/components/finsh/shell.o
CC build/kernel/components/libc/compilers/common/cctype.o
CC build/kernel/components/libc/compilers/common/cstdlib.o
CC build/kernel/components/libc/compilers/common/cstring.o
CC build/kernel/components/libc/compilers/common/ctime.o
CC build/kernel/components/libc/compilers/common/cunistd.o
CC build/kernel/components/libc/compilers/common/cwchar.o
CC build/kernel/components/libc/compilers/newlib/syscalls.o
CC build/kernel/libcpu/arm/common/atomic_arm.o
CC build/kernel/libcpu/arm/common/div0.o
CC build/kernel/libcpu/arm/common/showmem.o
AS build/kernel/libcpu/arm/cortex-m4/context_gcc.o
CC build/kernel/libcpu/arm/cortex-m4/cpuport.o
CC build/kernel/src/clock.o
CC build/kernel/src/components.o
CC build/kernel/src/cpu_up.o
CC build/kernel/src/defunct.o
CC build/kernel/src/idle.o
CC build/kernel/src/ipc.o
CC build/kernel/src/irq.o
CC build/kernel/src/klibc/kerrno.o
CC build/kernel/src/klibc/kstdio.o
CC build/kernel/src/klibc/kstring.o
CC build/kernel/src/klibc/rt_vsnprintf_std.o
CC build/kernel/src/klibc/rt_vsscanf.o
CC build/kernel/src/kservice.o
CC build/kernel/src/mem.o
CC build/kernel/src/mempool.o
CC build/kernel/src/object.o
CC build/kernel/src/scheduler_comm.o
CC build/kernel/src/scheduler_up.o
CC build/kernel/src/thread.o
CC build/kernel/src/timer.o
CC build/libraries/HAL_Drivers/drv_common.o
CC build/packages/aht10-latest/samples/aht10_sample.o
CC build/packages/aht10-latest/src/aht10.o
CC build/packages/aht10-latest/src/sensor_asair_aht10.o
AS packages/stm32l4_cmsis_driver-latest/Source/Templates/gcc/startup_stm32l475xx.o
CC packages/stm32l4_cmsis_driver-latest/Source/Templates/system_stm32l4xx.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_comp.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cortex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_crc.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_crc_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cryp.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_cryp_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_dma.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_dma_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_exti.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_gpio.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_i2c.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_i2c_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_pwr.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_pwr_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_qspi.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rcc.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rcc_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_rng.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_spi.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_spi_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_uart.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_uart_ex.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_usart.o
CC packages/stm32l4_hal_driver-latest/Src/stm32l4xx_hal_usart_ex.o
CC /home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_gpio.o
CC /home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.o
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c: In function 'rt_hw_qspi_device_attach':
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c:326:34: error: assignment to 'void (*)(struct rt_qspi_device *)' from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types]
  326 |     qspi_device->enter_qspi_mode = enter_qspi_mode;
      |                                  ^
/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c:327:33: error: assignment to 'void (*)(struct rt_qspi_device *)' from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types]
  327 |     qspi_device->exit_qspi_mode = exit_qspi_mode;
      |                                 ^
scons: *** [/home/echan/documents/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.o] Error 1
scons: building terminated because of errors.

对编译报错一的修复

vim rt-thread/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_qspi_flash.c
// 添加适配函数
void w25qxx_enter_qspi_mode_adapter(void)
{
    struct rt_qspi_device *device = (struct rt_qspi_device *)rt_device_find("qspi10");
    if (device == RT_NULL)
    {
        rt_kprintf("QSPI device not found!\n");
        return;
    }
    w25qxx_enter_qspi_mode(device);
}

// 修改初始化函数
static int rt_hw_qspi_flash_with_sfud_init(void)
{
    rt_hw_qspi_device_attach("qspi1", "qspi10", RT_NULL, 4,
                             w25qxx_enter_qspi_mode_adapter, // 使用适配器
                             RT_NULL);
    // ... 其余代码不变
}

对编译报错二的修复

vim rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c
// 原代码:
qspi_device->enter_qspi_mode = enter_qspi_mode;
qspi_device->exit_qspi_mode = exit_qspi_mode;

// 修改为:
if (enter_qspi_mode != RT_NULL)
    qspi_device->enter_qspi_mode = (void (*)(struct rt_qspi_device *))enter_qspi_mode;
else
    qspi_device->enter_qspi_mode = RT_NULL;

if (exit_qspi_mode != RT_NULL)
    qspi_device->exit_qspi_mode = (void (*)(struct rt_qspi_device *))exit_qspi_mode;
else
    qspi_device->exit_qspi_mode = RT_NULL;

备注

关于核心驱动 drv_qspi.c 的修改,我并不清楚是否会影响其他板载支持包。关于该板载支持包 drv_qspi_flash.c 的修改,旧写法适配 RT-Thread 4.0.2 版本源码,我并不清楚该改动除了能在5.3.0版本上正常工作是否会影响其在其他版本的 RT-Thread 源码中工作。于是先提交 issue 以供讨论。

Other additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions