[BUG] RP2040 issues running OSTest

オープン
#19,253 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
静か
技術スタック
c

調査の方向性

まず、raspberrypi-pico、raspberrypi-pico-w、seeed-xiao-rp2040でusbnsh構成を使ってOSTestを再現し、waitpid周辺で報告されているハングと、その直前のtask_restartテストに焦点を当てます。ペイロードではソースファイルや専用のテストファイルは指定されていません。対象ボードでOSTestがハングせずに完了すれば完了とします。

索引モデルが issue の本文から書いたものです。

説明

Arch: arm Area: Applications Area: OS Components OS: Linux Type: Bug
Description / Steps to reproduce the issue

Discovered while running tests against v13.0.0 RC0:

raspberrypi-pico, raspberrypi-pico-w and seeed-xiao-rp2040 all fail OSTest:

Here raspberrypi-pico:usbnsh failing by hanging:

NuttShell (NSH) NuttX-13.0.0
nsh> help
help usage:  help [-v] [<cmd>]

    .           cp          exit        mkrd        rmdir         set         truncate    
    ?           dirname     false       mv          kill        uname       
    alias       date        fdinfo      pidof       pkill       umount      
 
    basename    dmesg       help        ps          usleep      uptime      
    break       echo        hexdump     pwd         source      watch       
    cat         env         ls          reboot      test        xd          
    cd          exec        mkdir       rm          time        wait        

Builtin Apps:
    dd          getprime    hello       nsh         ostest      sh          
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
rite fdstdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4

user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988

Here is raspberrypi-pico-w:usbnsh failing (gets stuck at waitpid):

NuttShell (NSH) NuttX-13.0.0
nsh> 
nsh> ls
/:
 dev/
 proc/
nsh> help
help usage:  help [-v] [<cmd>]

    .           cp          exit        mkrd        rmdir          truncate    
      kill        uname       
    alias       date        fdinfo      pidof       pkill       umount      
    unalias     df          free        printf      sleep       unset       
    basename    dmesg       help        ps          usleep      uptime      
    break       echo        hexdump     pwd         source      watch       
    cat         env         ls          reboot      test        xd          
    cd          exec        mkdir       rm          time        wait        

Builtin Apps:
    dd          getprime    hello       nsh         ostest      sh          
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
 fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4

user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"

age:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988

user_main: getopt() test
getopt():  Simple test
getopt():  Invalid argument
getopt():  Missing optional argument
getopt_long():  Simple test
getopt_long():  No short options
getopt_long():  Argument for --option=argument
getopt_long():  Invalid long option
getopt_long():  Mixed long and short options
getopt_long():  Invalid short option
getopt_long():  Missing optional arguments
getopt_long_only():  Mixed long and short options
getopt_long_only():  Single hyphen long options

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988

user_main: libc tests

test memory usage:
LE  BEFORE======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        2
mxordblk    3a988    3a988
uordblks     4fd8     4fb8
fordblks    3a988    3a9a8
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value

End of test memory usage:
VARIABLE  BEFORE   AFTER
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4fb8     4f40
fordblks    3a9a8    3aa20

user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer

End of test memory usage:
VARIABLE  BEFORE   AFTER
====
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4f40     4f40
fordblks    3aa20    3aa20
user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null

End of test memory usage:
VARIABLE  BEFORE   AFTER
== ======== ========
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4f40     4f40
fordblks    3aa20    3aa20

user_main: task_restart test

Test task_restart()
restart_main: setenv(VarName, VarValue, TRUE)
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: I am still here
restart_main: I am still here
restart_main: Started restart_main at PID=5
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Started with argc=4
restart_main: argv[0]="ostest"
restart_main: argv[1]="This is argument 1"
restart_main: argv[2]="Argument 2 here"
restart_main: argv[3]="Lastly, the 3rd argument"
restart_main: Variable=VarName has value=VarValue
restart_main: Exiting

End of test memory usage:
VARIABLE  BEFORE   AFTER
=
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4f40     4f78
fordblks    3aa20    3a9e8

ser_main: waitpid test

seeed-xiao-rp2040:usbnsh also failing due to hang:

NuttShell (NSH) NuttX-13.0.0
nsh> help
help usage:  help [-v] [<cmd>]

    .           cp          exit        mkrd        rmdir         set         truncate    
    ?           dirname     false       mv          kill        uname       

    unalias     df          free        printf      sleep        ps          usleep      uptime      
    break       echo        hexdump     pwd         source      watch       
    cat         env         ls          reboot      test        xd          
    cd          exec        mkdir  wait        

Builtin Apps:
    dd          getprime    hello       nsh         ostest       
nsh> ostest
stdio_test: write fd=1
stdio_test: Standard I/O Check: printf
stdio_test: write fd=2
stdio_test: Standard I/O Check: fprintf to stderr
ostest_main: putenv(Variable1=BadValue3)
ostest_main: setenv(Variable1, GoodValue1, TRUE)
ostest_main: setenv(Variable2, BadValue1, FALSE)
ostest_main: setenv(Variable2, GoodValue2, TRUE)
ostest_main: setenv(Variable3, GoodValue3, FALSE)
ostest_main: setenv(Variable3, BadValue2, FALSE)
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
ostest_main: Started user_main at PID=4

user_main: Begin argument test
user_main: Started with argc=5
user_main: argv[0]="ostest"
user_main: argv[1]="Arg1"
user_main: argv[2]="Arg2"
user_main: argv[3]="Arg3"
user_main: argv[4]="Arg4"

End of test memory usage:
  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988
user_main: getopt() test
getopt():  Simple test
getopt():  Invalid argument
getopt():  Missing optional argument
getopt_long():  Simple test
getopt_long():  No short options
getopt_long():  Argument for --option=argument
getopt_long():  Invalid long option
getopt_long():  Mixed long and short options
getopt_long():  Invalid short option
getopt_long():  Missing optional arguments
getopt_long_only():  Mixed long and short options
getopt_long_only():  Single hyphen long options

End of test memory usage:
VARIABLE  BEFORE   AFTER
=======
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988

user_main: libc tests

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        1
mxordblk    3a988    3a988
uordblks     4fd8     4fd8
fordblks    3a988    3a988
show_variable: Variable=Variable1 has value=GoodValue1
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has value=GoodValue2
show_variable: Variable=Variable3 has value=GoodValue3

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         1        2
mxordblk    3a988    3a988
uordblks     4fd8     4fb8
fordblks    3a988    3a9a8
show_variable: Variable=Variable1 has no value
show_variable: Variable=Variable2 has no value
show_variable: Variable=Variable3 has no value

End of test memory usage:
EFORE   AFTER
======== ======== ========
arena       3f960    3f960
or  2
mxordblk    3a988    3a988
uordblks     4fb8     4f40
fordblks    3a9a8    3aa20

user_main: setvbuf test
setvbuf_test: Test NO buffering
setvbuf_test: Using NO buffering
setvbuf_test: Test default FULL buffering
setvbuf_test: Using default FULL buffering
setvbuf_test: Test FULL buffering, buffer size 64
setvbuf_test: Using FULL buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer
setvbuf_test: Test LINE buffering, buffer size 64
setvbuf_test: Using LINE buffering, buffer size 64
setvbuf_test: Test FULL buffering, pre-allocated buffer
setvbuf_test: Using FULL buffering, pre-allocated buffer

End of test memory usage:
VARIABLE  BEFORE   AFTER
======== ======== ========
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4f40     4f40
fordblks    3aa20    3aa20

user_main: /dev/null test
dev_null: Read 0 bytes from /dev/null
dev_null: Wrote 1024 bytes to /dev/null

End of test memory usage:
VARIABLE ER
======== ======== ========
arena       3f960    3f960
ordblks         2        2
mxordblk    3a988    3a988
uordblks     4f40     4f40
fordblks    3aa20    3aa20
On which OS does this issue occur?

[OS: Linux]

What is the version of your OS?

Linux 7.0.13-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 23 Jun 2026 11:14:21 +0000 x86_64 GNU/Linux

NuttX Version

nuttx-13.0.0-RC0

Issue Architecture

[Arch: arm]

Issue Area

[Area: OS Components], [Area: Applications]

Host information

No response

Verification
  • I have verified before submitting the report.
主要言語
C
スター
4.1k
フォーク
1.8k
平均マージ
1日 3時間
マージ済み PR(30日)
833

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/nuttx のほかの issue

apache/nuttx の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。