Guest User

Qua鯖

a guest
Apr 19th, 2020
1,380
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. =====u-bootの下ごしらえ=====
  2. UARTを繋いだら、u-bootのコンソールに入る。
  3. UART繋いだ状態で起動すると起動ログがズラズラ流れてくるが、そのときにEscキーを連打することでu-bootのコンソールに入れる。
  4. Enterだと思って時間を溶かさないようにしよう(一敗)
  5. コンソールに入ったら、env set bootdelay 5のあとにenv saveを実行して、コンソール入るまでの待ち時間を設定する。
  6. これでEscをカタカタカタせずに落ち着いてu-bootのシェルに入れる。
  7.  
  8. =====ディストリをHDDにインストール=====
  9. [https://old.haruroid.com/haruroid.0t0.jp/blog/archives/1535.html]
  10. ほとんどこれにまとまっている。HDDをext4にフォーマットするのをお忘れなく(Debian系はdebootstrapで同じことをすれば良い...多分。でもArch面白いので是非)
  11. しかしArchをインストールするときに pacstrap /mnt linux base base-devel linux-firmware じゃないと最近のArchは駄目らしい
  12. あとはnanoとかnetworkmanagerを入れておくと色々便利。
  13.  
  14. それから、のちのち使うのでPARTUUIDも取得しておく。
  15. sudo blkid して、ディストリ入れたHDDのパーティションの PARTUUID="<ここの固有ID>"
  16. をメモっておく。417c79bb-05みたいな感じ。
  17.  
  18. =====カーネルビルド=====
  19. カーネルのGit<https://github.com/BPI-SINOVOIP/BPI-W2-bsp>
  20. これの1.0の.configをはるろいど氏がすでに調整してGistに置いてくださっているので、ありがたく使わせていただく。(最新の1.1ではコンフィグ通らんので注意!)
  21. カーネル1.0 <https://github.com/BPI-SINOVOIP/BPI-W2-bsp/releases/tag/w2-4.9-v1.0>
  22. zipをwgetなりaxelなりで落とす。
  23. そしたら適当なとこにunzip
  24. .config <https://gist.github.com/Haruroid/a422f478716bd1049c5a4774fa085bf0>
  25. これを haruroid.config に改名してどこかに保存する。
  26. ビルドには公式Dockerを使ってもいいが、入れるもん入れとけば、普通のUbuntu上でビルドできる(build-essential、bc、libncurses5-devあたり...?)
  27. しかし入れたてのUbuntuとかなら、素直にDockerを使うことをおすすめする。
  28. haruroid.configを.configとしてlinux-rtに放り込む(cp haruroid.config ./linux-rt/.configみたいな感じで)
  29. BPI-W2-bspに移動して./build.sh。(このカーネルは設定とかをこのスクリプトで全部できるので便利。)
  30. そしたら4. kernel configure.を選択。
  31. buildなんちゃら...とか出て焦るが、まだ本ビルドはしてないので落ち着こう。
  32. 設定をいじるならいまのうち。
  33. その後はEsc二回押しで保存して設定を終える。
  34. コンソールに戻ったら、もう一回./build.sh
  35. あとは1を選択してLet's Build!
  36. エラーとか出るが、まあ、多分大丈夫です。(普通に動いてるし...)
  37. ビルドはまあまあ長い(緑茶20杯分くらい。)
  38. mkdirでエラー吐いてBuild Failed!になったら、mkdirで作ろうとしているフォルダの一個手前まで作って再度実行すると最後まで通る。
  39. 無事にビルドおわったら、BPI-W2-bsp-w2-4.9内にSDフォルダーがあるか確認。
  40. BPI-W2-bsp-w2-4.9-v1.0/SD/bpi-w2/BPI-BOOT/bananapi/bpi-w2/linuxにuImageとbpi-w2.dtbがある(はず)
  41. そしたら、USBメモリをfat32でフォーマット。
  42. 中にdtbとuImageをわかりやすい名前で保存。
  43. それから、linux-rt/output/lib/modules以下のフォルダも名前そのまんまいれておく。(これがないとwlan動かん)
  44. これでカーネルの準備終わり。
  45. あとはしっかり起動することを祈るのみ...
  46.  
  47. =====自作カーネルを動かす=====
  48. 2つあるうちどっちでもいいので、どっちかのUSBポートに上のUSBをさす。
  49. そしたら起動。u-bootのコンソールに入る。(待ち時間設定したあとはEnterとかでも入れたはず...)
  50. そしたら以下のコマンドを順番に入力
  51.  
  52. usb start
  53. fatload usb 0 0x01f00000 /<デバイスツリーのファイル名>
  54. fatload usb 0 0x03000000 /<uImageのファイル名>
  55. b2ndbc
  56. env set bootargs "earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200n8 initrd=0x02200000,0x7F0000 root=PARTUUID="<上でメモったPARTUUID>" rw rootwait rootfstype=ext4 init=/sbin/init selinux=0 nmi_watchdog=1 devtmpfs.mount=1"
  57. booti 0x03000000 - 0x01f00000
  58.  
  59. これで起動するはず。
  60. Welcome to ArchLinuxみたいなのがでて、Enter押してログイン画面がでたら成功。とりあえず一安心。
  61. あとはroot、パスワードなしでログイン。
  62. コンソールが騒がしいので、dmesg -Dで黙らせよう。
  63. wlanが使えないと鯖として絶望的だし、SSHのほうが見やすいのでとりあえずwlanを使えるようにする。
  64. mount /dev/sdb1 /mnt (環境に合わせて)
  65. でUSBを/mntにマウント。
  66. cp -Rなりmvなりでlinux-rt/output/lib/modules以下にあったフォルダを/lib/modulesに放り込む。
  67. cd /lib/modules/4.9.119-BPI-W2-Kernel/kernel/extra
  68. で移動する。lsするとわかるが、あれこれカーネルモジュールがある。
  69. insmod 8192ee.ko
  70. insmod 8812ae.ko
  71. そしたら、ip linkでしっかりwlanが動いているか確認。
  72. 一覧にあったら、network-managerのデーモンを動かしてWifiの設定をする。
  73. systemctl start NetworkManager
  74. systemctl enable NetworkManager
  75. nmtui でWifiの設定すませる。
  76. あとはssh入れればだいたいサーバーになる。
  77. Archは設定を自分でいろいろする必要があるのでWikiを見ながらがんばろう。(arch sshとかで検索すると良い。他のディストリでも応用できるのでおすすめ。)
  78. Wifiがしっかり動いたら、cp -R /lib/modules/4.9.119-BPI-W2-Kernel/kernel/extra /lib/modules/4.9.119/kernel/
  79. その後にdepmod -aして再起動。
  80. 起動後に何もしなくてもWifiが動いていたら成功。
  81.  
  82. ちなみにUSBからの自動起動をする場合は
  83. env set bootcmd "usb start;fatload usb 0 0x01f00000 /<dtbのファイル名>;fatload usb 0 0x03000000 /<uImageのファイル名>;env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200n8 initrd=0x02200000,0x7F0000 root=PARTUUID="<HDDのPARTUUID>" rw rootwait rootfstype=ext4 init=/sbin/init selinux=0 nmi_watchdog=1 devtmpfs.mount=1;env set bootcmd 'booti 0x03000000 - 0x01f00000';b2ndbc"
  84. をu-bootコンソールで実行して、 env save。
  85.  
  86. しかし後述のEMMCからの起動の方が早いしUSBポートが空くのでおすすめ。
  87.  
  88. =====EMMCからの起動=====
  89. [https://gist.github.com/ugaharu/cb1acdb9d683a3a9fb16c6c44b683eb1#file-howto_use_zidoo_kernel]を参考にZidooのレスキューカーネル用USBを作る。
  90. http://apidl.zidoo.tv/X9S/v2.1.36/ZIDOO_X9S-v2.1.36-202001141356-ota.zipを落として、fat32なUSBに展開して終わり。
  91. 自作カーネルのuImageとdtbをわかりやすい名前で入れておく。(コピー後にハッシュ値が一致するか確認しておくと安全)
  92. あとはUSBをUSBポートにさして(自作カーネル起動で使ったUSBは抜いておく)u-bootコンソールで
  93. goru
  94. たまに起動失敗するが、3回くらいするとどうにかなる。
  95. そしたらZidooの泥カーネルが起動するので、
  96. dd if=/dev/zero of=/dev/block/mmcblk0 seek=44192768 bs=1 count=20935168 //EMMCのカーネル部分のゼロ埋め
  97. dd if=/mnt/usb/<uImageのファイル名> of=/dev/block/mmcblk0 seek=44192768 bs=1 //EMMCへのカーネル書き込み
  98. dd if=/dev/zero of=/dev/block/mmcblk0 seek=6488576 bs=1 count=62714 //EMMCのdtb部分のゼロ埋め
  99. dd if=/mnt/usb/<dtbのファイル名> of=/dev/block/mmcblk0 seek=6488576 bs=1 //EMMCへのdtb書き込み
  100. でEMMCにカーネルを焼く。
  101. Qua純正の泥をいじりたい人はddでEMMCのバックアップを取っておこう。あんまいないと思うけど。
  102. あと、/mnt/usbに移動して、ls -lからuImageとdtbのサイズをメモっておく。(重要)
  103. サイズをメモったら、計算タイム。
  104. uImage or dtbのサイズ(10進数)を512で割る。
  105. 小数点以下になった場合は小数点以下を切り離して整数部分に+1(例:24.5→25 68.1→69)
  106. 割って小数点以下を切ったら、その値を16進数に変換する。
  107. これをuImage、dtb両方で実行してメモっておく。
  108. そしたら、u-bootのコンソールに入って、
  109. mmc read 0x03000000 1512a <uImageの上のやつの値>
  110. mmc read 0x01f00000 3181 <dtbの上のやつの値>
  111. env set bootargs "earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200n8 initrd=0x02200000,0x7F0000 root=PARTUUID="<HDDのPARTUUID>" rw rootwait rootfstype=ext4 init=/sbin/init selinux=0 nmi_watchdog=1 devtmpfs.mount=1"
  112. booti 0x03000000 - 0x01f00000
  113. これで起動するはず。
  114. 起動したら、
  115. env set bootcmd "mmc read 0x03000000 1512a <uImageの上のやつの値>;mmc read 0x01f00000 3181 <dtbの上のやつの値>;env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200n8 initrd=0x02200000,0x7F0000 root=PARTUUID="<HDDのPARTUUID>" rw rootwait rootfstype=ext4 init=/sbin/init selinux=0 nmi_watchdog=1 devtmpfs.mount=1;env set bootcmd 'booti 0x03000000 - 0x01f00000';b2ndbc"
  116. env save
  117. で自動で起動できるようにする。
  118. これでおしまい。
  119. お疲れ様でした。
  120.  
  121. =====応用編=====
  122.  
  123. ---スワップ---
  124. カーネルやDTBはandroidのboot領域と同じところに焼いてるので、それ以外のEMMCの領域は自由に使える。
  125. なので、androidのユーザー領域をスワップ化してみる。
  126. EMMCはそこそこ速いやつらしいので多分大丈夫。
  127. mkswap /dev/mmcblk1p2
  128. swapon /dev/mmcblk1p2
  129. これでスワップが有効になる。
  130. ただしmmcblk1p2の中身は綺麗サッパリフォーマットされるので注意。
  131. 起動時に有効にしたい場合はfstabに書き込んでおこう。
  132. [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97]
  133.  
  134. ---LTEモジュール---
  135. 分解がやや大変だが、QuaStationの二層目にはLTEモジュールがPCIeで刺さってる。
  136. 取りたい方はどうぞ。
  137.  
  138. =====参考にさせて頂いたサイト様=====
  139. https://old.haruroid.com/haruroid.0t0.jp/blog/archives/category/android/qua-station.html
  140. https://old.haruroid.com/haruroid.0t0.jp/blog/archives/1309.html
  141. https://old.haruroid.com/haruroid.0t0.jp/blog/archives/1509.html
  142. https://old.haruroid.com/haruroid.0t0.jp/blog/archives/1535.html
  143. https://old.haruroid.com/haruroid.0t0.jp/blog/archives/1566.html
  144. https://gist.github.com/ugaharu/cb1acdb9d683a3a9fb16c6c44b683eb1#file-howto_uboot
  145. https://gist.github.com/ugaharu/cb1acdb9d683a3a9fb16c6c44b683eb1#file-howto_update
  146. https://gist.github.com/ugaharu/cb1acdb9d683a3a9fb16c6c44b683eb1#file-howto_use_zidoo_kernel
RAW Paste Data