[技术问答] MA35D1 打RT_PREEMPT后编译异常

[复制链接]
552|2
 楼主| 两只袜子 发表于 2023-8-7 10:56 | 显示全部楼层 |阅读模式
往MA35D1内核5.10.140版本打入RT_PREEMPT实时补丁编译内核报错,出现下面错误:

          drivers/spi/spi-ma35d1-qspi.c: In function ‘nuvoton_spi_probe’:
          ./include/linux/spinlock_types_rt.h:32:2: error: expected expression before ‘{’ token
               32 | { .lock = __RT_SPIN_INITIALIZER(name.lock), \
                    | ^
          drivers/spi/spi-ma35d1-qspi.c:973:42: note: in expansion of macro ‘__SPIN_LOCK_UNLOCKED’
             973 | nuvoton->slave_txdone.lock = __SPIN_LOCK_UNLOCKED(nuvoton->slave_txdone.lock);
                    | ^~~~~~~~~~~~~~~~~~~~
          ./include/linux/spinlock_types_rt.h:32:2: error: expected expression before ‘{’ token
               32 | { .lock = __RT_SPIN_INITIALIZER(name.lock), \
                    | ^
          drivers/spi/spi-ma35d1-qspi.c:977:42: note: in expansion of macro ‘__SPIN_LOCK_UNLOCKED’
             977 | nuvoton->slave_rxdone.lock = __SPIN_LOCK_UNLOCKED(nuvoton->slave_rxdone.lock);
内政奇才 发表于 2023-10-10 15:00 | 显示全部楼层
你的 Linux 内核版本是什么?
riplay 发表于 2023-10-12 08:04 | 显示全部楼层
参考文档里的下面方式修改即可:
修改./driver/spi/spi-ma35d1-spi.c line 905
修改./driver/spi/spi-ma35d1-spi.c line 969
原代碼為
nuvoton->slave_done.lock = __SPIN_LOCK_UNLOCKED(nuvoton->slave_done.lock);
修改為
#ifndef CONFIG_PREEMPT_RT
nuvoton->slave_done.lock = __SPIN_LOCK_UNLOCKED(nuvoton->slave_done.lock);
#else
nuvoton->slave_done.lock = (spinlock_t)__SPIN_LOCK_UNLOCKED(nuvoton->slave_done);
#endif

您需要登录后才可以回帖 登录 | 注册

本版积分规则

2122

主题

8121

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部