HTCのAndroid機共通のHBOOTからの操作について (HTC速報Dev)
HTCのAndroid機にはすべてHBOOTと名付けられたサービスモード(ブートローダーモード)が存在します。
hbootのソースコード等は公開されておらず、hbootの状態によって機種本体のプロテクト等のON/OFFを制御したり、現在のセキュリティ状態を表示しています。
その表示内容は、発売時期、搭載SoCなどによって変化しているので追えていない部分も有ります。
このhbootを起動するためには完全に電源を落とした後、音量下を押しながら電源を入れると起動します。
機種によって表示内容は変わりますが以下のような解釈でいいと思います。
HBOOT-8620
- *** LOCKED *** → ロック状態
- SHOOTER_K → コードネーム
- PVT → 機器のバージョンタイプ(開発段階表示)
- SHIP → HBOOTの属性種類
- RL → 不明
- HBOOT-1.50.0000 → HBOOTバージョン
- RADIO – 1.02.00.0906 → Radioバージョン
- Sep 7 2011,16:06:41 → HBOOTのビルド日
- HBOOT → 今のモード
HBOOT表示
2011年度のHTC機のHBOOT (ISW12HT完全純正状態) | 2012年度のHTC機のHBOOT (HTC J UNLOCK済み + TAMPERD状態) |
PLATFORM : HBOOT-8260 | PLATFORM : HBOOT-8960 Felica対応版 |
HBOOTからはリカバリーモードを起動したり、ファクトリーリセットを行ったりする事が出来ます。
一部の機種ではIMEIやシリアルナンバーをバーコード表示されていたりする機種も有ります。
HBOOTのロック表示について
- LOCKED
- UNLOCKED
- RELOCKED
- Security Warning
- TAMPERD
– LOCKED
画像のように「*** LOCKED ***」と表示されている状態は一度もブートローダーロック解除していない初期状態となっています。
完全にプロテクトされており、仮にSystemなどNAND部分の改変を行ったとしても元に戻ってしまいます。
– UNLOCKED
「*** UNLOCKED ***」となっている場合はHTCの公式アンロックを行っている状態でありSystem領域の改変が可能になるのに加え、ブートローダーで制御している部分の書き換えが可能になりますが、(一部分のNANDロックが解除される)セキュリティチェックで弾かれてしまうために公式のRUUは当てられません。
改変可能部分
- カーネル
- リカバリー
- システム内部
その他詳細部分(CarrarIDなど)は改変できません。
HTCの機器保証は無くなります。
ですが、HTC機でカスタムROM等を利用するだけならば開発者アンロックの状態で十分だと思います。
– RELOCKED
「*** RELOCKED ***」となっている状態は、アンロック状態から再度ロックを掛けた場合に表示され、機能上は完全に「LOCKED」の状態に戻るためにRUUの適用が可能になります。
リロックを行うコマンドは以下となります
fastboot oem lock
HTCの保証は受けられない状態です。
– Security Warning
LOCKED時やRELOCKED時にシステム内やブートローダーに改変が在るとロック状態の下に「*** Security Warning ***」と表示され、RUU適用か元の状態に戻るか再度アンロックを行うまで起動不可状態になります。
– TAMPERD
今期のSnapdragon S4を搭載したHTC機(詳細にはPLATFORM : HBOOT-8960/HBOOT-8064)は改ざんが有るとロック表示の上に「*** TAMPERD ***」と表示されるようになりました。
この表示は表示されていても特に操作は変わりませんが、System内やその他に改変が見られると、どの状態でも表示されるようです。
この表示を消すためには、RUUを適用するしか方法は無いようです。
– 表示なし
表示なしの場合はまだ公式アンロックに対応した機種ではありません。
LOCKEDやUNLOCKEDの概念が無いので、この場合は後ほど記載するS-OFF = ブートローダーアンロック済と同義になります。
– その他
Unlimited.IOやRevolutionaryでS-OFFを行うと上部にオリジナルの文字が入った状態になります。
この状態になると、アンロックなどを行わずして「UNLOCKED」と同じ状態、さらに後ほど記載するEngineering hbootと同等なhbootを搭載した状態になります。
S-OFF (Security OFF )
通常状態ではS-ON(Security ON)となっているのですが、開発機やテスト機などはS-OFF(Security OFF)と言う状態になっています。
S-OFFとなると、HBOOT上のS-ONと言う文字がS-OFFと変わり、ロック状態と同じようにHBOOTで現在の状態を確認する事が出来ます。
S-OFFとなるとセキュリティロックがOFFとなり、署名なしのファイルが適用可能、一部の本体情報(詳細には後ほど記述するoemコマンドのwrite系が利用できるようになる。)を書き換えることが出来ます。
署名なしのファイルを利用できるようになるため、UNLOCKED時では行えなかった部分の改変、ENG hboot/自作hbootの搭載や自作のRUUを適用できるようになります。
公式のRUUもUNLOCKEDの状態でも適用が可能になり、ソフトウェアの自己修理時などにも色々なセキュリティチェックを省いてくれるために回り道をせずに行えるので個人的に大変重宝するモードとなります。
S-OFF時のRUU適用時の挙動は此方をご回覧下さい。
http://
現在のHTC機(恐らく2011年度機後半以降、前半期はアップデート後)は通常状態(SHIP)ではブートローダー状態が「LOCKED」になっているとfastbootのflashコマンドは利用できなく、手動でシステム全般の改変は行えないために手動書き換えは基本的にS-OFF状態でも「UNLOCKED」にしなければブートローダーのロックが外れません。
一般ユーザーがHTC機をS-OFFするためには
S-OFFは本来一般ユーザーには公式に開放されているモードではなく、開発者や修理センターでは正規の方法でS-OFFを行っています。
私は行った事が有りませんが、具体的には「XXXXDIAG.zip」と言うRUUと似たファイルとHTCのデベロッパ専用のSDカード(JavaCard)を利用しS58モードを起動後S-OFFやSuperCIDに改変する作業を行っているようです。
One Xでの作業風景↓
この方法を一般ユーザーが利用するのは、先ずDIAG.zipを手に入れるのは非常に困難であり更にJavaCardは一般的に作成する事が出来ない為、行う事が出来ません。
ですが、有志のユーザーによってexploitを利用しS-OFFを有効する事が可能になっています。
その現在代表的なチームのサイトが以下となります。
Revolutionary
Unlimited.IO
HBOOTの種類分け
HBOOTの種類は上部で書いたようにプラットフォームでの種類分けと開発時などに利用する物、出荷時に搭載されている物での種類分けとなっています。
プラットフォーム / Platform
プラットフォームの種類訳は自分が解る範囲で以下に記載しています。
HBOOTは基本的にベースSoCで区別されており、そのグループはPLATFORMとして名称が付けられています。
例として、Snaodragon S3 MSM8660を搭載したISW12HTのPLATFORMはHBOOT-8260となり、Snapdragon S4 MSM8660Aを搭載したHTC JのPLATFORMはHBOOT-8960のFelica対応版となっています。
EVO3Dに搭載されているMSM8660はMSM8260の互換なのでPLATFORMがHBOOT-8260、HTC Jに搭載されているMSM8660AはLTE対応しているMSM8960の下位互換なのでPLATFORMがHBOOT-8960となっています。
HBOOTのプラットフォームは自分が確認できる範囲で以下に纏めています。
HTC機のHBOOTの機種プラットフォーム分け一覧
HBOOTの種類
-
Shipment HBOOT (SHIP HBOOT)
このHBOOTを搭載していると、HBOOTの画面上に「SHIP」と表示されます。
出荷されている機種にはすべてこのHBOOTが搭載されます。
アップデートなどでもこのHBOOTが提供されるので、故意に変更を行ったりしなければこのHBOOTが基本搭載となります。
-
Engineering HBOOT (ENG hboot)
このHBOOTを搭載していると、HBOOTの画面上に「ENG」と表示されます。
基本的には購入した機種には搭載されておらず、開発時に利用される開発専用のHBOOTとなります。
このHBOOTを搭載後し、一例として挙げると「SHIP」状態のHBOOTでは行えない、fastbootモードでflashコマンドを使いradioを書き込む事が可能になります。
fastbootのoemコマンドの数が増え、開発者専用コマンドが利用出来る様になります。
その他に、このHBOOTを搭載すれば「LOCKED」状態でも「UNLOCKED」状態と同じ扱いをすることが出来ます。
S-ON状態でENG HBOOTは利用できません。
要は「SHIP HBOOT」だと開発者が面倒くさいので、開発時に扱いやすいHBOOTと言う事です。
このHBOOTを手に入れる方法は、とても難しいですがちょくちょく流出したりしますので、開発機やTEST機が市場に回った時に運よく搭載されていれば抽出すれば入手でき、他の同プラットフォーム機で利用が可能です。
-
Manufacturering HBOOT (MFG HBOOT)
このHBOOTを搭載していると、HBOOTの画面上に「MFG」と表示されます。
あまり聞かないのですが、存在しているので記載しています。
基本的にはENG hbootと同じなので説明は省きます。
-
S-OFFチーム自作HBOOT(Moonshine/DirtyRacun/LazyPanda/Revolutionary/AlphaRevなど)
このHBOOTを搭載していても、HBOOTの画面上には「SHIP」と表示されます。
ですが、上部に見慣れない名称が記載されています。
このHBOOTはSHIP HBOOTをベースに、ENG HBOOTに近い機能を搭載したHBOOTとなっています。
基本的にS-OFFツールの作者達が作成しており、有志による改造と言う感じです。
ENGのoemコマンドは利用できませんが、アンロックせずにflashが利用出来たり、radioをflashコマンドで利用が可能となっています。
機器のバージョンタイプ(開発段階表示)
HBOOTには開発段階表示が序に記載されており、機器のコードネーム(デバイスネーム)の右に記載があります。
最終市場配布HBOOTには基本的に「PVT」となっています。
この記載は変わるごとに開発完了の段階を表しており、以下のようになっています。(解る範囲です・・)
- XA – 不明
- XB – 不明
- XC – 不明
- EVT – 研究開発機
- DVT – 専用機の開発モデル
- CVT – オペレーター・キャリアへのサンプル機
- PVT – 量産機(PVT1:量産期にバッチ適応後の生産機)
HBOOTの流用について
HBOOTの流用はなんとなく解るかと思いますが、同じプラットフォームであれば基本的には可能です。
ですが例外として、数点有ります。
同プラットフォーム名でも、HBOOT内に記載されているデバイスネーム、ボードネームなどが一致しなければ起動できなくなります。
例えば、HBOOTは日々バージョンが上がっているのですが、プラットフォーム名HBOOT-8260のENG hbootが現在流出しています。
この2013/02/05現在最新のHBOOT-8260の機種はざっと以下の通りですが
- Sensation : PYRAMID (PG58100)
- My touch 4G : DOUBLESHOT (PG59100)
- EVO3D CDMA : SHOOTER (PG86100)
- EVO4G+ : RIDER (PG86200)
- EVO3D GSM : SHOOTER_U (PG86300)
- EVO3D KDDI : SHOOTER_K (PG86400)
- EVO3D ChinaTelecom : SHOOTER_CT (PG86500)
- One S (S3) : VILLEC2 (PJ40200)
開発状況によって、想定されていない時点でのHBOOTバージョンではデバイスネームが記載されていません。
一番解りやすいのはSHOOTER_Kですが、この機種はHBOOT-8260のプラットフォームが最初にビルドされた時には開発を想定していませんでした。
ですので現在流出しているENG HBOOTのバージョンがとても古い事により、HBOOT内にSHOOTER_Kのデバイスネーム、ボードネームの記載が無く、ENG HBOOTは利用できません。
FASTBOOTモード
fastbootモードを選択し、PCと接続するとPCでfastbootコマンドが利用可能になります。
fastbootのコマンドは一般的なboot/flash/等に加えて、HTCのみでのコマンドのoemと言うものがあります。
fastbootのoemコマンドはS-OFFでないと通らない物が多く、ここでは様々なコマンドがあります。
自分の機種のoemコマンドの種類はfastboot oem ?で確認しましょう
プラットフォーム : HBOOT-8064のHTC J butterflyで通したもの
SHIP HBOOT |
ENG HBOOT |
command list dmesg last_dmesg clearaspflag refurbish get_identifier_token checkKeycardID get_tamper_flag checkSbl1 checkHWSecurity enter keytest heap boot reset powerdown rebootRUU heap_test erase_phone_storage erase_nfc_record gotohboot resetgift ats rtask task enableqxdm gencheckpt readmeid readpid writepid readcid writecid readimei writeimei readsecureflag writesecureflag ddr2gbh ramdump2gbh ddr2gstatus get_temp writemeid lock readusername writeusername resethtcdebugflag load_emmc check_emmc_mid read_mmc load_modem_emmc get_wp_info_emmc send_wp_info_emmc get_ext_csd_emmc get_sector_info_emmc |
command list mb mh mw ew eh eb mmu ram_test jump test sdtest eraseconfig writeconfig readconfig writesku readsku rflash tflash block_test partition_test rbchk erasesd btrouter onesegrouter tdmbrouter nfcrouter nfcreader nfccard nfcversion nfcmodel nfcdl nfctransaction felicahelp felicaponhigh felicaponlow felicacenhigh felicacenlow felicarouter felicachipidm felicareader felicacard felicaversion felicasetreg felicasetparam felicasetedcreg felicagetreg felicagetparam felicachkpin cir_fwup snfchselhigh snfchsellow snfcversion snfccard snfcreader snfcsetparam snfchwreset tick heaptable sysinfo emapi emapiTest emapiCountryID emapiWlanMac emapiSetDefCal emapiReadCal lr imgcrc resetautoimage resetpreferdiag resetRUUflag writeserialno readserialno battcheck battinfo enter gotofastboot writemid usbtestmode eraseWifiFlash erase readmbserialno listpartition erasebcid writebcid readbcid eraseColorID writeColorID readColorID fmrouter fmtx resetuP bdaddress readbdaddr wMfgTp rMfgTp emptypagecheck saveprt2sd savemem2sd savefb2sd emapiInit emapiChannel emapiBand emapiRate emapiRateset emapiCountry emapiTXpwr1 emapiPkteng_start emapiPkteng_stop emapiOut emapiFqacurcy emapiCrsuprs emapiUp emapiDown emapiMpc emapiCounters emapiVersion emapiEtheraddr emapinRate emapiPhy_forcecal emapi2gRate emapi5gRate emapiMimo_bw_cap emapiMimo_txbw emapiChanspec emapiRevinfo emapiSetIrqPin usblog bkflash2emmc fl loaddiag lnb init_a1026_fw checkKeyCard loopback spitest i2ctest pmic8921_led_test pmic8921_haptic_test gpiow gpior clock i2cr i2cw i2ctest ulpi changeCid powertest read_l2_acc_fuse ltetest sdio_loopback sdio_setsize sdio_readblk sdio_writeblk sdio_readblk sdio_dumpreg get_mdm9k_serial clear_mdm9k_serial set_mdm9k_serial update_prkey update_wvkey set_deviceid update_dpkey emmc_boot 8x60i2cr 8x60i2crNoAddr 8x60i2cwNoAddr 8x60i2cw poweron poweroff setvol spi fat pmgpiow pmgpior 8821vregon 8821vregoff 8821vregw 8821vregr 8821vregmodew 8821vregmoder 8821vregdump 8821w 8821r 8921vregon 8921vcinoff 8921vregoff 8921vregw 8921vregr getvol gpiodump 8921gpiodump 8921mppdump 8921vregmodew 8921vregmoder 8921vregdump 8921w 8921r mipi_test chargeron chargeroff adc readsimlocktype enablesimlock addsimlockcode clearsimlockcode listsimlockcode clearunlockrecord lite_heap_test vibrate_test getrtc setrtc getrtcalarm setrtcalarm pgfs bumpclk acpuclk_get acpuclk_set rpmclk_set rpmclk_get oschalt tz_req blow_efuse blow_qfuse_cfg dump_tzlog readjtagdisableflag writejtagdisableflag update_emmc_partition test_emmc sector_erase_emmc fat_format_emmc init_emmc reinit_emmc write_mmc read_sandisk_fw read_boardinfo write_prot_test set_enh_area_emmc dmesg last_dmesg refurbish get_identifier_token checkKeycardID get_tamper_flag checkSbl1 checkHWSecurity enter keytest heap boot reset powerdown rebootRUU heap_test erase_phone_storage erase_nfc_record gotohboot resetgift ats rtask task enableqxdm gencheckpt readmeid readpid writepid readcid writecid readimei writeimei readsecureflag writesecureflag ddr2gbh ramdump2gbh ddr2gstatus get_temp writemeid lock write_secsetting read_secsetting readusername writeusername resethtcdebugflag load_emmc check_emmc_mid read_mmc load_modem_emmc get_wp_info_emmc send_wp_info_emmc get_ext_csd_emmc get_sector_info_emmc |
上記の例のようにHBOOTの種類によってOEMコマンドの量は変わります。
PLATFORMやHBOOTバージョンごとにコマンドは違うかと思いますが、大体は同じかと思います。
RECOVERY
これを選択すると、リカバリーモードを起動することができます。
純正状態のリカバリーを起動するとこのような画面になりますが、この状態で「音量上+電源ボタン」を押すとリカバリー表示が出ます。
操作方法は、音量で上下、電源ボタンで決定となります。
2011年度機以前 – EVO3D(ISW12HT)
2012年度 – HTC J(ISW13HT)
– Reboot system now
- 再起動を行います。
– Apply update form sdcard
– Apply update from external storage
- SDカード内のアップデート(OTA)を当てます。(S-OFFのみ)
– Apply update from internal storage
- 内臓メモリ内のアップデート(OTA)を当てます。(S-OFFのみ)
-Apply update from cache
- キャッシュ内のアップデート(OTA)を当てます。(S-OFFのみ)
– Wipe data/factory reset
- データ領域を消去するのと、初期化を行います。
(HBOOTのFactory Resetを選択すると、内臓メモリ搭載機の場合の内容を消去してしまいますが、こちらは消去されないため重宝します。)
– Wipe cache pertition
- キャッシュ領域を消去します。
これを使用すると、データ領域等の不良で起動が不可能になった状態などに初期化をすることが出来ます。
ここでは、標準のリカバリーモードの説明のみですがアンロックを行っていると「ROM焼き」や様々なことが出来るカスタムリカバリーと言う物を導入することによりこの標準リカバリーの代わりに使うことが出来ます。
HTC機の起動時の動作マップは大雑把に以下のようになっています
自分の理解している物のみ機能を記述しています・・、情報提供をして下さる方、間違っているよと言って下さる方ははコメント欄にてコメントを頂けるととても嬉しいです><