

SPRESENSE SDK
v2.3.0で、`examples/fwupdate`、`examples/hello`、`feature/usbmsc`を有効にしたファームウェアを2つ作成しました。  
一方はソースに手を入れておらず("Hello, World!!"と表示される)、もう一方は`examples/hello`の表示を変更したものです。

[code]

    nsh> hello
    Hello, spresense!!
    
[/code]

元のソースの`nuttx.spk`を`loader.espk`と結合してパッケージ化しました。

[code]

    $ examples/fwupdate/package.sh sdk/nuttx.spk firmware/spresense/loader.espk
    Pack: 1 188752 sdk/nuttx.spk
    Pack: 1 129968 firmware/spresense/loader.espk
    ====================
    Created package.bin
    ====================
    $ cp package.bin hello.bin
    
[/code]

SDにこれを書き込み、`fwupdate`でアップデートできるか確認しましたが、NuttXが正しくアップデートされていないように見えます。

[code]

    NuttShell (NSH) NuttX-10.1.0
    nsh> hello
    Hello, spresense!!
    nsh> fwupdate -p /mnt/sd0/test/hello.bin
    FW Update Example!!
    Free space 2314240 bytes
    File: /mnt/sd0/test/hello.bin
    Size: 318736
    File: /mnt/sd0/test/hello.bin(0)
    Size: 188752
    Type: FW_SYS
    ->dl(0x2d03e550, 65536 / 188752): ret=0
    ->dl(0x2d03e550, 131072 / 188752): ret=0
    ->dl(0x2d03e550, 188752 / 188752): ret=0
    File: /mnt/sd0/test/hello.bin(1)
    Size: 129968
    Type: FW_SYS
    ->dl(0x2d03e550, 65536 / 129968): ret=0
    ->dl(0x2d03e550, 129968 / 129968): ret=0
    ->update: ret=0
    nsh> Package validation is OK.
                                  Saving package to "loader"
    
    NuttShell (NSH) NuttX-10.1.0
    nsh> hello
    Hello, spresense!!
    nsh>
    
[/code]

`fwupdate`の使い方に何か問題があるのでしょうか？


CC BY-SA 4.0
2021-10-14T09:43:14.443
83094
2021-10-15T04:33:44.550
2021-10-14T09:57:27.283
48381
48381
question
spresense
fwupdateでNuttXが正しく書き込まれない


使い方は合っていると思いますが、`nuttx.spk`のタイプが`1`になっているのが変です。  
`Pack: 1 188752 sdk/nuttx.spk`

自分のUbuntu環境で同じコマンドを実行してみると、`nuttx.spk`のタイプは`0`になり、ファームウェアアップデートも正しく動作しています。

[code]

    $ examples/fwupdate/package.sh sdk/nuttx.spk firmware/spresense/loader.espk
    Pack: 0 148912 sdk/nuttx.spk
    Pack: 1 129968 firmware/spresense/loader.espk
    ====================
    Created package.bin
    ====================
    
[/code]

タイプ違いが動作しない原因のような気がします。

`examples/fwupdate/package.sh`
が単純なスクリプトなので中身をみてみましたが、`basename`コマンドでファイル名を取得して`nuttx`という文字列であればタイプを`0`にしているようです。環境依存の問題があるのか、何が原因なのか、はっきりとは分かりませんが、`basename`コマンドが意図した動作になっていないのかもしれません。

`spresense`ディレクトリ下で次のコマンドを実行すると何が表示されるでしょうか？期待結果は`nuttx.spk`です。

[code]

    $ cd spresense
    $ basename sdk/nuttx.spk
    
[/code]

ディレクトリを`spresense/sdk`へ移動して、次のコマンドを実行するとどうでしょうか？こちらも期待結果は`nuttx.spk`です。

[code]

    $ cd spresense/sdk
    $ basename nuttx.spk
    
[/code]

明確な回答にはなっていませんが、スクリプトの挙動を確認してみるのが良いと思います。


CC BY-SA 4.0
2021-10-15T04:33:44.550
83104
2021-10-15T04:33:44.550
31378
83094
answer