ハードオフで見つけてたので、勉強がてらいじっていました。
この2つ、基板が全く同じでソフトだけ違うもののようでした。
シリアル端子は出ていたけど、 bootloader中にも何のキー入力も受け付けず、
起動してからはconsoleはcloseされるようでシリアルからのアクセスはできませんでした。
シリアルから触れなくても、ビルド番号x7クリックで開発者モードにして、
ネットワーク経由でadbできるので大体のことはできるのですが、
あくまでも大体のことしかできないのです。
そのため、どうにかしてroot化できないかといろいろやっていたのですが、今のところできていないのでここまでの流れをメモしておきます。
シリアル接続~Linux起動まで
System startup
Reg Version: v1.1.0
Reg Time: 2014/6/1619:25:50
Reg Name: hi3719cdmo1b_hi3719cv100_ddr3_2gbyte_8bitx4_4layers_emmc.reg
Compressed-boot v1.0.0
Uncompress....................Ok
System startup
Reg Version: v1.1.0
Reg Time: 2014/6/1619:25:50
Reg Name: hi3719cdmo1b_hi3719cv100_ddr3_2gbyte_8bitx4_4layers_emmc.reg
Fastboot 3.3.0 (panli@ottm620-Tecal-RH2288-V2-12) (Jul 14 2015 - 23:34:35)
Fastboot: Version 3.3.0
Build Date: Jul 14 2015, 23:35:12
CPU: Hi3719Cv100
Boot Media: eMMC
DDR Size: 1GB
Checking DDR config ... OK
Check nand flash controller v610. found
Special NAND id table Version 1.36
Nand ID: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
No NAND device found!!!
Check spi flash controller v350. found
Can't find a valid spi flash chip.
Can't find a valid spi flash chip.
MMC/SD controller initialization.
MMC/SD Card:
MID: 0x45
Read Block: 512 Bytes
Write Block: 512 Bytes
Chip Size: 3776M Bytes (High Capacity)
Name: "SEM04"
Chip Type: MMC
Version: 4.0
Speed: 25000000Hz
Bus Width: 8bit
Boot Addr: 0 Bytes
Boot Env on eMMC
Env Offset: 0x00100000
Env Size: 0x00010000
Env Range: 0x00010000
SDK Version: HiSTBAndroidV500R001C00CP0008_v2014120116
start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
ir_led_blink_proc start led blink
mac:04:02:1f:19:ce:21
1 blocks read: OK
Reserve Memory
Start Addr: 0x35FFF000
Bound Addr: 0x3E1F000
Free Addr: 0x34E89000
Alloc Block: Addr Size
0x34E89000 8192
0x34E8C000 3133440
0x3518A000 3686400
0x3550F000 1658880
0x356A5000 8294400
0x35E8F000 12288
0x35E93000 1048576
0x35F94000 212992
0x35FC9000 8192
0x35FCC000 204800
32768 blocks read: OK
## Starting Secure OS at 0x36000000 ...
## Secure OS Image:
Header Size: 0x400 (1 KB)
Kernel Load Addresss: 0x38001000
Kernel Size: 0xadbd4 (694 KB)
Task Number: 7
Task Total Size: 0x141BF0 (1286 KB)
Loading Secure OS ...
================task_addr:0x36000000
uwSCR = 0x600001d3
Set all interrupts to be non-secure
gic_int_num:160
address:f8a01080,value:00000000
address:f8a01080,value:f800ffff
address:f8a01084,value:ffffffff
address:f8a01088,value:ffffffff
address:f8a0108c,value:ffffffff
address:f8a01090,value:ffffffff
GICC_PRIMASK primask 000000f8
GIC_ID_PHY_BASE value 00000000
GIC_IC_PHY_BASE value 00000000
SCU Init
CodeStart = 0x38001000, CodeEnd = 0x38276c00
map_section_entry 2 times l1_index:0x00000382
===map UART Shareable device start==== === === = !!!
===map UART Shareable device ==== === === = !!!
===map Timer Shareable device ==== addr[f8a81000] === === = !!!
===map GIC Shareable device ==== addr[0xFC000000] === === = !!!
===map TZPC Shareable device ==== addr[0xFCA00000] === === = !!!
===map L2 cache registers ==== addr[0xFC100000] === === = !!!
===map suspend registers 1 ==== addr[0xFCC00000] === === = !!!
===map suspend registers 2 ==== addr[0xFCD00000] === === = !!!
intRestore OK 3!
attension please : excute from osTaskInit!!!!!!
osMemSystemInit default pt done 0x00080000
attension please : osSysInit OK!!!!!!
attension please : osHwTmrInit OK!!!!!!
attension please : osSwiInit OK!!!!!!
attension please : osTskInit OK!!!!!!
attension please : osHuntInit OK!!!!!!
attension please : osMsgInit OK!!!!!!
attension please : osSemInit OK!!!!!!
System Security Config... OK!
map_section_entry 2 times l1_index:0x00000f8a
TrustZone enabled... OK!
map_section_entry 2 times l1_index:0x00000f8a
map_section_entry 2 times l1_index:0x00000f8a
map_section_entry 2 times l1_index:0x00000f8c
map_section_entry 2 times l1_index:0x00000f8c
Create secure mem zone... OK!
Create non-secure mem zone... OK!
Init Cipher driver... OK!
<<<OTP DBG>>> OTP_DRV_ModInit 373: OTP init success!
attension please : before task_func OK!!!!!!
global_task_base=0x36200000
osTaskInit done
os initialization successfully
uwMMUCtrl = 0x00c5187f
have defined OS_STB_HiS40V200
RTOSck start to schedule date: 06-26 Change-Id: IB790
init_map_loader:TASK_ADDRESS=0x36400000 order=0x00000002
internal task[0] load success, task name:task_demo1
init_map_loader:TASK_ADDRESS=0x36800000 order=0x00000002
internal task[1] load success, task name:task_demo2
init_map_loader:TASK_ADDRESS=0x36300000 order=0x00000000
internal task[2] load success, task name:task_demo3
init_map_loader:TASK_ADDRESS=0x36c00000 order=0x00000001
internal task[3] load success, task name:dxwidevine
init_map_loader:TASK_ADDRESS=0x37000000 order=0x00000003
internal task[4] load success, task name:task_QA_TZService
init_map_loader:TASK_ADDRESS=0x37800000 order=0x00000002
internal task[5] load success, task name:task_dxhdcp2
Back to boot
## Succeed to load Secure OS
32768 blocks read: OK
## Booting kernel from Legacy Image at 01ffffc0 ...
Image Name: Linux-3.4.67_s40
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 7518304 Bytes = 7.2 MiB
Load Address: 02000000
Entry Point: 02000000
Verifying Checksum ... OK
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
===TrustedCore hisik3_init_cache started===
===TrustedCore l2x0_init ok===
<<<CIPHER INFO>>> Cipher_Init 166: Cipher init success!
<<<CIPHER INFO>>> HAL_Cipher_HDCPTxReadEnable 1227: tx_read = 1
<<<CIPHER INFO>>> Cipher_DeInit 173: Do nothing, cipher deinit success!
<<<OTP DBG>>> OTP_Init 395: Do nothing, OTP init success!
<<<CIPHER INFO>>> Cipher_Init 166: Cipher init success!
<<<OTP DBG>>> OTP_DeInit 403: Do nothing, OTP deinit success!
<<<CIPHER INFO>>> Cipher_DeInit 173: Do nothing, cipher deinit success!
<<<OTP DBG>>> OTP_Init 395: Do nothing, OTP init success!
<<<CIPHER INFO>>> Cipher_Init 166: Cipher init success!
<<<OTP DBG>>> OTP_DeInit 403: Do nothing, OTP deinit success!
<<<CIPHER INFO>>> Cipher_DeInit 173: Do nothing, cipher deinit success!
Kernelの起動メッセージは普通に出ていますが、その前のブートローダはARM系でよくあるu-bootではありません。
また、Kernelの前にどうやらTrusted Secure OSというようなものが起動しているようです。
この間、いろいろキーを打ち込んでみたけど反応がありませんでした。
adbから接続した状態では生パーティションの状態を取得することができません。
そのため、以前PSCなどの吸出しで用いたeMMC配線乗っ取り法で別PCからeMMCのデータを読み込んでみることにしました。
そうしたところ、eMMCの内容が参照できましたが、見たところRAWパーティションが鎮座しているだけでした。
いろいろ調べた結果、どうやらeMMC内に普通のパーティションを切っているのではなく、bootargsのパラメータでLinuxから認識されているようです。
blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),2M(reserve1),16M(trustedcore),4M(reserver2),16M(recovery),2M(deviceinfo),8M(baseparam),8M(pqparam),20M(logo),40M(fastplay),16M(kernel),4M(misc),512M(system),16M(drmsfs),512M(cust),256M(cache),-(userdata)
この値を参照して作成したのが以下のパーティションリストです。
1k offset offset(byte) size MB
0 fastboot 0 0 1
1 bootargs 1024 1048576 1
2 reserve1 2048 2097152 2 ( zero filled)
3 trustedcore 4096 4194304 16
4 reserve2 20480 20971520 4 ( zero filled)
5 recovery 24576 25165824 16
6 deviceinfo 40960 41943040 2
7 baseparam 43008 44040192 8
8 pqparam 51200 52428800 8 ( zero filled)
9 logo 59392 60817408 20
10 fastplay 79872 81788928 40
11 kernel 120832 123731968 16
12 misc 137216 140509184 4 ( zero filled)
13 system 141312 144703488 512
14 drmsfs 665600 681574400 16
15 cust 681984 698351616 256
16 cache 1206272 1235222528 256
17 userdata 1468416 1503657984 last
kernel内にはuImage形式のKernel (+cpio.gz initramfs)が入っていました。
ちょっと頑張ってcpio.gzの中身を書き換えて書き戻したところ、Kernelの読み込みメッセージが表示される前に、bootloaderからresetされてしまいました。
また、bootargsの中、bootcmd=mmc read 0 0x36000000 0x2000 0x8000; loadsos 0x36000000; mmc read 0 0x1FFFFC0 0x3B000 0x8000; bootm 0x1FFFFC0
の部分を潰してしまえばbootloaderのコンソールか何かに残れるのではないかと試してみましたが、
この部分がまったく参照されていないような動きをしました。(何を書いておいてもsosの読み込み、起動後に kernelが起動される)
しかし、このパーティションの先頭4バイトがチェックサムなのですが、それが合わないとやはりresetされます。
また、bootcmdを書き換えても動作は変わりませんでしたが、パーティションの識別文字列を書き換えたらやはりresetされました。
どうやら、なにか書き換え防止の仕組みがあるようです。
adbで入って
shell@android:/proc $ cat partitions
major minor #blocks name
179 0 3866624 mmcblk0
179 1 1024 mmcblk0p1
179 2 1024 mmcblk0p2
179 3 2048 mmcblk0p3
179 4 16384 mmcblk0p4
179 5 4096 mmcblk0p5
179 6 16384 mmcblk0p6
179 7 2048 mmcblk0p7
259 0 8192 mmcblk0p8
259 1 8192 mmcblk0p9
259 2 20480 mmcblk0p10
259 3 40960 mmcblk0p11
259 4 16384 mmcblk0p12
259 5 4096 mmcblk0p13
259 6 524288 mmcblk0p14
259 7 16384 mmcblk0p15
259 8 524288 mmcblk0p16
259 9 262144 mmcblk0p17
259 10 2398208 mmcblk0p18
179 16 2048 mmcblk0boot1
179 8 2048 mmcblk0boot0
これだと、eMMC->USBリーダ接続だと認識できないboot0とboot1が表示されますが、
shell@android:/proc $ cat /dev/block/mmcblk0boot0
/system/bin/sh: cat: /dev/block/mmcblk0boot0: Permission denied
この中身は表示できません。
そのため、BeagleBoneBlack等、生のMMC接続を持つ何らかの機器に接続してこのパーティションを覗いてみたいと思います。
まあ、root化したところでそんなに面白いことができるわけではないと思うんですが…