Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSC2018-Tokyo/Spring_OpenWrt

musashino205
February 25, 2018

 OSC2018-Tokyo/Spring_OpenWrt

musashino205

February 25, 2018
Tweet

More Decks by musashino205

Other Decks in Technology

Transcript

  1. 自己紹介 • HN: 武蔵野, 大破 • musashino_205 • musashino205 @mstdn.maud.io

    • OSSは2年目くらい(?) • Linuxはルータと戯れながら学習中 • ドメイン: taiha.net, 大破.net
  2. BUFFALO WXR-2533DHP • 仕様 • SoC: Qualcomm IPQ8064 (ARM, 2C2T,

    Max 1.4GHz) • RAM: DDR3 512MB • Flash: • SPI: 4MB • ブートローダや個体に関する設定の保持 • NAND: 256MB • OSイメージ (Kernel + Rootfs) を2組 • 後半128MBは空 • WAN/LAN: 1000Mbps x1 (WAN), 1000Mbps x4 (LAN) • WLAN: • USB: USB 3.0 Type-A x2
  3. NAND Flash • OS (Linux) の格納に使用 • MTD パーティション2つ •

    各MTD パーティション内にUBIによりボリューム3つ Bank1 0x0 – 0x4000000 (64 MiB) Bank2 0x4000000 – 0x8000000 (64 MiB) (未使用) 0x8000000 - 0x10000000 (128 MiB) MTD mtd0 (rootfs) mtd1 (rootfs_1) - UBI Vol kernel ubi_rootfs (squashfs) ubi_rootfs_data (ubifs) Kernel ubi_rootfs (squashfs) ubi_rootfs_data (ubifs) -
  4. NAND Flash - 2 • ブートには基本的にBank1 (mtd0)を使用 • Bank2 (mtd1)はバックアップ用

    Bank1 0x0 – 0x4000000 (64 MiB) Bank2 0x4000000 – 0x8000000 (64 MiB) (未使用) 0x8000000 - 0x10000000 (128 MiB) MTD mtd0 (rootfs) mtd1 (rootfs_1) - UBI Vol kernel ubi_rootfs (squashfs) ubi_rootfs_data (ubifs) Kernel ubi_rootfs (squashfs) ubi_rootfs_data (ubifs) -
  5. NAND Flash - 3 • ブート時にU-Bootが各Bankのチェックを実施 • KernelのchecksumとRootfsのchecksumをチェック Checking Bank1

    Image ... Creating 1 MTD partitions on "nand0": 0x000000000000-0x000004000000 : "mtd=0" Bank1 Image is good kernel_checksum is 0x4d51f25f , rootfs_checksum is 0xd3 Checking Bank2 Image ... Creating 1 MTD partitions on "nand0": 0x000004000000-0x000008000000 : "mtd=0" Bank2 Image is good kernel_checksum is 0x4d51f25f , rootfs_checksum is 0xd3 Bank1 Image the same as Bank2 Image
  6. NAND Flash - 4 • Bank1のchecksumが取得できない、または一致しなければ Bank2からBank1へ書き戻し • Bank2のchecksumが取得できない場合、Bank1から書き戻し •

    Kernelのchecksumはヘッダ内に含まれるdata CRC値 tofu@Tofu-H170W10:~/wxr-2533dhp$ binwalk wxr_2533dhp_jp_133 DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 128 0x80 uImage header, … , data CRC: 0x4D51F25F, OS: Linux, CPU: ARM, image type: OS Kernel Image, …
  7. NAND Flash - 6 • このchecksum算出方法は某氏から教わった • これによりイメージ生成方法を改変することで、U-Bootのチェッ クをパスできるように •

    が。 • 今度はOpenWrtがRootfsを見つけられなくなりKernel Panicするよう に • OpenWrtはRootfsのUBI Volume名としては “rootfs” しか対応し ていない • U-Bootは “ubi_rootfs” が見つからないと「ボリューム無し」と 判定してしまう(Bankが破損していると判定される) • ボリューム名をどちらかに寄せることができない • ⇒!?!? od -A n -t u1 | tr -s ' ' '¥n' | awk '{s+=$0}END{printf "%c", 255-s%256}'
  8. NAND Flash - 8 • Bank1 (mtd0)内のUBI Volumeは4つに Bank1 0x0

    – 0x4000000 (64 MiB) MTD mtd0 (rootfs) UBI Vol ubi_rootfs (sqashfs) kernel rootfs (squashfs) rootfs_data (ubifs)
  9. NAND Flash - 8 • Bank1 (mtd0)内のUBI Volumeは4つに Bank1 0x0

    – 0x4000000 (64 MiB) MTD mtd0 (rootfs) UBI Vol ubi_rootfs (sqashfs) kernel rootfs (squashfs) rootfs_data (ubifs) U-Bootのチェック OpenWrtのブート
  10. WXR-2533DHP 課題 • とりあえずOpenWrtが動作するようになったものの、UBI ボ リュームの扱いが複雑すぎる • OpenWrtで “rootfs” 以外のボリューム名も使えるようにで

    きないか…? • sysupgrade時に、ubi_rootfsを消してしまうと起動できなく なる • WXR-2533DHP用にsysupgradeスクリプトが追加で必要 • USBポートへの電源供給を管理しているGPIOが不明 • ブート時にデバイスが接続されていると、エラーを起こし て再起動するまでポートが使用不可に • BUFFALOが公開しているGPLソースコードに該当箇所を見 つけられず
  11. AXING W06 • フラッと行った秋葉原某所で見つけ、USBポートが付いていて 面白そうだなと購入 • 個人的に初めてのMediaTek MT7688AN (MIPS, 1C1T,

    575MHz) • メーカーファームがOpenWrtベースで、さほど難しくなさそう • LEDとボタン類はGPIOを1つずつ叩いて特定 • “Power” LEDがGPIOに接続していなかった • 直接3.3Vの電源回路に接続 • ステータスを表すために使用できない(点滅とか) • ある程度まとまったのでupstreamにPR • 少し議論したうえでマージ
  12. ご清聴ありがとうございました。 記事など • WXR-2533DHP – 大破雑記帳 • https://memo205.wordpress.com/2018/01/05/wxr-2533dhp/ • WXR-2533DHPをOpenWrtでサポートしてみる(経過報告)-

    鉄PCブログ • https://tetsupc.wordpress.com/2018/01/08/wxr- 2533dhp%e3%82%92openwrt%e3%81%a7%e3%82%b5%e3%83%9d%e3%8 3%bc%e3%83%88%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b%ef%b c%88%e7%b5%8c%e9%81%8e%e5%a0%b1%e5%91%8a%ef%bc%89/ • WXR-2533DHP(経過報告2)- 鉄PCブログ • https://tetsupc.wordpress.com/2018/01/19/wxr- 2533dhp%ef%bc%88%e7%b5%8c%e9%81%8e%e5%a0%b1%e5%91%8a2% ef%bc%89/ • 多摩電子工業 Axing W06 – 鉄PCブログ • https://tetsupc.wordpress.com/2018/02/21/%e5%a4%9a%e6%91%a9%e9 %9b%bb%e5%ad%90%e5%b7%a5%e6%a5%ad-axing-w06/