重點(diǎn)就是要讓系統(tǒng)開啟主控臺,這樣我們的TTL終端窗口就可以進(jìn)入shell,怎么開啟呢?你猜對了,就是修改固件,確切的說就是修改Boot.img。也許你要問,這個文件是干啥用的呢?這個文件包含了 ramdisk 和 系統(tǒng)的linux kernel,當(dāng)然kernel我們就不用去改了,我們要改的是ramdisk。暈,怎么寫來寫去不怎么“粗略”了undefined,既然這樣,我就不直接給成品了。ok,說說怎么改。這個文件在官網(wǎng)的升級包里面,我的固件是最新的1.0.2,所以先下載這個固件包
http://m.ktgpgw.cn/tv-90639-1-1.html
然后,我們要用到一個boot.img的打包解包神器,哪里去找,怎么用呢?當(dāng)然,萬能的百度會告訴你,關(guān)鍵詞“bootimg.exe”。
好了,完事具備。
建個目錄,把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
然后
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
解包出來的base, cmdline, page_size, padding_size幾個值比較重要,需要記住,等下重新打包的時候要用到。
接下來解包ramdisk
E:\fw>bootimg.exe --unpack-ramdisk
arguments: [ramdisk file] [directory]
ramdisk file: ramdisk.gz
directory: initrd
output: cpiolist.txt
看到目錄下多出來一個initrd目錄了吧?目錄下有個文件叫default.prop,好了,就是他了。用寫字板之類的打開,找到ro.debuggable=0這樣的,這就是開啟Console服務(wù)的選項。把0修改成1,然后保存。
下面重新打包ramdisk
E:\fw>bootimg.exe --repack-ramdisk
arguments: [cpiolist file]
cpiolist file: cpiolist.txt
output: ramdisk.cpio.gz
重新打包boot.img (看下面命令行,后面的參數(shù)就是剛才提到要記住的字段。這里有點(diǎn)問題,cmdline為空好像不行,所以亂寫個)
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
大功搞成,新的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
好了,回到最開始,連接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#
重點(diǎn)說下ipaddr, serverip, bootcmd這3個變量因為這個時候,最方便把boot.img傳到機(jī)器里面的方法就是通過tftp。所以,我們要先設(shè)置下網(wǎng)絡(luò)環(huán)境
ipaddr=192.168.1.10
這個是設(shè)置Q5盒子本身的ip地址
serverip=192.168.1.1
這個就是tftp服務(wù)器的ip地址,所以你需要設(shè)置為你的實際的地址,在這里我的機(jī)器是192.168.2.163,所以Q5盒子就相應(yīng)設(shè)置到同一個網(wǎng)段,我用的192.168.2.11,于是,執(zhí)行如下命令修改這兩個環(huán)境變量
fastboot# set ipaddr 192.168.2.11
fastboot# set serverip 192.168.2.163
fastboot#
再說下環(huán)境變量bootcmd
bootcmd=mmc read 0 0x1FFFFC0 0x4B000 0x5000; bootm 0x1FFFFC0
這下知道盒子怎么啟動了吧?就是先從mmc第0x4B000處把內(nèi)核讀到內(nèi)存的0x1FFFFC0地址,然后運(yùn)行bootm從0x1FFFFC0開始運(yùn)行,啟動內(nèi)核。
我們這里是要啟動我們修改好的boot.img,沒刷到mmc里面,怎么辦呢?那就是要用到的tftp命令。要用tftp,你首先還得在你的電腦上有個tftp服務(wù)器才行,我用的是廣泛使用的tftpd32.exe,哪里去找呢?還是萬能的百度,關(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
運(yùn)行tftpd32.exe
這下可以從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)
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
啟動完畢,按下回車,看到了shell提示符,有沒有?
130|root@Hi3798CV100:/ #
到這里,基本上就大功告成了,你已經(jīng)獲得了root權(quán)限,可以做事了。我這里并未把改好的boot.img 刷到mmc, 你要有興趣,可以在剛才的fastboot界面,tftp上傳完了boot.img后,用mmc write寫進(jìn)去,當(dāng)然你如果搞錯了,把機(jī)器寫壞了可別怪我哈。 |