[メモ] apache mynewt: Windowsでビルド


概要

  • Windowsで。
  • フォルダーパスの仕切り文字で問題が。。
    • \ => / とりあえず置換。
  • -Dhogehoge=\"barbar\"というとこでも問題が。
    • /"=>\"に戻す。

手順

Windows向けツールのインストール (スペースの入らないフォルダへ)

# 今回使用したもの: Git-2.9.2-64-bit.exego1.6.3.windows-amd64.msigcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe

ファイルの準備とパッチ当て

  1. Git Bash起動

  2. 以下、実行

    以下こぴぺ
    # HOMEはおそらく、C:\Users\<User名>
    echo $HOME
    cd $HOME
    mkdir -p dev/go 
    cd $HOME/dev/go
    export GOPATH=`pwd`
    export PATH=$GOPATH/bin:$PATH
    #
    #
    go get mynewt.apache.org/newt/...
    #
    cd src/mynewt.apache.org/newt/newt/
    
  3. パッチを当てて、
    vi vendor/mynewt.apache.org/newt/util/util.go

    vendor/mynewt.apache.org/newt/util/util.go
    log.Debug(cmdStr)
    //#mt08:以下2行追加..
    cmdStr = strings.Replace(cmdStr, "\\", "/", -1)
    cmdStr = strings.Replace(cmdStr, "/\"", "\\\"", -1)
    
    cmd := exec.Command("sh", "-c", cmdStr)
    

    vi vendor/mynewt.apache.org/newt/util/util.go

    cli/project_cmds.go
    ...
    //"os"  #コメントアウト
    .
    .
    .
    //#mt08:Shellでrmを呼ぶことで対応
    //if err := os.RemoveAll(newDir + "/" + "/.git/"); err != nil {
    if _, err := util.ShellCommand("rm -rf "+ newDir + "/.git/"); err != nil {
        NewtUsage(cmd, err)
    }
    ...
    
  4. newtをビルドする

    cd $HOME/dev/go/src/mynewt.apache.org/newt/newt
    go install
    

ビルド: BLENanoのLチカ

  • あとは [メモ] mynewt:BLENanoでLチカとおなじ。

    cd $HOME/dev
    rm -rfv myproj
    #
    newt new myproj
    cd myproj
    #
    #vi project.yml
    # `project.yml`の`0-latest` => `0.0.0`に変更することで、developブランチから持ってくる.
    sed -i 's/0-latest/0.0.0/' project.yml
    #
    newt install -v
    # ファイルは、nrf51dkから持ってくる..そうしないとリンクエラーになる..
    cd repos/apache-mynewt-core/hw/bsp/nrf51-blenano/
    cp -v ../nrf51dk/*.ld ./.
    cp -v ../nrf51dk/src/*.c ./src
    cp -v ../nrf51dk/include/bsp/*.h ./include/bsp/
    #
    # vi include/bsp/bsp.h
    ## - include/bsp/bsp.h___21から19に変更。
    ## //#define LED_BLINK_PIN   (21)
    ## #define LED_BLINK_PIN   (19)
    sed -i 's/(21)/(19)/' include/bsp/bsp.h
    #
    #
    cd $HOME/dev/myproj
    #
    # ターゲット作成.
    #Lチカ アプリ.
    newt target create blink_blenano
    newt target set blink_blenano app=apps/blinky
    newt target set blink_blenano bsp=@apache-mynewt-core/hw/bsp/nrf51-blenano
    newt target set blink_blenano build_profile=debug
    # ブート.
    newt target create blenano_boot
    newt target set  blenano_boot app=@apache-mynewt-core/apps/boot
    newt target set  blenano_boot bsp=@apache-mynewt-core/hw/bsp/nrf51-blenano
    newt target set  blenano_boot build_profile=optimized
    # 確認.
    newt target show
    # ビルド
    newt build blenano_boot
    newt build blink_blenano
    # 署名?して、イメージ作成
    newt create-image blink_blenano 1.0.0
    #
    # HEX イメージ作成.
    srec_cat bin/blenano_boot/apps/boot/boot.elf.bin -binary  -offset=0x0 -o boot.hex -intel
    srec_cat bin/blink_blenano/apps/blinky/blinky.img -binary  -offset=0x8000 -o img.hex -intel
    srec_cat boot.hex -intel img.hex -intel -o img_OUT.HEX -intel --line-length=44
    
  • => img_OUT.HEX を焼く。。 (修正されてなければ、5秒毎に点灯・消灯)

その他

  • なんか、重たいと感じて、タスクマネージャみたら、(ゾンビの)newtがフルに動いていた..
  • OsTickのパッチ。あとで検討

    hw/mcu/nordic/nrf51xxx/hal_os_tick.c
    void
    os_tick_init(uint32_t os_ticks_per_sec, int prio)
    {
        uint32_t ctx;
        uint32_t mask;
    
    //
    os_ticks_per_sec *=8; //##mt08:2016-07-2x ぱっち... 約一秒くらいになった。
    //
        assert(RTC_FREQ % os_ticks_per_sec == 0);
    
        lastocmp = 0;
        timer_ticks_per_ostick = RTC_FREQ / os_ticks_per_sec;
    ...
    
    • 120回の os_time_delay(1000) が、ストップウォッチ(実時間)約117秒だった。
    • 32.768kHZのXtalがのってる => 32768kHz
    • 1msecを32クロックとしてないか?(0.768は誤差???)
    • (32000/32768) * 120 => 117.1875 ... むむむ??
  • サンプルアプリのビルド

    • myproj/repos/apache-mynewt-core/hw/bsp/nrf51-blenano/nrf51dk.ld の FLASHのサイズ(LENGTH)をおおきくしとく。
      => FLASH (rx) : ORIGIN = 0x00008000, LENGTH = 0x2b800
    bletiny
    newt target create bletiny_blenano
    newt target set bletiny_blenano app=@apache-mynewt-core/apps/bletiny
    newt target set bletiny_blenano bsp=@apache-mynewt-core/hw/bsp/nrf51-blenano
    newt target set bletiny_blenano build_profile=debug
    #
    newt build bletiny_blenano
    #
    newt create-image bletiny_blenano 1.0.0
    # HEX イメージ作成.
    srec_cat bin/blenano_boot/apps/boot/boot.elf.bin -binary  -offset=0x0 -o boot.hex -intel
    srec_cat bin/bletiny_blenano/apps/bletiny/bletiny.img -binary  -offset=0x8000 -o img.hex -intel
    srec_cat boot.hex -intel img.hex -intel -o img_OUT.HEX -intel --line-length=44
    
    bleuart
    newt target create bleuart_blenano
    newt target set bleuart_blenano app=@apache-mynewt-core/apps/bleuart
    newt target set bleuart_blenano bsp=@apache-mynewt-core/hw/bsp/nrf51-blenano
    newt target set bleuart_blenano build_profile=debug
    #
    newt build bleuart_blenano
    #
    newt create-image bleuart_blenano 1.0.0
    # HEX イメージ作成.
    srec_cat bin/blenano_boot/apps/boot/boot.elf.bin -binary  -offset=0x0 -o boot.hex -intel
    srec_cat bin/bleuart_blenano/apps/bleuart/bleuart.img -binary  -offset=0x8000 -o img.hex -intel
    srec_cat boot.hex -intel img.hex -intel -o img_OUT.HEX -intel --line-length=44