====== デフォルト設定でのビルド ====== \\ 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) が起動することが確認できました。 \\