OSD335Xをカスタム基板でU-bootを動かすまで（メモ）

2020/07/25　初記述

# ここまでのあらすじ

OSD3358-512M-BCB を買った。
https://www.mouser.jp/ProductDetail/415-OSD3358-512M-BCB

基板作った。
https://twitter.com/nonNoise/status/1278465569499447298?s=20

実装した。
https://www.youtube.com/watch?v=acrJceh3bkU

![115929400_3171100156300596_3359527061697752589_o.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/c8d421a6-0ea4-2800-e859-d9add382ecca.jpeg)


# 電源投入

上手くいった。

シリアル（UART0）よりCCCCCCC・・・・・が大量に流れれ来る。

シリアルの設定は
*Baud rate: 115,200
*Data bits: 8
*Parity: None
*Stop bits: 1
*Flow control: None

# U-bootのバイナリデータの準備

どうもコンパイルが必要らしい。

Ubuntuの環境でコンパイルする。
新規にVertualBoxでUbuntu環境を整えた。

# ARMのGCC環境セットアップ

wget -c https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz

export CC=[PWD]/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
※[PWD]は各自PWDコマンドでディレクトリアドレスを代入してください。

# U-Bootのコンパイル

git clone https://github.com/u-boot/u-boot
cd u-boot/
git checkout v2018.01 -b tmp

※参考通りにしたので、なんか古い。どこかで最新にする予定。

# U-Bootにパッチを充てる

wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2018.01/0002-U-Boot-BeagleBone-Cape-Manager.patch
wget -c https://raw.githubusercontent.com/RobertCNelson/Bootloader-Builder/master/patches/v2018.03-rc1/0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch

patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch
patch -p1 < 0002-NFM-Production-eeprom-assume-device-is-BeagleBone-Bl.patch

※こんな仕組みがあるんだ。BeagleBoneの影が見える。カスタムしたい。

# U-BootをMakeする。

export CC=[PWD]/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
※[PWD]は各自PWDコマンドでディレクトリアドレスを代入してください。

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}


# 必要なファイルをWindowsに引き渡す

ARMのU-Bootには２種類のファイルが必要
 u-boot-spl.bin(初段起動用）とu-boot.img(次段起動用）

u-boot-spl.binは、u-boot/splの中になります。

# TeraTermで書き込む
海外の人もTeraTerm使うんだ。

ターミナルにCCCCC.....とCが流れている状態を確認。

ファイル -> 転送 -> XMODEM -> 送信
　u-boot-spl.bin を選択
　左下の1K にチェックを入れる
　転送される。

![コメント 2020-07-25 014135.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/1eafa7c0-b833-f35c-6184-3a8a2c15ebf3.png)

ファイル -> 転送 -> YMODEM -> 送信
　u-boot.img を選択
　転送される。
![コメント 2020-07-25 014502.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/659bf5f8-24e5-b5ca-586d-f86e48eb8d62.png)
最初、0%の状態で少し間があるけど、根気強く（１分程度）バーが動くまで我慢しましょう。

無事に？起動する。
![コメント 2020-07-25 014806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/4cb0cf53-b39c-2e7d-1039-b0bee5ba1a6c.png)

# それで？

ただ、この状態だと、二つのU-BootプログラムはRAMに展開されたままなので、resetや電源再投入をすると、再びCCCC....が表示される。
U-Bootのデバックを行うなら、この状態が最も最適。

U-Bootのログを見ると、EEPROMがエラーだったり、USBやEthernetがなかったりと文句を言ってくる。
このままではいけないので、U-Bootのカスタムが必要そう。
とりあえず、U-Bootを書き込む手順だけまちょめた。

先は長そうだ。（楽しみだが）ふふふ。

# 参考文献
[https://processors.wiki.ti.com/index.php?title=AM335x_U-Boot_User%27s_Guide&oldid=151545#Boot_Over_UART](https://processors.wiki.ti.com/index.php?title=AM335x_U-Boot_User%2527s_Guide&oldid=151545#Boot_Over_UART)

[https://octavosystems.com/forums/topic/osd3358-boot/](https://octavosystems.com/forums/topic/osd3358-boot/)


#  本当のメモ（１）
エラーが出たから対処済みだが、念のため残しておく。

bad value (‘armv5’) for ‘-march=’ switch

この記事が正しいか、再度コンパイルしようと思ったら、make ARCH=arm CROSS_COMPILE=${CC}で発生したエラー

どうもUbuntuを再起動させた事で、export がクリアされたらしい。（へぇ～）
なので、コンパイル前に
export CC=[PWD]/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
を再度書くように記事を変更した。

#  本当のメモ（２）

U-Bootをシリアルで書き込むときに、X-MODEMとY-MODEMが出てきて、なんじゃそりゃって顔したので、調べてみた。
https://ja.wikipedia.org/wiki/XMODEM
https://ja.wikipedia.org/wiki/YMODEM
知らなかった（にわかですみません）
TeraTermは便利で使いやすいが、自動化したいときに困るのでPythonでライブラリ探してみた。
https://pythonhosted.org/xmodem/
https://github.com/alexwoo1900/ymodem
なるほど？