Skip to content

Instantly share code, notes, and snippets.

@lupyuen
Created May 4, 2024 01:51
Show Gist options
  • Save lupyuen/b2520054b5ecc12a2f33909aaa46121c to your computer and use it in GitHub Desktop.
Save lupyuen/b2520054b5ecc12a2f33909aaa46121c to your computer and use it in GitHub Desktop.
Apache NuttX RTOS on QEMU knsh64. See https://github.com/apache/nuttx/issues/12275
vscode ➜ /workspaces/bookworm $ cd /tmp
vscode ➜ /tmp $ mkdir nuttx
cd nuttx
git clone https://github.com/apache/nuttx nuttx
git clone https://github.com/apache/nuttx-apps apps
Cloning into 'nuttx'...
remote: Enumerating objects: 758847, done.
remote: Counting objects: 100% (177/177), done.
remote: Compressing objects: 100% (142/142), done.
remote: Total 758847 (delta 64), reused 120 (delta 31), pack-reused 758670
Receiving objects: 100% (758847/758847), 260.18 MiB | 3.46 MiB/s, done.
Resolving deltas: 100% (592339/592339), done.
Updating files: 100% (22091/22091), done.
Cloning into 'apps'...
remote: Enumerating objects: 83603, done.
remote: Counting objects: 100% (422/422), done.
remote: Compressing objects: 100% (269/269), done.
remote: Total 83603 (delta 184), reused 339 (delta 147), pack-reused 83181
Receiving objects: 100% (83603/83603), 21.47 MiB | 3.29 MiB/s, done.
Resolving deltas: 100% (67756/67756), done.
Updating files: 100% (4161/4161), done.
vscode ➜ /tmp/nuttx $ cd nuttx
./tools/configure.sh rv-virt:knsh64
Copy files
Select CONFIG_HOST_LINUX=y
Refreshing...
CP: arch/dummy/Kconfig to /tmp/nuttx/nuttx/arch/dummy/dummy_kconfig
CP: boards/dummy/Kconfig to /tmp/nuttx/nuttx/boards/dummy/dummy_kconfig
LN: platform/board to /tmp/nuttx/apps/platform/dummy
LN: include/arch to arch/risc-v/include
LN: include/arch/board to /tmp/nuttx/nuttx/boards/risc-v/qemu-rv/rv-virt/include
LN: drivers/platform to /tmp/nuttx/nuttx/drivers/dummy
LN: include/arch/chip to /tmp/nuttx/nuttx/arch/risc-v/include/qemu-rv
LN: arch/risc-v/src/chip to /tmp/nuttx/nuttx/arch/risc-v/src/qemu-rv
LN: arch/risc-v/src/board to /tmp/nuttx/nuttx/boards/risc-v/qemu-rv/rv-virt/src
mkkconfig in /tmp/nuttx/apps/audioutils
mkkconfig in /tmp/nuttx/apps/benchmarks
mkkconfig in /tmp/nuttx/apps/boot
mkkconfig in /tmp/nuttx/apps/canutils
mkkconfig in /tmp/nuttx/apps/crypto
mkkconfig in /tmp/nuttx/apps/database
mkkconfig in /tmp/nuttx/apps/examples/mcuboot
mkkconfig in /tmp/nuttx/apps/examples
mkkconfig in /tmp/nuttx/apps/fsutils
mkkconfig in /tmp/nuttx/apps/games
mkkconfig in /tmp/nuttx/apps/graphics
mkkconfig in /tmp/nuttx/apps/industry
mkkconfig in /tmp/nuttx/apps/inertial
mkkconfig in /tmp/nuttx/apps/interpreters/luamodules
mkkconfig in /tmp/nuttx/apps/interpreters
mkkconfig in /tmp/nuttx/apps/logging
mkkconfig in /tmp/nuttx/apps/lte
mkkconfig in /tmp/nuttx/apps/math
mkkconfig in /tmp/nuttx/apps/mlearning
mkkconfig in /tmp/nuttx/apps/netutils
mkkconfig in /tmp/nuttx/apps/sdr
mkkconfig in /tmp/nuttx/apps/system
mkkconfig in /tmp/nuttx/apps/testing
mkkconfig in /tmp/nuttx/apps/wireless/bluetooth
mkkconfig in /tmp/nuttx/apps/wireless/ieee802154
mkkconfig in /tmp/nuttx/apps/wireless
mkkconfig in /tmp/nuttx/apps
#
# configuration written to .config
#
vscode ➜ /tmp/nuttx/nuttx (master) $ make
Create version.h
LN: platform/board to /tmp/nuttx/apps/platform/dummy
Register: hello
Register: init
Register: sh
Register: getprime
Register: ostest
CPP: /tmp/nuttx/nuttx/boards/risc-v/qemu-rv/rv-virt/scripts/ld-kernel64.script-> /tmp/nuttx/nuttx/boards/rLD: nuttx
CP: nuttx.hex
vscode ➜ /tmp/nuttx/nuttx (master) $ make export
vscode ➜ /tmp/nuttx/nuttx (master) $ pushd ../apps
/tmp/nuttx/apps /tmp/nuttx/nuttx
vscode ➜ /tmp/nuttx/apps (master) $ ./tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz
vscode ➜ /tmp/nuttx/apps (master) $ make import
cc -O2 -Wall -Wstrict-prototypes -Wshadow -DHAVE_STRTOK_C=1 /tmp/nuttx/apps/import/tools/mkdeps.c -o /tmp/nuttx/apps/import/tools/mkdeps
cc -O2 -Wall -Wstrict-prototypes -Wshadow -DHAVE_STRTOK_C=1 /tmp/nuttx/apps/import/tools/incdir.c -o "/tmp/nuttx/apps/import/tools/incdir"
make[1]: Entering directory '/tmp/nuttx/apps'
make[2]: Entering directory '/tmp/nuttx/apps'
make[3]: Entering directory '/tmp/nuttx/apps/examples/hello'
make[3]: Leaving directory '/tmp/nuttx/apps/examples/hello'
make[3]: Entering directory '/tmp/nuttx/apps/nshlib'
make[3]: Leaving directory '/tmp/nuttx/apps/nshlib'
make[3]: Entering directory '/tmp/nuttx/apps/platform'
LN: platform/board to /tmp/nuttx/apps/platform/dummy
make[3]: Leaving directory '/tmp/nuttx/apps/platform'
make[3]: Entering directory '/tmp/nuttx/apps/system/nsh'
make[3]: Leaving directory '/tmp/nuttx/apps/system/nsh'
make[3]: Entering directory '/tmp/nuttx/apps/system/readline'
make[3]: Leaving directory '/tmp/nuttx/apps/system/readline'
make[3]: Entering directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Entering directory '/tmp/nuttx/apps/testing/ostest'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/ostest'
make[2]: Leaving directory '/tmp/nuttx/apps'
make[2]: Entering directory '/tmp/nuttx/apps'
make[3]: Entering directory '/tmp/nuttx/apps/examples/hello'
make[3]: Leaving directory '/tmp/nuttx/apps/examples/hello'
make[3]: Entering directory '/tmp/nuttx/apps/nshlib'
make[3]: Leaving directory '/tmp/nuttx/apps/nshlib'
make[3]: Entering directory '/tmp/nuttx/apps/platform'
make[3]: Leaving directory '/tmp/nuttx/apps/platform'
make[3]: Entering directory '/tmp/nuttx/apps/system/nsh'
make[3]: Leaving directory '/tmp/nuttx/apps/system/nsh'
make[3]: Entering directory '/tmp/nuttx/apps/system/readline'
make[3]: Leaving directory '/tmp/nuttx/apps/system/readline'
make[3]: Entering directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Entering directory '/tmp/nuttx/apps/testing/ostest'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/ostest'
make[2]: Leaving directory '/tmp/nuttx/apps'
make[2]: Entering directory '/tmp/nuttx/apps'
make[2]: Nothing to be done for 'context_wasm'.
make[2]: Leaving directory '/tmp/nuttx/apps'
make[1]: Leaving directory '/tmp/nuttx/apps'
make[1]: Entering directory '/tmp/nuttx/apps'
make[1]: Nothing to be done for 'register'.
make[1]: Leaving directory '/tmp/nuttx/apps'
make[1]: Entering directory '/tmp/nuttx/apps'
make[2]: Entering directory '/tmp/nuttx/apps/examples/hello'
make[2]: Leaving directory '/tmp/nuttx/apps/examples/hello'
make[2]: Entering directory '/tmp/nuttx/apps/nshlib'
make[2]: Leaving directory '/tmp/nuttx/apps/nshlib'
make[2]: Entering directory '/tmp/nuttx/apps/platform'
make[2]: Leaving directory '/tmp/nuttx/apps/platform'
make[2]: Entering directory '/tmp/nuttx/apps/system/nsh'
make[2]: Leaving directory '/tmp/nuttx/apps/system/nsh'
make[2]: Entering directory '/tmp/nuttx/apps/system/readline'
make[2]: Leaving directory '/tmp/nuttx/apps/system/readline'
make[2]: Entering directory '/tmp/nuttx/apps/testing/getprime'
make[2]: Leaving directory '/tmp/nuttx/apps/testing/getprime'
make[2]: Entering directory '/tmp/nuttx/apps/testing/ostest'
make[2]: Leaving directory '/tmp/nuttx/apps/testing/ostest'
make[1]: Leaving directory '/tmp/nuttx/apps'
make[1]: Entering directory '/tmp/nuttx/apps'
make[2]: Entering directory '/tmp/nuttx/apps/examples/hello'
make[2]: Leaving directory '/tmp/nuttx/apps/examples/hello'
make[2]: Entering directory '/tmp/nuttx/apps/nshlib'
cp nsh_alias.c.tmp.nuttx.apps.nshlib.o nsh_alias.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_command.c.tmp.nuttx.apps.nshlib.o nsh_command.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_console.c.tmp.nuttx.apps.nshlib.o nsh_console.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_consolemain.c.tmp.nuttx.apps.nshlib.o nsh_consolemain.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_dbgcmds.c.tmp.nuttx.apps.nshlib.o nsh_dbgcmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_ddcmd.c.tmp.nuttx.apps.nshlib.o nsh_ddcmd.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_envcmds.c.tmp.nuttx.apps.nshlib.o nsh_envcmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_fileapps.c.tmp.nuttx.apps.nshlib.o nsh_fileapps.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_fscmds.c.tmp.nuttx.apps.nshlib.o nsh_fscmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_fsutils.c.tmp.nuttx.apps.nshlib.o nsh_fsutils.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_init.c.tmp.nuttx.apps.nshlib.o nsh_init.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_mmcmds.c.tmp.nuttx.apps.nshlib.o nsh_mmcmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_mntcmds.c.tmp.nuttx.apps.nshlib.o nsh_mntcmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_parse.c.tmp.nuttx.apps.nshlib.o nsh_parse.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_printf.c.tmp.nuttx.apps.nshlib.o nsh_printf.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_proccmds.c.tmp.nuttx.apps.nshlib.o nsh_proccmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_prompt.c.tmp.nuttx.apps.nshlib.o nsh_prompt.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_script.c.tmp.nuttx.apps.nshlib.o nsh_script.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_session.c.tmp.nuttx.apps.nshlib.o nsh_session.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_syscmds.c.tmp.nuttx.apps.nshlib.o nsh_syscmds.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_system.c.tmp.nuttx.apps.nshlib.o nsh_system.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_test.c.tmp.nuttx.apps.nshlib.o nsh_test.c.tmp.nuttx.apps.nshlib_1.o
cp nsh_timcmds.c.tmp.nuttx.apps.nshlib.o nsh_timcmds.c.tmp.nuttx.apps.nshlib_1.o
make[2]: Leaving directory '/tmp/nuttx/apps/nshlib'
make[2]: Entering directory '/tmp/nuttx/apps/platform'
cp dummy.c.tmp.nuttx.apps.platform.o dummy.c.tmp.nuttx.apps.platform_1.o
make[2]: Leaving directory '/tmp/nuttx/apps/platform'
make[2]: Entering directory '/tmp/nuttx/apps/system/nsh'
make[2]: Leaving directory '/tmp/nuttx/apps/system/nsh'
make[2]: Entering directory '/tmp/nuttx/apps/system/readline'
cp readline.c.tmp.nuttx.apps.system.readline.o readline.c.tmp.nuttx.apps.system.readline_1.o
cp readline_common.c.tmp.nuttx.apps.system.readline.o readline_common.c.tmp.nuttx.apps.system.readline_1.o
cp readline_fd.c.tmp.nuttx.apps.system.readline.o readline_fd.c.tmp.nuttx.apps.system.readline_1.o
cp readline_stream.c.tmp.nuttx.apps.system.readline.o readline_stream.c.tmp.nuttx.apps.system.readline_1.o
make[2]: Leaving directory '/tmp/nuttx/apps/system/readline'
make[2]: Entering directory '/tmp/nuttx/apps/testing/getprime'
make[2]: Leaving directory '/tmp/nuttx/apps/testing/getprime'
make[2]: Entering directory '/tmp/nuttx/apps/testing/ostest'
cp barrier.c.tmp.nuttx.apps.testing.ostest.o barrier.c.tmp.nuttx.apps.testing.ostest_1.o
cp cancel.c.tmp.nuttx.apps.testing.ostest.o cancel.c.tmp.nuttx.apps.testing.ostest_1.o
cp cond.c.tmp.nuttx.apps.testing.ostest.o cond.c.tmp.nuttx.apps.testing.ostest_1.o
cp dev_null.c.tmp.nuttx.apps.testing.ostest.o dev_null.c.tmp.nuttx.apps.testing.ostest_1.o
CC: fpu.c fpu.c:55:8: warning: #warning "FPU test not built; Only available in the flat build (CONFIG_BUILD_FLAT)" [-Wcpp]
55 | # warning "FPU test not built; Only available in the flat build (CONFIG_BUILD_FLAT)"
| ^~~~~~~
cp fpu.c.tmp.nuttx.apps.testing.ostest.o fpu.c.tmp.nuttx.apps.testing.ostest_1.o
cp getopt.c.tmp.nuttx.apps.testing.ostest.o getopt.c.tmp.nuttx.apps.testing.ostest_1.o
cp libc_memmem.c.tmp.nuttx.apps.testing.ostest.o libc_memmem.c.tmp.nuttx.apps.testing.ostest_1.o
cp mqueue.c.tmp.nuttx.apps.testing.ostest.o mqueue.c.tmp.nuttx.apps.testing.ostest_1.o
cp mutex.c.tmp.nuttx.apps.testing.ostest.o mutex.c.tmp.nuttx.apps.testing.ostest_1.o
cp posixtimer.c.tmp.nuttx.apps.testing.ostest.o posixtimer.c.tmp.nuttx.apps.testing.ostest_1.o
cp pthread_exit.c.tmp.nuttx.apps.testing.ostest.o pthread_exit.c.tmp.nuttx.apps.testing.ostest_1.o
cp pthread_rwlock.c.tmp.nuttx.apps.testing.ostest.o pthread_rwlock.c.tmp.nuttx.apps.testing.ostest_1.o
cp pthread_rwlock_cancel.c.tmp.nuttx.apps.testing.ostest.o pthread_rwlock_cancel.c.tmp.nuttx.apps.testing.ostest_1.o
cp restart.c.tmp.nuttx.apps.testing.ostest.o restart.c.tmp.nuttx.apps.testing.ostest_1.o
cp robust.c.tmp.nuttx.apps.testing.ostest.o robust.c.tmp.nuttx.apps.testing.ostest_1.o
cp roundrobin.c.tmp.nuttx.apps.testing.ostest.o roundrobin.c.tmp.nuttx.apps.testing.ostest_1.o
cp schedlock.c.tmp.nuttx.apps.testing.ostest.o schedlock.c.tmp.nuttx.apps.testing.ostest_1.o
cp sem.c.tmp.nuttx.apps.testing.ostest.o sem.c.tmp.nuttx.apps.testing.ostest_1.o
cp semtimed.c.tmp.nuttx.apps.testing.ostest.o semtimed.c.tmp.nuttx.apps.testing.ostest_1.o
cp setvbuf.c.tmp.nuttx.apps.testing.ostest.o setvbuf.c.tmp.nuttx.apps.testing.ostest_1.o
cp sighand.c.tmp.nuttx.apps.testing.ostest.o sighand.c.tmp.nuttx.apps.testing.ostest_1.o
cp sighelper.c.tmp.nuttx.apps.testing.ostest.o sighelper.c.tmp.nuttx.apps.testing.ostest_1.o
cp signest.c.tmp.nuttx.apps.testing.ostest.o signest.c.tmp.nuttx.apps.testing.ostest_1.o
cp sigprocmask.c.tmp.nuttx.apps.testing.ostest.o sigprocmask.c.tmp.nuttx.apps.testing.ostest_1.o
cp timedmqueue.c.tmp.nuttx.apps.testing.ostest.o timedmqueue.c.tmp.nuttx.apps.testing.ostest_1.o
cp timedmutex.c.tmp.nuttx.apps.testing.ostest.o timedmutex.c.tmp.nuttx.apps.testing.ostest_1.o
cp timedwait.c.tmp.nuttx.apps.testing.ostest.o timedwait.c.tmp.nuttx.apps.testing.ostest_1.o
cp vfork.c.tmp.nuttx.apps.testing.ostest.o vfork.c.tmp.nuttx.apps.testing.ostest_1.o
cp waitpid.c.tmp.nuttx.apps.testing.ostest.o waitpid.c.tmp.nuttx.apps.testing.ostest_1.o
cp wqueue.c.tmp.nuttx.apps.testing.ostest.o wqueue.c.tmp.nuttx.apps.testing.ostest_1.o
make[2]: Leaving directory '/tmp/nuttx/apps/testing/ostest'
make[2]: Entering directory '/tmp/nuttx/apps'
make[3]: Entering directory '/tmp/nuttx/apps/examples/hello'
make[3]: Leaving directory '/tmp/nuttx/apps/examples/hello'
make[3]: Entering directory '/tmp/nuttx/apps/nshlib'
make[3]: Leaving directory '/tmp/nuttx/apps/nshlib'
make[3]: Entering directory '/tmp/nuttx/apps/platform'
make[3]: Leaving directory '/tmp/nuttx/apps/platform'
make[3]: Entering directory '/tmp/nuttx/apps/system/nsh'
make[3]: Leaving directory '/tmp/nuttx/apps/system/nsh'
make[3]: Entering directory '/tmp/nuttx/apps/system/readline'
make[3]: Leaving directory '/tmp/nuttx/apps/system/readline'
make[3]: Entering directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/getprime'
make[3]: Entering directory '/tmp/nuttx/apps/testing/ostest'
make[3]: Leaving directory '/tmp/nuttx/apps/testing/ostest'
make[2]: Leaving directory '/tmp/nuttx/apps'
make[1]: Leaving directory '/tmp/nuttx/apps'
vscode ➜ /tmp/nuttx/apps (master) $ popd
/tmp/nuttx/nuttx
vscode ➜ /tmp/nuttx/nuttx (master) $ qemu-system-riscv64 --version
QEMU emulator version 7.2.9 (Debian 1:7.2+dfsg-7+deb12u5)
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
vscode ➜ /tmp/nuttx/nuttx (master) $ qemu-system-riscv64 -nographic -semihosting -M virt,aclint=on -cpu rv64 -kernel nuttx
OpenSBI v1.1
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|
Platform Name : riscv-virtio,qemu
Platform Features : medeleg
Platform HART Count : 1
Platform IPI Device : aclint-mswi
Platform Timer Device : aclint-mtimer @ 10000000Hz
Platform Console Device : uart8250
Platform HSM Device : ---
Platform Reboot Device : sifive_test
Platform Shutdown Device : sifive_test
Firmware Base : 0x80000000
Firmware Size : 288 KB
Runtime SBI Version : 1.0
Domain0 Name : root
Domain0 Boot HART : 0
Domain0 HARTs : 0*
Domain0 Region00 : 0x0000000002000000-0x000000000200ffff (I)
Domain0 Region01 : 0x0000000080000000-0x000000008007ffff ()
Domain0 Region02 : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address : 0x0000000080200000
Domain0 Next Arg1 : 0x0000000087e00000
Domain0 Next Mode : S-mode
Domain0 SysReset : yes
Boot HART ID : 0
Boot HART Domain : root
Boot HART Priv Version : v1.12
Boot HART Base ISA : rv64imafdch
Boot HART ISA Extensions : time,sstc
Boot HART PMP Count : 16
Boot HART PMP Granularity : 4
Boot HART PMP Address Bits: 54
Boot HART MHPM Count : 16
Boot HART MIDELEG : 0x0000000000001666
Boot HART MEDELEG : 0x0000000000f0b509
ABC
NuttShell (NSH) NuttX-12.5.1
nsh> uname -a
NuttX 12.5.1 0e67a79b94 May 4 2024 01:43:21 risc-v rv-virt
nsh> free
total used free maxused maxfree nused nfree
Kmem: 2069496 13304 2056192 31720 2054128 25 4
Page: 4194304 602112 3592192 3592192
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]="user_main"
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 80ff8 80ff8
ordblks 2 2
mxordblk 7cff0 7cff0
uordblks 2688 2688
fordblks 7e970 7e970
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 80ff8 80ff8
ordblks 2 2
mxordblk 7cff0 7cff0
uordblks 2688 2688
fordblks 7e970 7e970
user_main: libc tests
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 2 2
mxordblk 7cff0 7cff0
uordblks 2688 2688
fordblks 7e970 7e970
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 80ff8 80ff8
ordblks 2 3
mxordblk 7cff0 7cff0
uordblks 2688 2668
fordblks 7e970 7e990
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 80ff8 80ff8
ordblks 3 2
mxordblk 7cff0 7cff0
uordblks 2668 2588
fordblks 7e990 7ea70
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 80ff8 80ff8
ordblks 2 2
mxordblk 7cff0 7cff0
uordblks 2588 2588
fordblks 7ea70 7ea70
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 80ff8 80ff8
ordblks 2 2
mxordblk 7cff0 7cff0
uordblks 2588 2588
fordblks 7ea70 7ea70
user_main: mutex test
Initializing mutex
Starting thread 1
Starting thread 2
Thread1 Thread2
Loops 32 32
Errors 0 0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 2 4
mxordblk 7cff0 787f0
uordblks 2588 35a8
fordblks 7ea70 7da50
user_main: timed mutex test
mutex_test: Initializing mutex
mutex_test: Starting thread
pthread: Started
pthread: Waiting for lock or timeout
mutex_test: Unlocking
pthread: Got the lock
pthread: Waiting for lock or timeout
pthread: Got the timeout. Terminating
mutex_test: PASSED
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 3
mxordblk 787f0 7a7f0
uordblks 35a8 2d98
fordblks 7da50 7e260
user_main: cancel test
cancel_test: Test 1a: Normal Cancellation
cancel_test: Starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: waiter exited with result=0xffffffffffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 2: Asynchronous Cancellation
... Skipped
cancel_test: Test 3: Cancellation of detached thread
cancel_test: Re-starting thread
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
cancel_test: Canceling thread
cancel_test: Joining
cancel_test: PASS pthread_join failed with status=ESRCH
cancel_test: Test 5: Non-cancelable threads
cancel_test: Re-starting thread (non-cancelable)
restart_thread: Destroying cond
restart_thread: Destroying mutex
restart_thread: Re-starting thread
start_thread: Initializing mutex
start_thread: Initializing cond
start_thread: Starting thread
start_thread: Yielding
sem_waiter: Taking mutex
sem_waiter: Starting wait for condition
sem_waiter: Setting non-cancelable
cancel_test: Canceling thread
cancel_test: Joining
sem_waiter: Releasing mutex
sem_waiter: Setting cancelable
cancel_test: waiter exited with result=0xffffffffffffffff
cancel_test: PASS thread terminated with PTHREAD_CANCELED
cancel_test: Test 6: Cancel message queue wait
cancel_test: Starting thread (cancelable)
Skipped
cancel_test: Test 7: Cancel signal wait
cancel_test: Starting thread (cancelable)
Skipped
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 3
mxordblk 7a7f0 78ff0
uordblks 2d98 4598
fordblks 7e260 7ca60
user_main: robust test
robust_test: Initializing mutex
robust_test: Starting thread
robust_waiter: Taking mutex
robust_waiter: Exiting with mutex
robust_test: Take the lock again
robust_test: Make the mutex consistent again.
robust_test: Take the lock again
robust_test: Joining
robust_test: waiter exited with result=0
robust_test: Test complete with nerrors=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 3
mxordblk 78ff0 78ff0
uordblks 4598 4598
fordblks 7ca60 7ca60
user_main: semaphore test
sem_test: Initializing semaphore to 0
sem_test: Starting waiter thread 1
sem_test: Set thread 1 priority to 191
waiter_func: Thread 1 Started
waiter_func: Thread 1 initial semaphore value = 0
waiter_func: Thread 1 waiting on semaphore
sem_test: Starting waiter thread 2
sem_test: Set thread 2 priority to 128
waiter_func: Thread 2 Started
waiter_func: Thread 2 initial semaphore value = -1
waiter_func: Thread 2 waiting on semaphore
sem_test: Starting poster thread 3
sem_test: Set thread 3 priority to 64
poster_func: Thread 3 started
poster_func: Thread 3 semaphore value = -2
poster_func: Thread 3 posting semaphore
waiter_func: Thread 1 awakened
waiter_func: Thread 1 new semaphore value = -1
waiter_func: Thread 1 done
poster_func: Thread 3 new semaphore value = -1
poster_func: Thread 3 semaphore value = -1
poster_func: Thread 3 posting semaphore
waiter_func: Thread 2 awakened
waiter_func: Thread 2 new semaphore value = 0
waiter_func: Thread 2 done
poster_func: Thread 3 new semaphore value = 0
poster_func: Thread 3 done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 5
mxordblk 78ff0 767f0
uordblks 4598 3db8
fordblks 7ca60 7d240
user_main: timed semaphore test
semtimed_test: Initializing semaphore to 0
semtimed_test: Waiting for two second timeout
semtimed_test: PASS: first test returned timeout
BEFORE: (22 sec, 716000000 nsec)
AFTER: (24 sec, 717000000 nsec)
semtimed_test: Starting poster thread
semtimed_test: Set thread 1 priority to 191
semtimed_test: Starting poster thread 3
semtimed_test: Set thread 3 priority to 64
semtimed_test: Waiting for two second timeout
poster_func: Waiting for 1 second
poster_func: Posting
semtimed_test: PASS: sem_timedwait succeeded
BEFORE: (24 sec, 730000000 nsec)
AFTER: (25 sec, 734000000 nsec)
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 5 3
mxordblk 767f0 7a7f0
uordblks 3db8 2d98
fordblks 7d240 7e260
user_main: condition variable test
cond_test: Initializing mutex
cond_test: Initializing cond
cond_test: Starting waiter
cond_test: Set thread 1 priority to 128
waiter_thread: Started
cond_test: Starting signaler
cond_test: Set thread 2 priority to 64
thread_signaler: Started
thread_signaler: Terminating
cond_test: signaler terminated, now cancel the waiter
cond_test: Waiter Signaler
cond_test: Loops 32 32
cond_test: Errors 0 0
cond_test:
cond_test: 0 times, waiter did not have to wait for data
cond_test: 0 times, data was already available when the signaler run
cond_test: 0 times, the waiter was in an unexpected state when the signaler ran
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 3
mxordblk 7a7f0 787f0
uordblks 2d98 2d98
fordblks 7e260 7e260
user_main: pthread_exit() test
pthread_exit_test: Started pthread_exit_main at PID=38
pthread_exit_main 38: Starting pthread_exit_thread
pthread_exit_main 38: Sleeping for 5 seconds
pthread_exit_thread 39: Sleeping for 10 second
pthread_exit_main 38: Calling pthread_exit()
pthread_exit_thread 39: Still running...
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 4
mxordblk 787f0 767f0
uordblks 2d98 4da8
fordblks 7e260 7c250
user_main: pthread_rwlock test
pthread_rwlock: Initializing rwlock
pthread_exit_thread 39: Exiting
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 5
mxordblk 767f0 747f0
uordblks 4da8 3db8
fordblks 7c250 7d240
user_main: pthread_rwlock_cancel test
pthread_rwlock_cancel: Starting test
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 5 2
mxordblk 747f0 7cff0
uordblks 3db8 2588
fordblks 7d240 7ea70
user_main: timed wait test
thread_waiter: Initializing mutex
timedwait_test: Initializing cond
timedwait_test: Starting waiter
timedwait_test: Set thread 2 priority to 177
thread_waiter: Taking mutex
thread_waiter: Starting 5 second wait for condition
timedwait_test: Joining
thread_waiter: pthread_cond_timedwait timed out
thread_waiter: Releasing mutex
thread_waiter: Exit with status 0x12345678
timedwait_test: waiter exited with result=0x12345678
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 2 3
mxordblk 7cff0 7a7f0
uordblks 2588 2d98
fordblks 7ea70 7e260
user_main: message queue test
mqueue_test: Starting receiver
mqueue_test: Set receiver priority to 128
receiver_thread: Starting
mqueue_test: Starting sender
mqueue_test: Set sender thread priority to 64
mqueue_test: Waiting for sender to complete
sender_thread: Starting
receiver_thread: mq_receive succeeded on msg 0
sender_thread: mq_send succeeded on msg 0
receiver_thread: mq_receive succeeded on msg 1
sender_thread: mq_send succeeded on msg 1
receiver_thread: mq_receive succeeded on msg 2
sender_thread: mq_send succeeded on msg 2
receiver_thread: mq_receive succeeded on msg 3
sender_thread: mq_send succeeded on msg 3
receiver_thread: mq_receive succeeded on msg 4
sender_thread: mq_send succeeded on msg 4
receiver_thread: mq_receive succeeded on msg 5
sender_thread: mq_send succeeded on msg 5
receiver_thread: mq_receive succeeded on msg 6
sender_thread: mq_send succeeded on msg 6
receiver_thread: mq_receive succeeded on msg 7
sender_thread: mq_send succeeded on msg 7
receiver_thread: mq_receive succeeded on msg 8
sender_thread: mq_send succeeded on msg 8
receiver_thread: mq_receive succeeded on msg 9
sender_thread: mq_send succeeded on msg 9
sender_thread: returning nerrors=0
mqueue_test: Killing receiver
receiver_thread: mq_receive interrupted!
receiver_thread: returning nerrors=0
mqueue_test: Canceling receiver
mqueue_test: receiver has already terminated
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 4
mxordblk 7a7f0 74ff0
uordblks 2d98 65a8
fordblks 7e260 7aa50
user_main: timed message queue test
timedmqueue_test: Starting sender
timedmqueue_test: Waiting for sender to complete
sender_thread: Starting
sender_thread: mq_timedsend succeeded on msg 0
sender_thread: mq_timedsend succeeded on msg 1
sender_thread: mq_timedsend succeeded on msg 2
sender_thread: mq_timedsend succeeded on msg 3
sender_thread: mq_timedsend succeeded on msg 4
sender_thread: mq_timedsend succeeded on msg 5
sender_thread: mq_timedsend succeeded on msg 6
sender_thread: mq_timedsend succeeded on msg 7
sender_thread: mq_timedsend succeeded on msg 8
sender_thread: mq_timedsend 9 timed out as expected
sender_thread: returning nerrors=0
timedmqueue_test: Starting receiver
timedmqueue_test: Waiting for receiver to complete
receiver_thread: Starting
receiver_thread: mq_timedreceive succeed on msg 0
receiver_thread: mq_timedreceive succeed on msg 1
receiver_thread: mq_timedreceive succeed on msg 2
receiver_thread: mq_timedreceive succeed on msg 3
receiver_thread: mq_timedreceive succeed on msg 4
receiver_thread: mq_timedreceive succeed on msg 5
receiver_thread: mq_timedreceive succeed on msg 6
receiver_thread: mq_timedreceive succeed on msg 7
receiver_thread: mq_timedreceive succeed on msg 8
receiver_thread: Receive 9 timed out as expected
receiver_thread: returning nerrors=0
timedmqueue_test: Test complete
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 3
mxordblk 74ff0 78ff0
uordblks 65a8 4598
fordblks 7aa50 7ca60
user_main: sigprocmask test
sigprocmask_test: SUCCESS
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 3
mxordblk 78ff0 78ff0
uordblks 4598 4598
fordblks 7ca60 7ca60
user_main: signal handler test
sighand_test: Initializing semaphore to 0
sighand_test: Starting waiter task
sighand_test: Started waiter_main pid=77
waiter_main: Waiter started
waiter_main: Unmasking signal 32
waiter_main: Registering signal handler
waiter_main: oact.sigaction=0 oact.sa_flags=0 oact.sa_mask=0000000000000000
waiter_main: Waiting on semaphore
sighand_test: Signaling pid=77 with signo=32 sigvalue=42
waiter_main: sem_wait() successfully interrupted by signal
waiter_main: done
sighand_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 3
mxordblk 78ff0 78ff0
uordblks 4598 4598
fordblks 7ca60 7ca60
user_main: nested signal handler test
signest_test: Starting signal waiter task at priority 101
waiter_main: Waiter started
waiter_main: Setting signal mask
waiter_main: Registering signal handler
waiter_main: Waiting on semaphore
signest_test: Started waiter_main pid=78
signest_test: Starting interfering task at priority 102
interfere_main: Waiting on semaphore
signest_test: Started interfere_main pid=79
signest_test: Simple case:
Total signalled 1240 Odd=620 Even=620
Total handled 1240 Odd=620 Even=620
Total nested 0 Odd=0 Even=0
signest_test: With task locking
Total signalled 2480 Odd=1240 Even=1240
Total handled 2480 Odd=1240 Even=1240
Total nested 0 Odd=0 Even=0
signest_test: With intefering thread
Total signalled 3720 Odd=1860 Even=1860
Total handled 3720 Odd=1860 Even=1860
Total nested 0 Odd=0 Even=0
signest_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 3 4
mxordblk 78ff0 74ff0
uordblks 4598 65a8
fordblks 7ca60 7aa50
user_main: POSIX timer test
timer_test: Initializing semaphore to 0
timer_test: Unmasking signal 32
timer_test: Registering signal handler
timer_test: oact.sigaction=0xc00069bc oact.sa_flags=0 oact.sa_mask=2aaaaaaaaaaaaaaa
timer_test: Creating timer
timer_test: Starting timer
timer_test: Waiting on semaphore
timer_expiration: Received signal 32
timer_expiration: sival_int=42
timer_expiration: si_code=2 (SI_TIMER)
timer_expiration: ucontext=0
timer_test: sem_wait() successfully interrupted by signal
timer_test: g_nsigreceived=1
timer_test: Waiting on semaphore
timer_expiration: Received signal 32
timer_expiration: sival_int=42
timer_expiration: si_code=2 (SI_TIMER)
timer_expiration: ucontext=0
timer_test: sem_wait() successfully interrupted by signal
timer_test: g_nsigreceived=2
timer_test: Waiting on semaphore
timer_expiration: Received signal 32
timer_expiration: sival_int=42
timer_expiration: si_code=2 (SI_TIMER)
timer_expiration: ucontext=0
timer_test: sem_wait() successfully interrupted by signal
timer_test: g_nsigreceived=3
timer_test: Waiting on semaphore
timer_expiration: Received signal 32
timer_expiration: sival_int=42
timer_expiration: si_code=2 (SI_TIMER)
timer_expiration: ucontext=0
timer_test: sem_wait() successfully interrupted by signal
timer_test: g_nsigreceived=4
timer_test: Waiting on semaphore
timer_expiration: Received signal 32
timer_expiration: sival_int=42
timer_expiration: si_code=2 (SI_TIMER)
timer_expiration: ucontext=0
timer_test: sem_wait() successfully interrupted by signal
timer_test: g_nsigreceived=5
timer_test: Deleting timer
timer_test: done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 4
mxordblk 74ff0 74ff0
uordblks 65a8 65a8
fordblks 7aa50 7aa50
user_main: round-robin scheduler test
rr_test: Set thread priority to 1
rr_test: Set thread policy to SCHED_RR
rr_test: Starting first get_primes_thread
First get_primes_thread: 85
rr_test: Starting second get_primes_thread
Second get_primes_thread: 86
rr_test: Waiting for threads to complete -- this should take awhile
If RR scheduling is working, they should start and complete at
about the same time
get_primes_thread id=1 started, looking for primes < 10000, doing 10 run(s)
get_primes_thread id=2 started, looking for primes < 10000, doing 10 run(s)
get_primes_thread id=2 finished, found 1230 primes, last one was 9973
get_primes_thread id=1 finished, found 1230 primes, last one was 9973
rr_test: Done
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 4
mxordblk 74ff0 787f0
uordblks 65a8 35a8
fordblks 7aa50 7da50
user_main: barrier test
barrier_test: Initializing barrier
barrier_test: Thread 0 created
barrier_test: Thread 1 created
barrier_test: Thread 2 created
barrier_func: Thread 0 started
barrier_func: Thread 1 started
barrier_func: Thread 2 started
barrier_test: Thread 3 created
barrier_func: Thread 3 started
barrier_test: Thread 4 created
barrier_func: Thread 4 started
barrier_test: Thread 5 created
barrier_func: Thread 5 started
barrier_test: Thread 6 created
barrier_func: Thread 6 started
barrier_test: Thread 7 created
barrier_func: Thread 7 started
barrier_func: Thread 0 calling pthread_barrier_wait()
barrier_func: Thread 1 calling pthread_barrier_wait()
barrier_func: Thread 2 calling pthread_barrier_wait()
barrier_func: Thread 3 calling pthread_barrier_wait()
barrier_func: Thread 4 calling pthread_barrier_wait()
barrier_func: Thread 5 calling pthread_barrier_wait()
barrier_func: Thread 6 calling pthread_barrier_wait()
barrier_func: Thread 7 calling pthread_barrier_wait()
barrier_func: Thread 7, back with status=PTHREAD_BARRIER_SERIAL_THREAD (I AM SPECIAL)
barrier_func: Thread 0, back with status=0 (I am not special)
barrier_func: Thread 1, back with status=0 (I am not special)
barrier_func: Thread 2, back with status=0 (I am not special)
barrier_func: Thread 3, back with status=0 (I am not special)
barrier_func: Thread 4, back with status=0 (I am not special)
barrier_func: Thread 5, back with status=0 (I am not special)
barrier_func: Thread 6, back with status=0 (I am not special)
barrier_func: Thread 7 done
barrier_func: Thread 0 done
barrier_test: Thread 0 completed with result=0
barrier_func: Thread 1 done
barrier_test: Thread 1 completed with result=0
barrier_func: Thread 2 done
barrier_func: Thread 3 done
barrier_func: Thread 4 done
barrier_test: Thread 2 completed with result=0
barrier_test: Thread 3 completed with result=0
barrier_test: Thread 4 completed with result=0
barrier_func: Thread 5 done
barrier_func: Thread 6 done
barrier_test: Thread 5 completed with result=0
barrier_test: Thread 6 completed with result=0
barrier_test: Thread 7 completed with result=0
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 4 10
mxordblk 787f0 6c7f0
uordblks 35a8 6608
fordblks 7da50 7a9f0
user_main: scheduler lock test
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Starting lowpri_thread at 97
sched_lock: Set lowpri_thread priority to 97
sched_lock: Starting highpri_thread at 98
sched_lock: Set highpri_thread priority to 98
sched_lock: Waiting...
sched_lock: PASSED No pre-emption occurred while scheduler was locked.
sched_lock: Finished
End of test memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 10 4
mxordblk 6c7f0 787f0
uordblks 6608 35a8
fordblks 7a9f0 7da50
Final memory usage:
VARIABLE BEFORE AFTER
======== ======== ========
arena 80ff8 80ff8
ordblks 2 4
mxordblk 7cff0 787f0
uordblks 2688 35a8
fordblks 7e970 7da50
user_main: Exiting
ostest_main: Exiting with status -1
nsh> QEMU: Terminated
vscode ➜ /tmp/nuttx/nuttx (master) $ git status && hash1=`git rev-parse HEAD`
pushd ../apps
git status && hash2=`git rev-parse HEAD`
popd
echo NuttX Source: https://github.com/apache/nuttx/tree/$hash1 >nuttx.hash
echo NuttX Apps: https://github.com/apache/nuttx-apps/tree/$hash2 >>nuttx.hash
cat nuttx.hash
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
/tmp/nuttx/apps /tmp/nuttx/nuttx
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
/tmp/nuttx/nuttx
NuttX Source: https://github.com/apache/nuttx/tree/0e67a79b94bcd1b9a4f27f88bc6f70a18b3dec01
NuttX Apps: https://github.com/apache/nuttx-apps/tree/943aa68069142545db7c2342ff608c9e6a0670c9
vscode ➜ /tmp/nuttx/nuttx (master) $
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment