本帖最后由 ゝ.慌 于 2014-10-24 14:40 編輯
這個(gè)帖子的目的就是教大家用TTL來(lái)root盒子
看帖基礎(chǔ):有一定的刷機(jī)經(jīng)驗(yàn),會(huì)一些linux基本操作,對(duì)安卓系統(tǒng)有一些基本了解。
首先,你得有一條TTL刷機(jī)線,就是那個(gè)usb轉(zhuǎn)串口的線,我用的淘寶上面大把的盜版pl2303芯片的,大概10多20元吧,刷機(jī)必備。因?yàn)槭潜I版的,所以你不能裝太新的驅(qū)動(dòng),否則會(huì)檢測(cè)出來(lái),驅(qū)動(dòng)不了,我用的是2007年的驅(qū)動(dòng),在win8.1 64下面可以正常使用。設(shè)置成115200 bps,記下相應(yīng)的COM口,一般是COM3。
34.jpg (54.94 KB, 下載次數(shù): 23)
下載附件
保存到相冊(cè)
2014-10-24 14:37 上傳
打開Q5機(jī)器,你可以看到面對(duì)顯示面板這邊,左下角有個(gè)白色的6pin 插座。從左邊起第一個(gè)pin是GND, 第3,4 pin 是RX, TX,至于哪個(gè)是rx,tx,我沒(méi)有深究,不行就交換一下ok。
35.jpg (99.85 KB, 下載次數(shù): 23)
下載附件
保存到相冊(cè)
2014-10-24 14:37 上傳
安裝個(gè)putty之類的終端軟件,打開相應(yīng)的COM口,然后啟動(dòng)Q5,你可以在終端上看到大量的輸出,這期間按Ctrl-C,會(huì)在停在一個(gè)輸入狀態(tài),這就是uboot或者fastboot之類的界面,輸入help,看到一大堆命令有沒(méi)有?我們要用到的是setenv, tftp ,bootm。
adb.zip
(403.93 KB, 下載次數(shù): 71)
2014-10-24 14:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 金幣 -1
36.jpg (52.59 KB, 下載次數(shù): 26)
下載附件
保存到相冊(cè)
2014-10-24 14:37 上傳
如果沒(méi)有按Ctrl-C會(huì)怎樣呢?當(dāng)然是繼續(xù)啟動(dòng)過(guò)程,進(jìn)入系統(tǒng)。好,我們來(lái)體驗(yàn)下
37.jpg (120.12 KB, 下載次數(shù): 24)
下載附件
保存到相冊(cè)
2014-10-24 14:37 上傳
你會(huì)發(fā)現(xiàn),啥也干不了,只能看著。這是因?yàn)橄到y(tǒng)沒(méi)有開啟Console,所以沒(méi)有進(jìn)入shell。
所以,重點(diǎn)就是要讓系統(tǒng)開啟主控臺(tái),這樣我們的TTL終端窗口就可以進(jìn)入shell,怎么開啟呢?你猜對(duì)了,就是修改固件,確切的說(shuō)就是修改Boot.img。也許你要問(wèn),這個(gè)文件是干啥用的呢?這個(gè)文件包含了 ramdisk 和 系統(tǒng)的linux kernel,當(dāng)然kernel我們就不用去改了,我們要改的是ramdisk。暈,怎么寫來(lái)寫去不怎么“粗略”了,既然這樣,我就不直接給成品了。ok,說(shuō)說(shuō)怎么改。這個(gè)文件在官網(wǎng)的升級(jí)包里面,我的固件是最新的1.0.2,所以同志們也得下載這個(gè)固件包啊
然后,我們要用到一個(gè)boot.img的打包解包神器,哪里去找,怎么用呢?當(dāng)然,萬(wàn)能的百度會(huì)告訴你,關(guān)鍵詞“bootimg.exe”。
好了,完事具備。
建個(gè)目錄,把bootimg.exe拷貝進(jìn)去。
首先解包固件update_qualcore_Q5.zip,把boot.img拷貝到剛才的目錄。- E:\fw>dir
- 2014/08/23 14:21 <DIR> .
- 2014/08/23 14:21 <DIR> ..
- 2014/06/15 15:16 8,175,616 boot.img
- 2014/08/20 18:06 2,405,677 bootimg.exe
[color=rgb(51, 102, 153) !important]復(fù)制代碼
然后- E:\fw>bootimg.exe --unpack-bootimg boot.img
- arguments: [bootimg file]
- bootimg file: boot.img
- output: kernel[.gz] ramdisk[.gz] second[.gz]
- base=0x3000000
- page_size=16384
- name=""
- cmdline=""
- padding_size=16384
復(fù)制代碼
解包出來(lái)的base, cmdline, page_size, padding_size幾個(gè)值比較重要,需要記住,等下重新打包的時(shí)候要用到。
接下來(lái)解包ramdisk
- E:\fw>bootimg.exe --unpack-ramdisk
- arguments: [ramdisk file] [directory]
- ramdisk file: ramdisk.gz
- directory: initrd
- output: cpiolist.txt
復(fù)制代碼
看到目錄下多出來(lái)一個(gè)initrd目錄了吧?目錄下有個(gè)文件叫default.prop,好了,就是他了。用寫字板之類的打開,找到ro.debuggable=0這樣的,這就是開啟Console服務(wù)的選項(xiàng)。把0修改成1,然后保存。
下面重新打包ramdisk
- E:\fw>bootimg.exe --repack-ramdisk
- arguments: [cpiolist file]
- cpiolist file: cpiolist.txt
- output: ramdisk.cpio.gz
復(fù)制代碼
重新打包boot.img (看下面命令行,后面的參數(shù)就是剛才提到要記住的字段。這里有點(diǎn)問(wèn)題,cmdline為空好像不行,所以亂寫個(gè))
- E:\fw>bootimg.exe --repack-bootimg 0x3000000 "\0" 16384 16384
- arguments: [base] [cmdline] [page_size] [padding_size]
- kernel: kernel
- ramdisk: ramdisk.cpio.gz
- second:
- base: 0x3000000
- cmdline: \0
- page_size: 16384
- padding_size: 16384
- output: boot.img
[color=rgb(51, 102, 153) !important]復(fù)制代碼
大功搞成,新的boot.img取代了舊的。
- E:\fw>dir
- 2014/08/23 14:30 <DIR> .
- 2014/08/23 14:30 <DIR> ..
- 2014/08/23 14:32 8,175,616 boot.img
- 2014/08/20 18:06 2,405,677 bootimg.exe
- 2014/08/23 14:26 892 cpiolist.txt
- 2014/08/23 14:26 <DIR> initrd
- 2014/08/23 14:23 7,826,184 kernel
- 2014/08/23 14:30 321,942 ramdisk.cpio.gz
- 2014/08/23 14:23 322,481 ramdisk.gz
復(fù)制代碼
好了,回到最開始,連接TTL,打開putty終端,開機(jī),Ctrl-C,進(jìn)入fastboot界面
待續(xù)。。。。
繼續(xù)
先看看環(huán)境變量
- fastboot# pr
- bootdelay=1
- baudrate=115200
- ipaddr=192.168.1.10
- serverip=192.168.1.1
- netmask=255.255.255.0
- bootfile="uImage"
- phy_intf=mii,rgmii
- use_mdio=0,1
- phy_addr=2,1
- gmac_debug=0
- bootcmd=mmc read 0 0x1FFFFC0 0x4B000 0x5000; bootm 0x1FFFFC0
- bootargs=mmz=ddr,0,0,700M mem=2G console=ttyAMA0,115200 blkdevparts=mmcblk0:1M(f astboot)ro,1M(bootargs)ro,10M(recovery)ro,2M(deviceinfo),8M(baseparam),8M(pqpara m),20M(logo),20M(logobak),40M(fastplay),40M(fastplaybak),40M(kernel)ro,20M(misc) ,8M(userapi),8M(qbdrVR),8M(qbflag),300M(qbdata),768M(system),2048M(userdata),100 M(cache),20M(private)ro,-(sdcard)
- recoverybootargs=mmz=ddr,0,0,700M mem=2G console=ttyAMA0,115200 blkdevparts=mmcb lk0:1M(fastboot),1M(bootargs),10M(recovery),2M(deviceinfo),8M(baseparam),8M(pqpa ram),20M(logo),20M(logobak),40M(fastplay),40M(fastplaybak),40M(kernel),20M(misc) ,8M(userapi),8M(qbdrvr),8M(qbflag),300M(qbdata),768M(system),2048M(userdata),100 M(cache),20M(private),-(sdcard)
- stdin=serial
- stdout=serial
- stderr=serial
- ethaddr=00:66:cf:00:07:07
- ver=Fastboot 3.3.0-svn8063 (wukl@ubuntu) (Jul 11 2014 - 17:58:14)
- Environment size: 1067/65532 bytes
- fastboot#
復(fù)制代碼
重點(diǎn)說(shuō)下ipaddr, serverip, bootcmd這3個(gè)變量因?yàn)檫@個(gè)時(shí)候,最方便把boot.img傳到機(jī)器里面的方法就是通過(guò)tftp。所以,我們要先設(shè)置下網(wǎng)絡(luò)環(huán)境
復(fù)制代碼
這個(gè)是設(shè)置Q5盒子本身的ip地址
復(fù)制代碼
這個(gè)就是tftp服務(wù)器的ip地址,所以你需要設(shè)置為你的實(shí)際的地址,在這里我的機(jī)器是192.168.2.163,所以Q5盒子就相應(yīng)設(shè)置到同一個(gè)網(wǎng)段,我用的192.168.2.11,于是,執(zhí)行如下命令修改這兩個(gè)環(huán)境變量- fastboot# set ipaddr 192.168.2.11
- fastboot# set serverip 192.168.2.163
- fastboot#
復(fù)制代碼
再說(shuō)下環(huán)境變量bootcmd- bootcmd=mmc read 0 0x1FFFFC0 0x4B000 0x5000; bootm 0x1FFFFC0
復(fù)制代碼
這下知道盒子怎么啟動(dòng)了吧?就是先從mmc第0x4B000處把內(nèi)核讀到內(nèi)存的0x1FFFFC0地址,然后運(yùn)行bootm從0x1FFFFC0開始運(yùn)行,啟動(dòng)內(nèi)核。
我們這里是要啟動(dòng)我們修改好的boot.img,沒(méi)刷到mmc里面,怎么辦呢?那就是要用到的tftp命令。要用tftp,你首先還得在你的電腦上有個(gè)tftp服務(wù)器才行,我用的是廣泛使用的tftpd32.exe,哪里去找呢?還是萬(wàn)能的百度,關(guān)鍵詞“tftpd32.exe”,網(wǎng)上大把,自己下載裝好,把tftpd32.exe 放到剛才的目錄。- E:\fw>dir
- 2014/08/23 16:40 <DIR> .
- 2014/08/23 16:40 <DIR> ..
- 2014/08/23 14:32 8,175,616 boot.img
- 2014/08/20 18:06 2,405,677 bootimg.exe
- 2014/08/23 14:26 892 cpiolist.txt
- 2014/08/23 14:26 <DIR> initrd
- 2014/08/23 14:23 7,826,184 kernel
- 2014/08/23 14:30 321,942 ramdisk.cpio.gz
- 2014/08/23 14:23 322,481 ramdisk.gz
- 2011/05/08 00:05 205,312 tftpd32.exe
復(fù)制代碼
運(yùn)行tftpd32.exe
38.jpg (33.98 KB, 下載次數(shù): 22)
下載附件
保存到相冊(cè)
2014-10-24 14:39 上傳
這下可以從tftp獲取boot.img了- fastboot# tftp 0x1FFFFC0 boot.img
- ETH0: PHY(phyaddr=1, rgmii) link UP: DUPLEX=FULL : SPEED=1000M
- MAC: 00-66-CF-00-07-07
- TFTP from server 192.168.2.163; our IP address is 192.168.2.11
- Download Filename 'boot.img'.
- Download to address: 0x1ffffc0
- Downloading: # [ Connected ]
- ################################ [ 2.888 MB]
- ################################ [ 5.752 MB]
- #######################
- done
- Bytes transferred = 8175616 (7cc000 hex)
復(fù)制代碼
ok,現(xiàn)在我們終于把改好的內(nèi)核放到了盒子內(nèi)存的0x1FFFFC0地址開始處。下面就可以運(yùn)行了- fastboot# bootm 0x1FFFFC0
- Found Initrd at 0x04000000 (Size 321942 Bytes), align at 16384 Bytes
- ## Booting kernel from Legacy Image at 02003fc0 ...
- Image Name: Linux-3.10.0_s40
- Image Type: ARM Linux Kernel Image (uncompressed)
- Data Size: 7826120 Bytes = 7.5 MiB
- Load Address: 02000000
- Entry Point: 02000000
- Verifying Checksum ... OK
- Loading Kernel Image ... OK
- OK
- Starting kernel ...
- Uncompressing Linux... done, booting the kernel.
- Booting Linux on physical CPU 0x0
- Linux version 3.10.0_s40 (wukl@ubuntu) (gcc version 4.4.1 (Hisilicon_v200(gcc4.4-290+glibc-2.11+eabi+nptl)) ) #2 SMP Fri Aug 1 20:09:00 CST 2014
- CPU: ARMv7 Processor [414fc091] revision 1 (ARMv7), cr=10c53c7d
- CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
- Machine: bigfish
- Ignoring unrecognised tag 0x726d6d74
- Invalid PDM tag, errno:0
- DSP run memory space at 0x02000000, size: 0x00800000 Bytes.
- cma: CMA: reserved 700 MiB at 43c00000
- cma: CMA: reserved 4 MiB at 43800000
復(fù)制代碼
啟動(dòng)完畢,按下回車,看到了shell提示符,有沒(méi)有?
復(fù)制代碼
到這里,基本上就大功告成了,你已經(jīng)獲得了root權(quán)限,可以做事了。我這里并未把改好的boot.img 刷到mmc, 你要有興趣,可以在剛才的fastboot界面,tftp上傳完了boot.img后,用mmc write寫進(jìn)去,當(dāng)然你如果搞錯(cuò)了,把機(jī)器寫壞了可別怪我哈。
什么?你提到adb?好吧,我再啰嗦下。盒子里面本身是帶了一個(gè)adbd的,就在固件的sbin目錄下,可惜這個(gè)不能用,因?yàn)檫@個(gè)是user模式的,不能用root身份運(yùn)行,只能用shell身份運(yùn)行。所以,你需要一個(gè)不工程模式的adbd,而且不會(huì)去檢查系統(tǒng)選項(xiàng)降低權(quán)限的。所以,得需要一個(gè)修改過(guò)的特別"訂制"的adbd。這就麻煩了,你得搭建一個(gè)ubuntu linux的安卓開發(fā)環(huán)境,下載android源代碼,配置選項(xiàng),修改代碼,編譯,就算你是老手,沒(méi)有4,5個(gè)小時(shí)搞不定(我會(huì)告訴你我下載了3個(gè)多小時(shí),編譯了2小時(shí)嗎)。所以,我還是貢獻(xiàn)一個(gè)改好的吧。
名字改成了adbdz,以便和原來(lái)的區(qū)分。
接下來(lái)就簡(jiǎn)單了,通過(guò)u盤也好,smb也好,你把這個(gè)文件保存到盒子上面。比如我是在電腦上面共享出來(lái),用盒子本身的媒體中心-網(wǎng)上鄰居訪問(wèn)下,這樣盒子就自動(dòng)smb mount 了。
我是把a(bǔ)dbdz放到了/system/bin/下面,/system本身是只讀的,所以需要重新mount 下
- mount -o rw,remount /dev/block/platform/hi_mci.1/by-name/system /system
復(fù)制代碼
這下可寫了,
- cp /mnt/smb/mountpoint_01/adbdz /system/bin/
復(fù)制代碼
修改下文件權(quán)限- chmod 755 /system/bin/adbdz
復(fù)制代碼
然后修改/system/etc/init.bigfish.sh,讓adbdz可以開機(jī)自動(dòng)啟動(dòng)
- echo "\n/system/bin/adbdz &" >> /system/etc/init.bigfish.sh
復(fù)制代碼
/system貌似被加了nosuid選項(xiàng),su命令可能失效,保險(xiǎn)起見,開機(jī)的時(shí)候再mount 下
- echo "\n/system/bin/mount -o ro,remount /dev/block/platform/hi_mci.1/by-name/system /system" >> /system/etc/init.bigfish.sh
復(fù)制代碼
ok, 重啟
- adb connect 你的盒子ip
- adb shell
- root@Hi3798CV100:/ #
復(fù)制代碼
好了,開啟adb到此就結(jié)束。你可以使用壇子里面的那些一鍵root工具之類的了。
既然審核通過(guò)了,那我繼續(xù)把root管理器的安裝也講一下吧。
1,下載最新版本supersu,
http://download.chainfire.eu/452/SuperSU/UPDATE-SuperSU-v2.02.zip
2,解壓,把a(bǔ)rm目錄下的su拷貝到/system/xbin/,同一目錄再?gòu)?fù)制一個(gè)叫daemonsu的,
chmod 4755 /system/xbin/su
chmod 4755 /system/xbin/daemonsu
3,拷貝common目錄下的Superuser.apk到 /system/app下面,
chmod 644 /system/app/Superuser.apk
4,echo 1 > /system/etc/.installed_su_daemon
5,添加開機(jī)啟動(dòng)daemonsu
echo "\n/system/xbin/daemonsu --auto-daemon &" >> /system/etc/init.bigfish.sh
6,/system/xbin/su --install
7,reboot
|