[メモ] nRF Connect SDKビルド環境 (WSL + Docker + DevContainer on VSCode)

# 概要
- nRF Connect SDK のビルド環境のメモ
- WSL内からのデバッグ設定(USBJlinkつかう)のは面倒くさいので、やらない


# 環境
- Windows 10 + WSL + VSCode
- (確認予定: ubuntu 22.04 / ChromeOs Flex)

# 手順
1. VSCode使えるように
2. WSLに、Docker使えるように
3. VSCodeにRemote Developmentエクステンションインストール
    `code --install-extension ms-vscode-remote.vscode-remote-extensionpack`
4. WSLのターミナルを開いて、以下コピペ
    ```bash
    git clone https://github.com/mt08xx/ncs-devcontainer 
    cd ncs-devcontainer
    code .
    ```
5. VSCodeが開いて、右下に↓がでたら、Reopen in Containerをクリック。（初回はここでしばし待つ)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/e21016d2-3849-c7cf-432e-b69d79d514de.png)
    
    <!-- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/02b70cce-da16-0d33-c39a-aca5aebd900d.png)-->

6. CTRL+ALT+NでWelcome to nRF Connect　を表示
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/37a2c0bd-a5b1-a011-6de9-33fb3723ff18.png)

7. アプリケーション作成
    7. 新規アプリケーション作成
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/50359466-538b-b839-4b00-81f4bdecedae.png)
    2. おすすめのC/C++ Extention Packいれるか？ => Don't show again で、そのつぎの質問は、No　で。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/26ef7b5a-8d8a-0a44-bbcf-00873e8a6fd6.png)
    3. ビルドコンフィグレーション設定
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/c4736954-2d7b-041c-cb21-e4465e589751.png)
    4. ビルドが始まる("Build after operating configuration"にチェックがついていれば)

8. zephyr.hex こいつを焼けばよい。(ハズ)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/7e5a071f-cc10-676d-085b-0f16e5e7dcda.png)




---
# "手順"の準備
## VSCodeの準備
- Windows 10 に VSCodeをインストール
- CTRL+SHIFT+x して、Extensionを開いて、”Remote Development"をインストールしておく

## WSLの準備
- WSL準備と初期設定

    ```powershell
    #wsl --unregister Ubuntu  #以前の環境削除
    # Ubuntu インストール
    wsl --install Ubuntu
    # しばらく待ってインストールが終わると、ユーザ名とパスワード2回をタイプ
    ```
    ```bash
    # sudo 時にパスワードを聞かれないようにする
    echo -e "${USER} ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/010_${USER}-nopasswd 

    # systemd使用
    echo -e '[boot]\nsystemd=true' | sudo tee /etc/wsl.conf
    # resolvConfは自前で設定
    echo -e '[network]\ngenerateResolvConf = false' | sudo tee -a /etc/wsl.conf

    # 一旦終了
    wsl.exe -t ${WSL_DISTRO_NAME}
    ```

    ```bash
    #ネームサーバを設定。お好みのDNSを。
    echo 'nameserver 1.1.1.1' | sudo tee /etc/resolv.conf
    
    #(お好みで) dnscrypt-proxy で、DOH(DNS over HTTPS)
    sudo apt update && sudo apt install dnscrypt-proxy &&  echo 'nameserver 127.0.2.1' | sudo tee /etc/resolv.conf
    
    
    #(お好みで) apt-cacher-ng を使用しているなら、サーバを指定
    # echo 'Acquire::http::Proxy "http://apt-cacher-ng:3142";' | sudo tee /etc/apt/apt.conf.d/02proxy

    #パッケージ更新
    sudo apt update && sudo apt upgrade -y
    
    # Dockerのインストール (WSL中だと認識されると20秒待たされる)
    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh && sudo usermod -aG docker $USER && newgrp docker

    # 一旦終了するもヨシ
    #wsl.exe -t ${WSL_DISTRO_NAME}

    # DockerのnRF Connect SDKイメージをpull(ダウンロード)しておく
    docker pull nordicplayground/nrfconnect-sdk:v2.4-branch
    ```

 

---
# その他
- ひさびさに記事を書きましたが、みなさま、お元気でしょうか？コロナ以降は、ラズパイの入手が困難でしたが、最近は改善してきたみたいで。最近の流行りはなんですかね？

### ひとりごと
- お友達(のお友達のお友達)D氏のプロジェクトのお手伝いで、2～3年前のお友達(のお友達)J氏のプロジェクトでつかったのとおなじ、nRF52832を使用。SoftDeviceとかどうなってるんだ、とおもったら、ガラリと開発環境変わってて、びっくり。