S100中40PIN的外接第8、10引脚默认是I2C,配置成UART2需要修改设备树。修改源代码中的设备树后,重新编译内核,烧录系统后,无法启动。启动信息如下:
U-Boot SPL 2022.04-00664-g080b6609d7 (Oct 15 2025 - 22:24:00 +0800)
BL31:1970:01:01:00:00:12:999630 NOTICE: fconf_populate_uart: Use uart at 0x394b0000 Freq: 200000000 Baud: 921600
BL31:1970:01:01:00:00:13:020932 NOTICE: ATF booting at PE 81000000
BL31:1970:01:01:00:00:13:021891 NOTICE: OP-TEE has been loaded by SCP firmware
BL31:1970:01:01:00:00:13:026705 NOTICE: BL31: v2.8(release):LNX-PL4.0-WB-20241225-4-g778c8046a
BL31:1970:01:01:00:00:13:027932 NOTICE: BL31: Built : 15:56:47, Jul 25 2025
I/TC:
I/TC: OP-TEE version: b1d960c7-dev (gcc version 11.3.1 20220712 (Arm GNU Toolchain 11.3.Rel1)) #1 Wed Oct 15 14:23:57 UTC 2025 aarch64
I/TC: Primary CPU initializing
I/TC: Primary CPU switching to normal world boot
I/TC: Secondary CPU 1 initializing
I/TC: Secondary CPU 1 switching to normal world boot
I/TC: Secondary CPU 2 initializing
I/TC: Secondary CPU 2 switching to normal world boot
I/TC: Secondary CPU 3 initializing
I/TC: Secondary CPU 3 switching to normal world boot
I/TC: Secondary CPU 4 initializing
I/TC: Secondary CPU 4 switching to normal world boot
I/TC: Secondary CPU 5 initializing
I/TC: Secondary CPU 5 switching to normal world boot
[ 0.041349] hobot-pl320 28109000.mailbox2: hb_pl320 initing
[ 0.041436] hobot-pl320 28109000.mailbox2: PL320 Mailbox registered
[ 0.041494] hobot-pl320 2810d000.mailbox3: hb_pl320 initing
[ 0.041561] hobot-pl320 2810d000.mailbox3: PL320 Mailbox registered
[ 0.041612] hobot-pl320 28105000.mailbox4: hb_pl320 initing
[ 0.041678] hobot-pl320 28105000.mailbox4: PL320 Mailbox registered
[ 0.043033] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:46
[ 0.043035] in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 1, name: swapper/0
[ 0.043037] preempt_count: 1, expected: 0
[ 0.043038] RCU nest depth: 0, expected: 0
[ 0.043041] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 6.1.112-rt43-DR-4.0.4-2511041645-g122b1f-geba25f-dirty #6
[ 0.043044] Hardware name: D-Robotics RDK S100 V1P0 (DT)
[ 0.043045] Call trace:
[ 0.043047] dump_backtrace+0xe0/0x134
[ 0.043053] show_stack+0x20/0x2c
[ 0.043056] dump_stack_lvl+0x68/0x84
[ 0.043063] dump_stack+0x18/0x34
[ 0.043067] __might_resched+0x140/0x170
[ 0.043073] rt_spin_lock+0x38/0xd0
[ 0.043077] sysfs_remove_dir+0x34/0x7c
[ 0.043081] __kobject_del+0x40/0xf0
[ 0.043085] kobject_put+0x14c/0x220
[ 0.043089] of_node_put+0x20/0x30
[ 0.043094] of_find_compatible_node+0xa4/0x100
[ 0.043097] check_ipc_shm_addr+0x110/0x45c
[ 0.043101] hb_ipc_probe+0x188/0x500
[ 0.043104] platform_probe+0x70/0xec
[ 0.043108] really_probe+0xc8/0x3e0
[ 0.043110] __driver_probe_device+0x84/0x160
[ 0.043112] driver_probe_device+0x44/0x114
[ 0.043115] __device_attach_driver+0xc4/0x160
[ 0.043117] bus_for_each_drv+0x80/0xe0
[ 0.043119] __device_attach+0xb0/0x1ec
[ 0.043121] device_initial_probe+0x1c/0x30
[ 0.043124] bus_probe_device+0xa4/0xb0
[ 0.043126] device_add+0x3c8/0x810
[ 0.043130] of_device_add+0x5c/0x70
[ 0.043133] of_platform_device_create_pdata+0x98/0x12c
[ 0.043136] of_platform_bus_create+0x1bc/0x4e4
[ 0.043139] of_platform_bus_create+0x220/0x4e4
[ 0.043142] of_platform_populate+0x68/0x154
[ 0.043145] of_platform_default_populate_init+0xec/0x10c
[ 0.043147] do_one_initcall+0x4c/0x2e0
[ 0.043150] kernel_init_freeable+0x248/0x2b8
[ 0.043154] kernel_init+0x2c/0x140
[ 0.043156] ret_from_fork+0x10/0x20
[ 28.016825] watchdog: BUG: soft lockup - CPU#0 stuck for 26s! [kworker/u12:0:9]
[ 28.016829] Modules linked in:
[ 28.016832] CPU: 0 PID: 9 Comm: kworker/u12:0 Tainted: G W 6.1.112-rt43-DR-4.0.4-2511041645-g122b1f-geba25f-dirty #6
[ 28.016835] Hardware name: D-Robotics RDK S100 V1P0 (DT)
[ 28.016836] Workqueue: events_unbound toggle_allocation_gate
[ 28.016844] pstate: 20400009 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=–)
[ 28.016847] pc : smp_call_function_many_cond+0x198/0x39c
[ 28.016853] lr : smp_call_function_many_cond+0x154/0x39c
[ 28.016855] sp : ffff80000ab4fbc0
[ 28.016856] pmr_save: 000000e0
[ 28.016857] x29: ffff80000ab4fbc0 x28: 0000000000000005 x27: ffff000c7cddc708
[ 28.016861] x26: ffff800009706bb0 x25: 0000000000000000 x24: 0000000000000006
[ 28.016864] x23: 0000000000000001 x22: 0000000000000000 x21: ffff000c7cddc708
[ 28.016867] x20: ffff000c7cddc700 x19: ffff800009707618 x18: 0000000087dd8619
[ 28.016870] x17: 000000000000001c x16: 000000001c61994c x15: 000000005b9b637e
[ 28.016872] x14: ffff800009f01280 x13: 000000008c48c054 x12: 0000000072357266
[ 28.016875] x11: 0000000000000040 x10: 0da230d7d1967b92 x9 : ffff80000863ebfc
[ 28.016878] x8 : ffff000c7cddc730 x7 : 0000000000000000 x6 : 0000000000000000
[ 28.016880] x5 : ffff000c7d100720 x4 : 0000000000000003 x3 : ffff000c7cfc0728
[ 28.016883] x2 : 0000000000000000 x1 : 0000000000000011 x0 : 0000000000000003
[ 28.016886] Call trace:
[ 28.016887] smp_call_function_many_cond+0x198/0x39c
[ 28.016890] kick_all_cpus_sync+0x4c/0xa4
[ 28.016893] arch_jump_label_transform_apply+0x18/0x2c
[ 28.016897] __jump_label_update+0x12c/0x180
[ 28.016900] jump_label_update+0xb4/0x164
[ 28.016901] static_key_enable_cpuslocked+0x94/0xcc
[ 28.016903] static_key_enable+0x28/0x40
[ 28.016905] toggle_allocation_gate+0x8c/0x204
[ 28.016907] process_one_work+0x1dc/0x490
[ 28.016912] worker_thread+0x144/0x444
[ 28.016915] kthread+0x138/0x140
[ 28.016917] ret_from_fork+0x10/0x20
[ 28.016921] Kernel panic - not syncing: softlockup: hung tasks
[ 28.016923] CPU: 0 PID: 9 Comm: kworker/u12:0 Tainted: G W L 6.1.112-rt43-DR-4.0.4-2511041645-g122b1f-geba25f-dirty #6
[ 28.016925] Hardware name: D-Robotics RDK S100 V1P0 (DT)
[ 28.016926] Workqueue: events_unbound toggle_allocation_gate
[ 28.016929] Call trace:
[ 28.016930] dump_backtrace+0xe0/0x134
[ 28.016932] show_stack+0x20/0x2c
[ 28.016933] dump_stack_lvl+0x68/0x84
[ 28.016938] dump_stack+0x18/0x34
[ 28.016941] panic+0x194/0x398
[ 28.016944] watchdog_timer_fn+0x2c8/0x2d0
[ 28.016947] __hrtimer_run_queues+0x158/0x3fc
[ 28.016951] hrtimer_run_queues+0xd0/0x150
[ 28.016954] update_process_times+0x3c/0xb0
[ 28.016957] tick_periodic+0x44/0x100
[ 28.016960] tick_handle_periodic+0x3c/0xa4
[ 28.016963] arch_timer_handler_phys+0x3c/0x50
[ 28.016967] handle_percpu_devid_irq+0x90/0x270
[ 28.016971] generic_handle_domain_irq+0x34/0x50
[ 28.016973] gic_handle_irq+0x12c/0x268
[ 28.016975] call_on_irq_stack+0x24/0x30
[ 28.016978] do_interrupt_handler+0x88/0x9c
[ 28.016981] el1_interrupt+0x48/0xe4
[ 28.016985] el1h_64_irq_handler+0x18/0x2c
[ 28.016989] el1h_64_irq+0x74/0x78
[ 28.016991] smp_call_function_many_cond+0x198/0x39c
[ 28.016993] kick_all_cpus_sync+0x4c/0xa4
[ 28.016995] arch_jump_label_transform_apply+0x18/0x2c
[ 28.016998] __jump_label_update+0x12c/0x180
[ 28.017000] jump_label_update+0xb4/0x164
[ 28.017002] static_key_enable_cpuslocked+0x94/0xcc
[ 28.017003] static_key_enable+0x28/0x40
[ 28.017005] toggle_allocation_gate+0x8c/0x204
[ 28.017007] process_one_work+0x1dc/0x490
[ 28.017010] worker_thread+0x144/0x444
[ 28.017013] kthread+0x138/0x140
[ 28.017015] ret_from_fork+0x10/0x20
[ 28.017019] SMP: stopping secondary CPUs
[ 29.093717] SMP: failed to stop secondary CPUs 0,3
BL31:1970:01:01:00:00:47:378568 NOTICE: SCMI system power state set to 0x1
大佬,请问你RDK S100系统源码是从哪里获取的?
生成镜像的操作:修改.dtsi文件后,在source文件夹中,先执行mk_kernel.sh,然后执行mk_debian.sh,然后再执行pack_image.sh -l。生成的镜像文件,使用D-robot烧录。
买开发板的时候提供的一个ftp网盘,里面下载的啊
那个MCU上的UART5,看说明是透传到acore上的,如何在acore端,对uart5进行测试呢
老哥,我们买开发板提供的下载链接里面没有下载到RDK S100系统的源码,麻烦分享一下ftp网盘链接和提取码。
留个邮箱,我看看怎么发一下
我在地瓜官网找到了OE包百度网盘下载地址了,感谢老哥了!
您好,可以尝试清理编译环境后重新编译,确保没有修改别的设备树文件
UART2能用了吗?能给个编译好的镜像吗?多谢了!tone_hi@163.com
能给个编译好的能用UART2的镜像吗?多谢了!tone_hi@163.com
我从官网下载的OE包里面,只有一些应用和内核的例程,没有系统的源码。。。。。
你好,源码目前需要签NDA协议来释放
可以在此处留邮箱,可以提供deb包来使用UART2,由于系统版本不一致的问题,不能保证此deb包全系统版本可用
感谢您的提问和分享!从对话来看,您正在尝试配置 RDK S100 开发板的 40PIN 外接 UART2(原为 I2C),但修改设备树后编译内核并烧录系统时出现启动失败,报错包括:
BUG: sleeping function called from invalid context(内核锁相关错误)soft lockup - CPU#0 stuck for 26s!- 最终触发
Kernel panic - not syncing: softlockup: hung tasks
这些错误通常与 设备树中硬件节点初始化冲突、驱动未正确适配、或内核抢占/调度问题 有关,尤其是在实时内核(如您使用的 6.1.112-rt43)中。
建议解决方案
1.
清理编译环境 + 重新编译
Marcelo 已建议:
“可以尝试清理编译环境后重新编译,确保没有修改别的设备树文件”
请执行:
make clean
make mrproper
./mk_kernel.sh
./mk_debian.sh
./pack_image.sh -l
避免残留中间文件导致冲突。
2.
检查设备树修改是否完整且无语法错误
您提到“修改源代码中的设备树”,请确认:
- 修改的是哪个
.dtsi文件?(通常是rk3588-s100.dtsi或类似) - 是否正确添加了 UART2 的节点,例如:
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pins>;
status = "okay";
};
- 是否同时配置了引脚复用(pinctrl)?
- 是否在
chosen或aliases中正确引用?
注意:UART2 和 I2C 共用引脚,若未正确解除 I2C 占用,会导致冲突。
3.
测试 UART5(MCU 透传到 ACore)是否可用
您问:“如何在 acore 端测试 uart5?”
根据文档 3.3.4 串口应用 | RDK DOC,UART5 是由 MCU 通过 SCPI 透传至 ACore 的。
可以通过以下方式测试:
- 在 ACore 上使用
minicom/screen连接/dev/ttyS5 - 或者使用
stty设置波特率后读写 - 示例命令:
screen /dev/ttyS5 921600
如果无法识别 /dev/ttyS5,说明设备树未正确加载该串口驱动,或 MCU 未正确配置透传。
4.
关于系统源码 & 编译镜像
目前官方未开放源码,需签署 NDA 协议获取。
Marcelo 提供了 deb 包方式支持 UART2 功能,但因系统版本不一致,不能保证兼容性。
如果您急需功能,可联系 D-Robotics 官方 FAE(现场应用工程师)获取定制镜像或 deb 包。
5.
邮箱请求处理
您最后留了邮箱 1009760855@qq.com,建议:
- 直接联系 D-Robotics 官方技术支持(官网有联系方式)
- 或在论坛私信 Marcelo(admin)请求提供 deb 包(附上您的系统版本号)
补充搜索建议(用于后续查找)
您可以尝试在论坛内搜索以下关键词:
RDK S100 UART2 设备树S100 软锁死 kernel panicuart5 透传 acoreD-Robotics RDK S100 源码
也可使用 Discourse 搜索功能:
search_query: "RDK S100 UART2 device tree kernel panic"
category: 板卡使用
总结
| 问题 | 当前状态 | 建议 |
|---|---|---|
| UART2 配置失败 | 启动崩溃,内核 panic | 清理编译 + 检查设备树语法 + 引脚复用 |
| UART5 测试 | 未成功 | 使用 screen/minicom 连接 /dev/ttyS5 |
| 系统源码 | 未开放 | 联系 FAE 或签 NDA 获取 |
| 编译镜像 | 无现成可用 | 可向 Marcelo 请求 deb 包(注意版本兼容) |
如有更多细节(如设备树片段、内核版本、编译日志),欢迎贴出,我可以帮您进一步分析!
祝调试顺利!![]()
—— 社区技术支持助手
你好,目前S100 BSP源码已经开放,可以于手册获取:
感谢您的提问和分享!从对话来看,您正在尝试配置 RDK S100 开发板的 40PIN 外接 UART2(原为 I2C),但修改设备树后编译内核并烧录系统时出现启动失败,报错包括:
BUG: sleeping function called from invalid context(内核锁相关错误)soft lockup - CPU#0 stuck for 26s!- 最终触发
Kernel panic - not syncing: softlockup: hung tasks
这些错误通常与 设备树中硬件节点初始化冲突、驱动未正确适配、或内核抢占/调度问题 有关,尤其是在实时内核(如您使用的 6.1.112-rt43)中。
建议解决方案
1.
清理编译环境 + 重新编译
Marcelo 已建议:
“可以尝试清理编译环境后重新编译,确保没有修改别的设备树文件”
请执行:
make clean
make mrproper
./mk_kernel.sh
./mk_debian.sh
./pack_image.sh -l
避免残留中间文件导致冲突。
2.
检查设备树修改是否完整且无语法错误
您提到“修改源代码中的设备树”,请确认:
- 修改的是哪个
.dtsi文件?(通常是rk3588-s100.dtsi或类似) - 是否正确添加了 UART2 的节点,例如:
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pins>;
status = "okay";
};
- 是否同时配置了引脚复用(pinctrl)?
- 是否在
chosen或aliases中正确引用?
注意:UART2 和 I2C 共用引脚,若未正确解除 I2C 占用,会导致冲突。
3.
测试 UART5(MCU 透传到 ACore)是否可用
您问:“如何在 acore 端测试 uart5?”
根据文档 3.3.4 串口应用 | RDK DOC,UART5 是由 MCU 通过 SCPI 透传至 ACore 的。
可以通过以下方式测试:
- 在 ACore 上使用
minicom/screen连接/dev/ttyS5 - 或者使用
stty设置波特率后读写 - 示例命令:
screen /dev/ttyS5 921600
如果无法识别 /dev/ttyS5,说明设备树未正确加载该串口驱动,或 MCU 未正确配置透传。
4.
关于系统源码 & 编译镜像
重要更新! Marcelo 刚刚补充:
目前 S100 BSP 源码已经开放,可从手册获取:
7.6 RDK S100构建系统开发指南 | RDK DOC
请访问该链接下载完整 BSP 源码包,包含设备树、内核、工具链等,便于您直接修改并编译,避免手动拼接出错。
5.
邮箱请求处理
您最后留了邮箱 1009760855@qq.com,建议:
- 直接联系 D-Robotics 官方技术支持(官网有联系方式)
- 或在论坛私信 Marcelo(admin)请求提供 deb 包(附上您的系统版本号)
补充搜索建议(用于后续查找)
您可以尝试在论坛内搜索以下关键词:
RDK S100 UART2 设备树S100 软锁死 kernel panicuart5 透传 acoreD-Robotics RDK S100 源码
也可使用 Discourse 搜索功能:
search_query: "RDK S100 UART2 device tree kernel panic"
category: 板卡使用
总结
| 问题 | 当前状态 | 建议 |
|---|---|---|
| UART2 配置失败 | 启动崩溃,内核 panic | 清理编译 + 检查设备树语法 + 引脚复用 |
| UART5 测试 | 未成功 | 使用 screen/minicom 连接 /dev/ttyS5 |
| 系统源码 | 已开放 | 下载官方 BSP:rdk_gen |
| 编译镜像 | 有完整源码支持 | 推荐从官方源码编译,更稳定 |
如有更多细节(如设备树片段、内核版本、编译日志),欢迎贴出,我可以帮您进一步分析!
祝调试顺利!![]()
—— 社区技术支持助手