CAT845_内蔵ROM初期化手順

この文書の書式について

$ 記号は一般ユーザ(本機では kaihatsu )で操作することを示します。
# 記号はrootユーザで操作することを示します。一般ユーザからは su コマンドで rootユーザに変わってください。
¥ 記号はフォントによってバックスラッシュ \ で表示されることもあります
  • 開発PC:開発に使用するパソコン。主にVirtualBoxにインストールされたLinuxを意味します。
  • ターゲットボード:本書ではCAT845 Linuxボードを意味します。

必要なものをそろえる

ハードウェア

  • CAT845 基板
  • 電源 5V 2A (EK845に付属する)
  • USB シリアルコンソールケーブル(EK845に付属する)
  • microSDメモリカード(最低2Gバイト、4Gバイト以上を推奨)
  • LANケーブル
  • USB メモリカードリーダ (microSD対応の物)

ソフトウェア

  • dd for windows (フリーソフト)
  • シリアルポートが使用できる端末ソフト(TeraTerm推奨)
  • 最新の microSDイメージ (下記からダウンロード)

ブート可能microSDの準備

microSDイメージファイル

を開き CAT845_JESSIE_2G_20190924.zip をダウンロードする。日付部分はその時点での最新版を選ぶ。

zip圧縮を展開すると約1.8Gバイトの microSDイメージファイルになる。

ご用意いただくmicroSDのサイズと、およそできる事の一覧

microSDサイズ出来る事
2Ggccが使える最低限のレベル
4Gapt-get で環境を整えていけるが遊んでいるうちに不足感が出るかも
8G以上快適

2Gバイト以上のmicroSDを用意する。大きい分には問題ない。

dd for windows を使って CAT845_JESSIE_2G_20190924.ddi (日付はその時点で異なる)を microSDに書き込む。

pica1.png

dd for windows は 右クリック>管理者として実行を選ぶこと。
サイズが合わないなどの警告が出るがOKを押す。

pica2.png

Linux上からの書き込み方法(CAT845を含む) 日付は書き換えてください。

# cd /tmp
# wget http://download.si-linux.co.jp/cat845/sdimage/CAT845_JESSIE_2G_20190924.zip
# unzip /tmp/CAT845_JESSIE_2G_20190924.zip CAT845_JESSIE_2G_20190924.ddi -p | dd of=/dev/mmcblk0 bs=1M
(CAT845から見て microSD は /dev/mmcblk0 に見えます。他のLinuxでは適宜書き換えてください)

2GバイトのmicroSDへイメージを書き込んだ場合、次のように2つのパーティション(p1, p2)ができる。

pica3.png

microSDのうち前半972Mbyte (1+511+460)が使われている。microSDのサイズに依らず後半は未使用で空いている。別紙の手順でp2領域をmicroSDのサイズまで拡張することもできる。 ext2_3_4パーティションの拡大方法 (内蔵ROM初期化作業だけであればこの手順は必要ない)

CAT845の立ち上げ

pica4.jpg

書き込み完了したmicroSDをCN7ソケットに挿入する。

pica5.jpg pica6.jpg

CN7 microSD図示のようにLANコネクタ方向にスライドさせると開き、CPU側へスライドさせると閉じる。microSDソケットを操作するときは必ず電源を抜くこと。通電中にソケットを操作すると金属のシールドが電源端子に接触し、最悪の場合は基板が故障する。ソケットのふた側にmicroSDメモリカードを挿入する。
CN10 シリアルコンソール付属のUART-USB変換ケーブルでPCと接続する
SW1 (4つのDIPSW)全てoff
SW3R26側 … 通常はこちら / R25側 … JTAG ICE使用時
SW2Reset SW

CAT845 CN10 が 3.3V UARTシリアルコンソール入出力である。EK845付属のシリアルUSB変換ケーブルを接続すること。その他のケーブルを使用する場合は次のピン配置を参考のこと

CN10B6B PH-K (日圧 PHコネクタ)
1GND
2RxD 3.3V TTL入力
3TxD 3.3V TTL出力
4GND
5#RESET リセットLow入力(4-5pin短絡でリセット)

pica7.png

TeraTermを開き、シリアルコンソール(COM x)を開く。
ボーレートは 2017年9月以前 38400bps , 2017年10月以後 115200bps とし、電源を投入する。

CAT845のROM領域について

本機には2つのROM領域がある

内蔵ROMQSPI 64Mbyte~ブートローダ・カーネル・mini ルートシステム
外付けmicroSD2Gバイト~32Gバイトのメモリカード対応(標準添付無し)

内蔵ROM (QSPI ROM)にブートローダ、カーネル、miniルートシステム(read-onlyなLinux)をインストールし起動することができる。この場合 microSD は任意のデータ領域として使用できる。microSD無しでも動作する。

内蔵ROM のブートローダが立ち上がった後、microSDに収録されているLinuxを起動することもできる。

カスタム方法など詳しくは「組込みLinuxガイド」を参考の事

QSPI内蔵ROMの書き換え

外付けmicroSDからの起動に切り替える

内蔵ROMを書き換えるため、外付け microSD からの起動に切りかえる。

u-bootのカウントダウン時に何かのキーを押しu-bootの起動を停止させて、起動パラメータを microSDからの起動(root=/dev/mmcblk0p2)に書き換える。

Hit any key to stop autoboot:  3               <- カウントダウン終了までに何かキーを押す
 =>

u-bootのプロンプトが表示されたら以下をコピペする

setenv bootcmd_sd 'fatload mmc 1:1 0x40007fc0 /uimage+dtb_cat845; bootm 0x40007fc0'
setenv bootargs_sd 'console=ttySC10,115200 console=tty1 ignore_loglevel ro rootfstype=ext4 root=/dev/mmcblk0p2 rootwait vmalloc=384M'

setenv bootcmd_mtd 'sf probe; sf read 0x40007fc0 0x600000 0x600000; bootm 0x40007fc0'
setenv bootargs_mtd 'console=ttySC10,115200 console=tty1 ignore_loglevel ro rootfstype=jffs2 root=/dev/mtdblock3 rootwait vmalloc=384M'

setenv boot_from_sd 'setenv bootcmd ${bootcmd_sd}; setenv bootargs ${bootargs_sd}; saveenv'
setenv boot_from_mtd 'setenv bootcmd ${bootcmd_mtd}; setenv bootargs ${bootargs_mtd}; saveenv'

saveenv

内蔵ROMを書き換えるため、外付け microSD からの起動に切りかえる。=> は u-bootのコマンドプロンプトなのでタイプはしない。

=> run boot_from_sd
=> reset

resetコマンドの実行またはリセットスイッチ(SW2)を押して Linuxを再起動する。

内蔵ROM(QSPI NOR FLASH) の各パーティションの役割

QSPI NOR FLASH使用目的
/dev/mtdblock0SPI_LOADER
/dev/mtdblock1u-boot (u-bootの環境変数記憶を含む)
/dev/mtdblock2kernel
/dev/mtdblock3rootfs (jffs2の特性上、書き換え時は 0xFFで一度全部埋めてください)

Linux起動後 /boot に置いてある初期化ファイルにて、 QSPI NOR FLASH(64MByte)を書き換える。

Debian GNU/Linux 8 cat845 ttySC10

cat845 login: root        (ユーザ名root)
Password: root            (パスワードroot ただし画面には表示されない)

# mount /boot                          (microSDの第一パーティション(FAT領域)を /bootにマウント)
mtd0,1 は書き換える必要はない
# cp /boot/mtd0_spl.bin       /dev/mtdblock0              (SPLの書き換え)
# cp /boot/mtd1_uboot.bin     /dev/mtdblock1              (u-bootの書き換え)
# cp /boot/uImage+dtb_cat845  /dev/mtdblock2              (カーネルの書き換え)
# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00040000 "loader"
mtd1: 00580000 00040000 "uboot"
mtd2: 00600000 00040000 "kernel"
mtd3: 03400000 00040000 "flash"
                  ^^^^^セクタサイズを確認する
セクタサイズが
      10000   ...  64Kバイト
      40000   .... 256kバイト
セクタサイズに合わせて mtd3 のファイルを選択する

# flash_erase /dev/mtd3 0 0                               (mtd3のイレース 約3分30秒かかる)
# cp mtd3_jffs2_cat724_日付_セクタサイズ.bin /dev/mtdblock3  (rootfsの書き換え 約2分弱かかる)
# reboot

mtd3は必ずflash_eraseで全消去してからcpで書き込んでください。

上記を一括して行うには次をコピペが便利

セクタサイズが 0x1000 64kバイトの場合

date
time ( mount /boot -o ro &&
flash_erase /dev/mtd3 0 0 &&
cp /boot/uImage+dtb_cat845 /dev/mtdblock2 &&
cp /boot/mtd3_jffs2_cat845_20190924_64k.bin /dev/mtdblock3 &&
umount /boot )

または セクタサイズが 0x4000 256kバイトの場合

date
time ( mount /boot -o ro &&
flash_erase /dev/mtd3 0 0 &&
cp /boot/uImage+dtb_cat845 /dev/mtdblock2 &&
cp /boot/mtd3_jffs2_cat845_20190924_256k.bin /dev/mtdblock3 &&
umount /boot )

内蔵ROMからの起動に切り替える

u-bootのカウントダウン時に何かのキーを押しu-bootの起動を停止させて、起動パラメータを内蔵QSPI NOR FLASH からの起動(root=/dev/mtdblock3)に書き換える。

Hit any key to stop autoboot:  3               <- カウントダウン終了までに何かキーを押す

=> run boot_from_mtd
=> reset               (またはリセットスイッチ(SW2)を押して再起動する)

現在の起動rootfsを調べる方法

u-bootのコマンドラインにて printenv を実行し bootargs= のさらに root= を調べる

=> printenv
... 略 ...
bootargs=console=ttySC10,115200 console=tty1 ignore_loglevel ro rootfstype=ext4 root=/dev/mmcblk0p2 rootwait vmalloc=384M
root=/dev/mmcblk0p2          ... mmcblk0p2 は microSD カード0 の partition2 を意味する
root=/dev/mtdblock3          ... mtdblock3 は オンボードFLASHの partition3 を意味する

関連

自動リンク

Last-modified: 2020-11-20 (金) 20:01:17 (1246d)