Apache NuttX RTOS for Pine64 Ox64 BL808 RISC-V SBC
NuttX Source: https://github.com/apache/nuttx/tree/96c2707737391642ac1d3ade84fb03f4c1fa51e4
NuttX Apps: https://github.com/apache/nuttx-apps/tree/f12586c51e0003c03e708b09baaf21348891f370
Inside menuconfig, we selected...
Build Setup > Debug Options
- Enable "Debug Features"
- Enable "Debug Assertions > Show Expression, Filename"
- Enable "File System Debug Features > Errors, Warnings"
- Enable "C Library Debug Features > Errors, Warnings, Info"
- Enable "Memory Manager Debug Features > Errors, Warnings"
- Enable "Scheduler Debug Features > Errors, Warnings, Info"
- Enable "SYSCALL Debug Features > Errors, Warnings"
- Enable "Timer Debug Features > Errors, Warnings, Info"
- Enable "IPC Debug Features > Errors, Warnings, Info"
Build Script:
#!/usr/bin/env bash
# Build NuttX for Ox64
## TODO: Set PATH
export PATH="$HOME/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-apple-darwin/bin:$PATH"
set -e # Exit when any command fails
set -x # Echo commands
## Build NuttX
function build_nuttx {
## Go to NuttX Folder
pushd ../nuttx
## Build NuttX
make -j 8
## Return to previous folder
popd
}
## Build Apps Filesystem
function build_apps {
## Go to NuttX Folder
pushd ../nuttx
## Build Apps Filesystem
make -j 8 export
pushd ../apps
./tools/mkimport.sh -z -x ../nuttx/nuttx-export-*.tar.gz
make -j 8 import
popd
## Return to previous folder
popd
}
## Pull updates
git pull && git status && hash1=`git rev-parse HEAD`
pushd ../apps
git pull && 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
## Show the versions of GCC and Zig
riscv64-unknown-elf-gcc -v
## Configure build
tools/configure.sh ox64:nsh
## Build NuttX
build_nuttx
## Build Apps Filesystem
build_apps
## Generate Initial RAM Disk
genromfs -f initrd -d ../apps/bin -V "NuttXBootVol"
## Show the size
riscv64-unknown-elf-size nuttx
## Export the Binary Image to `nuttx.bin`
riscv64-unknown-elf-objcopy \
-O binary \
nuttx \
nuttx.bin
## Prepare a Padding with 64 KB of zeroes
head -c 65536 /dev/zero >/tmp/nuttx.pad
## Append Padding and Initial RAM Disk to NuttX Kernel
cat nuttx.bin /tmp/nuttx.pad initrd \
>Image
## Copy the config
cp .config nuttx.config
## Dump the disassembly to nuttx.S
riscv64-unknown-elf-objdump \
--syms --source --reloc --demangle --line-numbers --wide \
--debugging \
nuttx \
>nuttx.S \
2>&1
## Dump the init disassembly to init.S
riscv64-unknown-elf-objdump \
--syms --source --reloc --demangle --line-numbers --wide \
--debugging \
../apps/bin/init \
>init.S \
2>&1
## Dump the hello disassembly to hello.S
riscv64-unknown-elf-objdump \
--syms --source --reloc --demangle --line-numbers --wide \
--debugging \
../apps/bin/hello \
>hello.S \
2>&1
## Copy to Web Server
cp $HOME/ox64/nuttx/Image $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/nuttx.bin $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/nuttx.S $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/nuttx.hash $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/nuttx.config $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/initrd $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/init.S $HOME/riscv/nuttx-tinyemu/docs/ox64/
cp $HOME/ox64/nuttx/hello.S $HOME/riscv/nuttx-tinyemu/docs/ox64/