====== デフォルト設定でのビルド ======
\\
MA-S1xx で基本的な動作確認ができる最低限の config を用意してありますので、まずはその設定でビルドしてみます。
===== ファームウェアのビルド =====
==== nsh config の適用 ====
mas1xx/nsh という config を適用します。
user1@G1:~/src/NuttX$ cd nuttx/
user1@G1:~/src/NuttX/nuttx$ tools/configure.sh mas1xx/nsh
Copy files
Select CONFIG_HOST_LINUX=y
Refreshing...
CP: arch/dummy/Kconfig to /home/user1/src/NuttX/nuttx/arch/dummy/dummy_kconfig
CP: boards/dummy/Kconfig to /home/user1/src/NuttX/nuttx/boards/dummy/dummy_kconfig
LN: platform/board to /home/user1/src/NuttX/apps/platform/dummy
LN: include/arch to arch/arm/include
LN: include/arch/board to /home/user1/src/NuttX/nuttx/boards/arm/sama5/mas1xx/include
LN: drivers/platform to /home/user1/src/NuttX/nuttx/drivers/dummy
LN: include/arch/chip to /home/user1/src/NuttX/nuttx/arch/arm/include/sama5
LN: arch/arm/src/chip to /home/user1/src/NuttX/nuttx/arch/arm/src/sama5
LN: arch/arm/src/board to /home/user1/src/NuttX/nuttx/boards/arm/sama5/mas1xx/src
mkkconfig in /home/user1/src/NuttX/apps/audioutils
mkkconfig in /home/user1/src/NuttX/apps/benchmarks
mkkconfig in /home/user1/src/NuttX/apps/boot
mkkconfig in /home/user1/src/NuttX/apps/canutils
mkkconfig in /home/user1/src/NuttX/apps/centurysys/libs
mkkconfig in /home/user1/src/NuttX/apps/centurysys
mkkconfig in /home/user1/src/NuttX/apps/crypto
mkkconfig in /home/user1/src/NuttX/apps/database
mkkconfig in /home/user1/src/NuttX/apps/examples/mcuboot
mkkconfig in /home/user1/src/NuttX/apps/examples
mkkconfig in /home/user1/src/NuttX/apps/fsutils
mkkconfig in /home/user1/src/NuttX/apps/games
mkkconfig in /home/user1/src/NuttX/apps/graphics
mkkconfig in /home/user1/src/NuttX/apps/industry
mkkconfig in /home/user1/src/NuttX/apps/inertial
mkkconfig in /home/user1/src/NuttX/apps/interpreters/luamodules
mkkconfig in /home/user1/src/NuttX/apps/interpreters
mkkconfig in /home/user1/src/NuttX/apps/logging
mkkconfig in /home/user1/src/NuttX/apps/lte
mkkconfig in /home/user1/src/NuttX/apps/math
mkkconfig in /home/user1/src/NuttX/apps/mlearning
mkkconfig in /home/user1/src/NuttX/apps/netutils
mkkconfig in /home/user1/src/NuttX/apps/sdr
mkkconfig in /home/user1/src/NuttX/apps/system
mkkconfig in /home/user1/src/NuttX/apps/testing
mkkconfig in /home/user1/src/NuttX/apps/wireless/bluetooth
mkkconfig in /home/user1/src/NuttX/apps/wireless/ieee802154
mkkconfig in /home/user1/src/NuttX/apps/wireless
mkkconfig in /home/user1/src/NuttX/apps
#
# configuration written to .config
#
user1@G1:~/src/NuttX/nuttx$
\\
==== コンパイル ====
make コマンドで NuttX のコンパイルを行います。-j オプションを付与した並列コンパイルにも対応しています。
user1@G1:~/src/NuttX/nuttx$ make -j4
...
printf "%s\n" *.map >> nuttx.manifest
CP: nuttx.bin
arm-none-eabi-objcopy -O binary nuttx nuttx.bin
echo nuttx.bin >> nuttx.manifest
MKIMAGE: uImage
mkimage -A arm -O linux -C none -T kernel -a 0x22008000 \
-e 0x22008E20 -n nuttx -d nuttx.bin uImage
Image Name: nuttx
Created: Tue Apr 2 14:34:47 2024
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 703624 Bytes = 687.13 KiB = 0.67 MiB
Load Address: 22008000
Entry Point: 22008e20
if [ -w /tftpboot ] ; then \
cp -f uImage /tftpboot/uImage; \
fi
echo "uImage" >> nuttx.manifest
user1@G1:~/src/NuttX/nuttx$
ビルドが成功しました。
\\
=== サンプル ===
ビルドしたサンプルです。
|<64em 10em 14em 14em 14em>|
^ File ^ Stat ^ SHA1SUM ^ Note |
|{{ :mas1xx_devel:nuttx_firmware:nuttx_development_detail:build_default_firmware:uimage.bin |uImage}}|2024/04/09 13:36 688.0 KB|bfe63cda165721540666d1b8b4ff4715a1b54154|NuttX uImage形式|
|{{ :mas1xx_devel:nuttx_firmware:nuttx_development_detail:build_default_firmware:system.map |System.map}}|2024/04/09 13:36 100.2 KB|ee47ff2c9503ca6903eb466b4a0359adfe4a91f4|Map|
\\
===== 実機でのテスト =====
uImage 形式のファームウェアが生成されるので、それを MA-S1xx 実機に転送して barebox bootloader から起動することができます。
\\
==== 実機へのコピー ====
なんらかの方法で、MA-S1xx に uImage ファイルを持っていきます。
user1@G1:~/src/NuttX/nuttx$ ls -l uImage
-rw-rw-r-- 1 user1 user1 679560 Apr 2 11:31 uImage
user1@G1:~/src/NuttX/nuttx$ sftp user1@172.16.1.16
user1@172.16.1.16's password:
Connected to 172.16.1.16.
sftp> cd /tmp
sftp> put uImage
Uploading uImage to /tmp/uImage
uImage 100% 664KB 2.2MB/s 00:00
sftp> quit
user1@G1:~/src/NuttX/nuttx$
\\
==== eMMC へコピー ====
eMMC に "nuttx" というディレクトリを作成し、そこに uImage ファイルをコピーします。
user1@G1:~/src/NuttX/nuttx$ ssh -l user1 172.16.1.16
user1@172.16.1.16's password:
Last login: Mon Apr 1 15:36:29 2024 from 172.16.1.61
user1@gemini:~$ sudo su -
[sudo] password for user1:
root@gemini:~# mount_overlay
* remounting overlay partition as RW...
root@gemini:~# cd /ro/.host/
root@gemini:/ro/.host# mkdir nuttx
root@gemini:/ro/.host# cp /tmp/uImage nuttx/
root@gemini:/ro/.host# ls -l
total 24
drwxr-xr-x 2 root root 4096 Mar 27 13:15 area0
drwxr-xr-x 2 root root 4096 Sep 14 2023 area1
drwxr-xr-x 2 root root 4096 Mar 27 13:46 consolelog
drwxr-xr-x 2 root root 4096 Apr 2 13:08 nuttx <---- 作った
drwxr-xr-x 2 root root 4096 Apr 2 11:12 overlay
drwxr-xr-x 2 root root 4096 Apr 7 2023 soracom
root@gemini:/ro/.host# ls -l nuttx/
total 664
-rwxr-xr-x 1 root root 679560 Apr 2 13:08 uImage
root@gemini:/ro/.host# cd -
/root
root@gemini:~# mount_overlay -u
* remounting overlay partition as RO...
root@gemini:~#
\\
==== 起動 ====
[[mas1xx_ope:select_bootdevice:start|]] のとおり DIPSW を **NuttX boot**(OFF - **ON** - **ON** - OFF) に設定して再起動します。
Booting entry 'nuttx'
Image Name: nuttx
Created: 2024-04-02 2:31:02 UTC
OS: Linux
Architecture: ARM
Type: Kernel Image
Compression: uncompressed
Data Size: 679496 Bytes = 663.6 KiB
Load Address: 22008000
Entry Point: 22008e20
Loading U-Boot uImage '/mnt/emmc.0/nuttx/uImage'
ramoops: Adding ramoops node
commandline: console=ttyS0,115200
mobile_watch_nx [13:100]
NuttShell (NSH) NuttX-12.5.0-RC0
nsh>
NuttX で起動し、シェル(NuttShell) が起動することが確認できました。
\\