MousePro MPro NB390H2-SSDの修理とWindowsインストール、そしてLTE内蔵改造


秋葉原のPCショップ EYESにてMousePro MPro NB390H2-SSDが5480円で売っていた。

画像

電源コネクタ破損ということでたぶん動くだろうと購入。

中を開けてみると、まぁ見事な壊れよう(なお、開ける時は左側の電源コネクタがある方から開けるといい。右側だとオーディオ端子とVGA端子の出っ張りがあって邪魔をするから)

画像

19V電源だけど、東芝/富士通系19Vとは大きさが微妙に違い刺さらないサイズなので、おそらく気がつかないアホが無理矢理押し込んで壊したんだと思われる。

画像

元のコネクタはこんな感じだったらしいけど、どれだけの力をかければ壊せるのか・・・

電源コネクタ部分は別基板になっていたので取り外して観察してみる

画像
画像
画像

基板に書かれていた「W330C」という文字列が機種名っぽかったので検索したところ、Clevo社のW330SU2というのがOEM元モデルのようである。

最初はコネクタを取り外して、東芝/富士通系と同じものに置き換えるつもりで部品も用意したんだけど、手持ちの半田ごてだとうまく取り外せなかったので、ケーブル伸ばして無理矢理配線でごまかした。

画像

Windows 10はすんなり入ったものの「SMバスコントローラ」が未認識。

画像

Clevo社のDownloadページから「Model:W330SU2」の「Driver:ALL」で表示させた中から「Chipset driver 10.0.17 for Win8.1 64bit」をダウンロードしてセットアップを実行してインストールする。

また、キーボード上の青いキー操作の内、音量操作などは動作しますが、液晶の輝度操作が動きません。こちらは「Hotkey driver 3.03.12 for Win8.1 64bit」をインストールすることで使えるようになるのでこちらもダウンロード/インストールします。

ちゃんと動くようになったので改造検討

WiFiの横にある「H=3 M」は、たぶんMキーという意味で、近くに「SSD」という記載も見えるのでNVMe SSDも行けるM.2 2280っぽい。

画像

もう一つの「H=4 B」はBキーという表記で、「3G」という表記。そして、そこに置かれている未接続のケーブル2本

ケーブルの先を確認すると「LTE」と書かれたアンテナっぽい基板に接続されている。

というわけで、たまたまジャンク500円で購入していたLTEカード(EM7330)をさしてアンテナケーブルを接続

どこかにSIMスロットがあるはず、と探すとすぐ近くに発見。

こちらバッテリーを取り外した時に、バッテリーコネクタの隣になります。

電源を入れると普通にWindows10上で認識し、使える様になりました。

画像

ESXi上のNutanix CE AHVをアップデートした


ESXi上にNutanix CE AHVをインストールした」でインストールしたNutanix CE環境をアップデートしてみた。

トラブルポイントのまとめ

なんとなく手順を進めていったらいくつかキツイ問題が発生してアップデートプロセスが止まったりした。今回発生した問題は下記3点

・AHVのrootパーテーション容量が足らない
・AHV内の標準仮想マシン設定にあるPC Typeが初期値に戻るので既存の仮想マシンが起動しない
・AHV内のCVM仮想マシン設定にあるPC Typeがpc-i440fx-rhel7.3.0になり起動しない
・CVM仮想マシンのメモリが12GBだとサービスが起動しない

なお、調査の際に参考になったページ「Nutanix CE: Cannot Start VM」「Guest VM Running in Nested Nutanix CE on VMware vSphere Won’t Boot

CVM仮想マシン上のサービスが起動しないあたりは「PRISM SERVICES HAVE NOT STARTED YET. PLEASE TRY AGAIN LATER

実際に実施した手順はもっといろいろあったが、完了後に、たぶんこの順序で実施すれば大丈夫だったんだろう、というものを下記に手順として残す。

手順1 アップデータ入手

Download Nutanix CE, Docs, and Guides」から下記3ファイルをダウンロード。

・「Metadata for AOS, AHV upgrades and PC deployment」のce-2019.11.22-metadata.zipを展開してjsonファイルを取りだしておく
・「AOS Upgrade」(ce-2019.11.22-upgrade.tar.gzのまま)
・「AHV Upgrade」(host-bundle-el7.nutanix.20191030.415.tar.gzのまま)

手順2 CVM仮想マシンの自動起動を止める

この後、何回かNutanix CE仮想マシンを再起動する。その際にCVM仮想マシンの起動が完了するのを待っていると時間がかかるので、自動起動を止める。

「virsh list –all」でCVM仮想マシンのIDを確認して、「virsh autostart <ID> –disable」と実行すると自動起動が止まる。

手順3 Nutanix CE仮想マシンのディスク拡大

AHVのrootパーテーションの空き容量が足らない為アップデートが失敗する。

このため、vSphere側でNutanix CE仮想マシンのディスクサイズを拡大する。

標準の「ハードディスク1」が約7GBとなっている。

これを、12GBに増やす。

変更後、Nutanix CE仮想マシンを再起動する。

再起動後、vSphereのコンソールを開き「root」ユーザでログインする。デフォルトパスワードは「nutanix/4u」

ログイン後、現在のディスク使用状況と、システムディスクである/dev/sdaのパーテーション構成を確認する。

「df -h」と「fdisk -l /dev/sda」を実行する。

パーテーション変更は「fdisk /dev/sda」を実行して行う。

既存のパーテーションを「d」で消して、新しいパーテーションを作成しなおす、という形になる。

bootフラグのセットも忘れずに

最後は「w」で書き込みを実行する。

再起動しないと新しいパーテーションで認識してくれないので、再度Nutanix CE仮想マシンを再起動する。

再起動後、再度「fdisk -l /dev/sda」と「df -h」を実行してみると、fdiskの方は新しいディスクサイズで認識しているが、rootパーテーションはまだ古い容量のままとなっている。

「resize2fs /dev/sda1」を実行してファイルシステムの拡張を行い、新しいディスク容量が反映される。

手順4 CVM仮想マシンの自動起動を戻す

AHV内のCVM仮想マシンの自動起動設定を戻し、自動起動するようにする。

「virsh list –all」でCVM仮想マシンのNameを確認して、「virsh autostart <Name>」を実行する。(起動していない場合はIdが割り当てられていないので、Nameで指定する必要がある)

自動自動設定ができたかどうかは「/etc/libvirt/qemu/autostart/」にXMLファイルがあるかで確認する。

「virsh start <Name>」でCVM仮想マシンを起動するか、rebootでNutanix CE仮想マシンを再起動する。

手順5 AOSアップデート

Nutanixにログインして「設定」の「ソフトウェアアップグレード」にある「AOS」を開く。

「AOS base softwareバイナリをアップロード」のリンクをクリック

AOS BASE SOFTWAREメタデータファイルは「ce-2019.11.22-upgrade-metadata.json」
AOS BASE SOFTWAREバイナリファイルは「ce-2019.11.22-upgrade.tar.gz」
を指定する。

「今すぐアップロード」をクリックする。

上記の様になったらアップロード成功。

「Upgrade Now」を選択してアップデートを開始する。

アップグレードが進んでいきます。

ちなみに「Nothing To Do?」は下記の2048ゲームが表示されます。

途中、CVM仮想マシンの再起動などがあり、完了します。

手順6 Hypervisorのアップデート

Nutanixの「設定」の「ソフトウェアアップグレード」にある「Hypervisor」を選択。

「upload a Hypervisor Binary」をクリックし、下記の選択をして「今すぐアップロード」する。

HYPERVISOR メタデータファイル「host-bundle-el7.nutanix.20191030.415-metadata.json」
HYPERVISOR バイナリファイル「host-bundle-el7.nutanix.20191030.415.tar.gz」

続いて、「Upgrade Now」を実施する。

で、アップグレードが進んでいきます。

たぶん、下記の様な「71%」から30分以上待っても進まないと思います。

いまの状態はHypervisorはアップデートできたものの、その上のCVM仮想マシンが起動していない状態となります。

手順7 AHV上の仮想マシンの標準設定の修正

vSphere上でNutanix CEを稼働させた場合、標準設定の状態ではNutanix上で作成した仮想マシンが起動しません。

起動させるためには、「/var/cache/libvirt/qemu/capabilities/3c76bc41d59c0c7314b1ae8e63f4f765d2cf16abaeea081b3ca1f5d8732f7bb1.xml」 のalias=’pc’をpc-i440fx-rhel7.2.0の行に付け直します。

該当ファイルは下記の様な形になっていて、「alias=’pc’」がpc-i440fx-rhel7.3.0の行についています。

これを「pc-i440fx-rhel7.2.0」の行に「alias=’pc’」設定を移動させます。

手順としては、pc-i440fx-rhel7.3.0の行をpc-i440fx-rhel7.2.0書き換えて、既存のpc-i440fx-rhel7.2.0設定を削除するのが簡単でしょう。

画像

手順8 AHV上のCVM仮想マシン設定の修正

CVM仮想マシンの仮想マシンタイプ設定が「pc-i440fx-rhel7.3.0」に設定されていました。

設定の確認は「virsh dumpxml <name>|less」で行います。
設定変更は「virsh edit <Name>」となります。

viコマンドでxmlファイルが開かれますので、「pc-i440fx-rhel7.3.0」を「pc-i440fx-rhel7.2.0」に書き換えて保存します。

また、「<memory unit=’KiB’>~</memory>」のメモリ容量を増加させます。Nutanix CE標準だと最低28GBとなっているようです。

参考としてGUIから設定できるCVMに割り当てられる容量を以下に占めます。

なお、今回はxml書き換えで約26GBと設定しています。

この後、CVM仮想マシンを再起動します

面倒ならNutanix CE仮想マシンごとrebootします。

手順9 終了

lvglのALIGN設定を確認した


TTGO T-Watch-2020で画面にいろいろ要素を足してみる時に設定するLV_ALIGN_IN_~とかLV_ALIGN_OUT_~の違いがよくわからないのでドキュメントサイトを検索してみたけど、資料が無かった…

2020/09/08 公式に追加された「Base object (lv_obj) Alignment

仕方が無いので実際に表示をして確認してみた。

縦方向: y もしくは height
横方向: x もしくは width

文字列が長くなるので「LV_ALIGN_IN_BOTTOM_RIGHT」だったら「IN_BOTTOM_RIGHT」というように「LV_ALIGN_」の部分を省略している。

LILYGO TTGO T-Watch-2020が届いたので開発環境を作って動かしてみた


LILYGO TTGOからT-Watch-2020が登場。

販売ページ「LILYGO® TTGO T-Watch-2020 ESP32 Main Chip 1.54 Inch Touch Display Programmable Wearable Environmental Interaction
資料「https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library

発売直後に注文入れたのですが、発送される前に値下がりしてたり、中継地点のシンガポールにつくまで1ヶ月以上音沙汰がなかったりと、約2ヶ月かかるとは思いませんでした。

画像
画像

中身は本体とmicroUSBケーブルだけでした。

初代T-WatchはType-Cコネクタでしたが、microUSBだとは・・・

画像

横についているボタンを押しても電源が入らなかったので、microUSBで電源供給してみたところテストプログラムが実行されました。

画像

とりあえずは問題ないようです。

では、開発環境を作って書き換えましょう。

ドキュメントとして「https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library」と「T-Watch Document」が書かれていますが、後者の記述は微妙なので無視ですね。

初期設定

(1) Arduino IDEをインストール

Arduino IDEをダウンロードしてインストール。うちの環境はWindows10なので Microsoft Storeからインストールしました。

(2) TTGO_TWatch_Library ライブラリをインストール

https://github.com/Xinyuan-LilyGO/TTGO_TWatch_Library の「Clone or download」から「Download Zip」を選択してzipファイルをダウンロード。

Arduino IDEの[スケッチ]-[ライブラリをインクルード]-[ZIP形式のライブラリをインストール]にてダウンロードしたzipファイルを指定してインストール。

追加が成功すると画面下部に以下が表示されます。

また「ドキュメント\Arduino\libraries」に「TTGO_TWatch_Library-master」が作成されます。

(3) Arduino IDE Boards Managerにespressif社のURLを登録

Arduino IDEの[ファイル]-[環境設定]の「追加ボードマネージャのURL」に「https://dl.espressif.com/dl/package_esp32_index.json」を追加する。

(3) T-Watchを選択する

Arduino IDEの[ツール]-[ボード]-[ESP32 Arduino]-[TTGO T-Watch]を選択する。(下の方に登録されている)

(4) スケッチ例からSimple Watchを呼び出す

Arduino IDEの[ファイル]-[スケッチ例]-[TTGO T-Watch]-[lvgl]-[Simple Watch]を選択する。

(5-1) Simple WatchをT-Watch-2020用に書き換える(2020/06/28以降のTWatch_Libraryの場合)

2020/06/28以降のlvgl 7.0.0対応のTWatch_Libraryの場合、SimpleWatchを選択した場合にタブで表示される「config.h」にて使用するT-Watchのバージョンを選択するようになった。
T-Watch-2020を使用する場合は、下記の様に「//define LILYGO_WATCH_2020_V1」のコメントを削除する。

// => Hardware select
// #define LILYGO_WATCH_2019_WITH_TOUCH     // To use T-Watch2019 with touchscreen, please uncomment this line
// #define LILYGO_WATCH_2019_NO_TOUCH          // To use T-Watch2019 Not touchscreen , please uncomment this line
#define LILYGO_WATCH_2020_V1             //To use T-Watch2020, please uncomment this line


// => Function select
#define LILYGO_WATCH_LVGL                   //To use LVGL, you need to enable the macro LVGL

#include <LilyGoWatch.h>

(5-2) Simple WatchをT-Watch-2020用に書き換える(2020/06/28より前のTWatch_Libraryの場合)

2020/06/28より前のTWatch_Libraryの場合、「SimpleWatch」のファイル冒頭に「// #define LILYGO_TWATCH_2020_V1 // If you are using T-Watch-2020 version, please open this macro definition」とあるように、T-Watch-2020を使う場合はここのコメントを外す必要がある。

/*
Copyright (c) 2019 lewis he
This is just a demonstration. Most of the functions are not implemented.
The main implementation is low-power standby. 
The off-screen standby (not deep sleep) current is about 4mA.
Select standard motherboard and standard backplane for testing.
Created by Lewis he on October 10, 2019.
*/

#define LILYGO_TWATCH_2020_V1        // If you are using T-Watch-2020 version, please open this macro definition

#include <TTGO.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
<以下略>

こんな感じに書き換える。

(6) Simple Watchを日本時間対応にする

SimpleWatchの「gui.cpp」というタブ内で、時刻表示が「CST-8」と設定されているので、それを「JST-9」に書き換えます。

<略>
#include "FS.h"
#include "SD.h"

#define RTC_TIME_ZONE   "JST-9"


LV_FONT_DECLARE(Geometr);
<略>

こんな感じです。

また、「gui.cpp」ではNTPサーバの接続先も設定されています。標準は「pool.ntp.org」ですが、日本国内の「ntp.jst.mfeed.ad.jp」(INTERNET MULTIFEED運営)や「ntp.nict.jp」(NICT運営)に書き換えてください。

(7) T-Watch-2020をパソコンにつなげます

microUSBケーブルを使ってT-Watch-2020をつなげます。

USBシリアルCP2104用のドライバがインストールされていない場合は https://t-watch-document-en.readthedocs.io/en/latest/download/index.htmlCP2104の公式ページなどからSilicon Labs Virtual COM Port (VCP) Universal Driverを入手してインストールします。

(8) T-Watch-2020が接続されたCOMポートを指定します。

Arduino IDEの[ツール]-[シリアルポート]にてCOMポートを指定します。

Arduino IDEの[ツール]-[Upload Speed]は「1152000」と指定しています。この速度はT-Watchのサンプルコードのシリアル入出力で見かける速度指定なので使っています。

それ以外の項目は特に変えていません。

ちなみに「PortPop」というアプリをインストールしておくと、デバイスをつなぎWindows上でCOMポートとして認識した時点で、何番として認識されたのかを教えてくれるので便利です。

(9) コンパイルと書き込み

Arduino IDEの[スケッチ]-[マイコンボードに書き込み]を選択して、コンパイルと書き込みを実行します。

(10) 完成

WiFiをスキャンしてSSID一覧を作り、そこから接続先を選択し、キーを入力することで、ネットワークに接続し、NTPサーバから時刻同期を行う、ということが可能となりました。

画像
画像
画像

Simple Watchの操作は「画面タッチ」です。横の丸ボタンは画面ON/OFFのみのようです。

また、WiFi以外に「Settings」「SDcard」「Camera」などのメニューがありますが、現状未実装です。押しても何も発生しません。

次に作るものは、と製品紹介ページに載っている下記画像を実現できるソースコードを探してみたところ・・・

画像

LilyGoGui」でした。

画像

が・・・時間が変わらないのでおかしいな、とソースを見てみると、画面表示のサンプルなだけで、全てが固定表示だったという・・・

そっか・・・時計実装は自前でやらなきゃならないのか・・・

GloDroidがninjaのエラーでビルドできない


PinePhoneやOrange Pi OneなどのAllwinner SoCで動くAOSPベースのandroidであるGloDroidというのがある。

これはGoogle Play StoreなどのGoogle関連(GMS)が入っていないので使いづらい。OpenGappsでも入れられないかなぁ?とパッケージをみてみたけど、こちらはTWRP用にカスタマイズされていてよく分からない・・・

GloDroidのgithubを見るとprebuilt_appsなんてレポジトリがありfdroidとkodiのインストールについての定義がある。ここらを応用すれば何かできないかなぁ、と思ってGloDroidを自分でビルドしてみることにした。

最初Ubuntu 18.04環境で作ってみたけど、うまくいかないのでGoogleのドキュメント上では推奨されているUbuntu 14.04環境作ってみたりしたけど、うまくいかなかった。

エラーの状況

Ubuntu 18.04でもUbuntu 14.04でもほぼ同じで下記のようなエラーが出力されます。

============================================
[100% 451/451] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
Killed
10:47:31 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.build/make/core/main.mk:21: recipe for target 'run_soong_ui' failed
make: *** [run_soong_ui] Error 1
osakanataro@ubuntuserver:~/GloDroid$

out/soong.log の最後は下記のようなエラーです。

2020/06/12 10:47:31.168342 build/soong/ui/build/exec.go:95: soong bootstrap failed with: exit status 1

Ubuntu 14.04の場合

Javaのバージョンが古いので新しいOpenJDKを使える様にする。

$ sudo add-apt-repository ppa:openjdk-r/ppa
$ sudo apt install openjdk-13-jdk

Googleのドキュメント(Establishing a Build Environment)記載のパッケージをインストール。

$ sudo apt install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip

また、上記のNoteに記載されている「python-networkx」と「libnss-sss:i386」も必要で、これが無いことでninjaのエラーがでていました。

$ sudo apt install python-networkx libnss-sss:i386

Repoのインストールを「Downloading the Source」記載の手順で行います。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
 gpg --recv-key 8BB9AD793E8E6153AF0F9A4416530D5E920F5C65
$ curl https://storage.googleapis.com/git-repo-downloads/repo.asc | gpg --verify - ~/bin/repo

repo内部ではgitコマンドを使用するためgitの初期設定も行います。

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

次にGloDroidで要求されているパッケージをインストール。(記述にはrepoが含まれてますがパッケージじゃないので抜く)

$ sudo apt install swig  python-dev python3-dev libssl-dev flex bison device-tree-compiler

で・・・この後、試行錯誤した結果、さらに以下のパッケージも必要でした。

$ sudo apt install python-pip gettext gdisk

Ubuntu 18.04の場合

Ubuntu 14.04の場合とだいたい一緒でした。

いまコンパイルして実証中です・・・(まだ結果が出ていない

2020/06/13 22:39 うーん・・・エラーだ

[100% 8/8] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
Killed
22:37:24 soong bootstrap failed with: exit status 1
ninja: build stopped: subcommand failed.
#### failed to build some targets (02:38:03 (hh:mm:ss)) ####

out/soong.log の最後のあたりはこんな感じ

2020/06/13 19:59:25.251629 build/soong/ui/build/dumpvars.go:109: PRODUCT_SOONG_NAMESPACES
2020/06/13 19:59:25.252084 build/soong/ui/build/exec.go:57: prebuilts/build-tools/linux-x86/bin/nsjail [-x build/blueprint/bootstrap.bash -H android-build --cwd /home/osakanataro/GloDroid -t 0 -e --proc_rw -u nobody -g nogroup --rlimit_as soft --rlimit_core soft --rlimit_cpu soft --rlimit_fsize soft --rlimit_nofile soft -B / --disable_clone_newcgroup -q -- -t]
2020/06/13 19:59:25.326955 build/soong/ui/build/exec.go:57: prebuilts/build-tools/linux-x86/bin/nsjail [-x out/soong/.bootstrap/bin/soong_env -H android-build --cwd /home/osakanataro/GloDroid -t 0 -e --proc_rw -u nobody -g nogroup --rlimit_as soft --rlimit_core soft --rlimit_cpu soft --rlimit_fsize soft --rlimit_nofile soft -B / --disable_clone_newcgroup -q -- out/soong/.soong.environment]
2020/06/13 19:59:25.761444 build/soong/ui/build/exec.go:57: prebuilts/build-tools/linux-x86/bin/nsjail [-x prebuilts/build-tools/linux-x86/bin/ninja -H android-build --cwd /home/osakanataro/GloDroid -t 0 -e --proc_rw -u nobody -g nogroup --rlimit_as soft --rlimit_core soft --rlimit_cpu soft --rlimit_fsize soft --rlimit_nofile soft -B / --disable_clone_newcgroup -q -- -d keepdepfile -w dupbuild=err -j 2 --frontend_file out/.ninja_fifo -f out/soong/.minibootstrap/build.ninja]
2020/06/13 19:59:27.066701 build/soong/ui/build/exec.go:57: prebuilts/build-tools/linux-x86/bin/nsjail [-x prebuilts/build-tools/linux-x86/bin/ninja -H android-build --cwd /home/osakanataro/GloDroid -t 0 -e --proc_rw -u nobody -g nogroup --rlimit_as soft --rlimit_core soft --rlimit_cpu soft --rlimit_fsize soft --rlimit_nofile soft -B / --disable_clone_newcgroup -q -- -d keepdepfile -w dupbuild=err -j 2 --frontend_file out/.ninja_fifo -f out/soong/.bootstrap/build.ninja]
2020/06/13 22:37:24.168572 build/soong/ui/build/exec.go:95: soong bootstrap failed with: exit status 1