ハードオフで見つけてたので、勉強がてらいじっていました。
この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化したところでそんなに面白いことができるわけではないと思うんですが…