新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 領(lǐng)略Linux操作系統(tǒng)魅力:TiVo 揭秘

領(lǐng)略Linux操作系統(tǒng)魅力:TiVo 揭秘

作者: 時間:2012-05-22 來源:網(wǎng)絡(luò) 收藏

# bzip2 -1c  /dev/hde > tivo.img.bz2

注意開始可能會出現(xiàn)一些嚴(yán)重的錯誤;而且一段時間內(nèi)可能不會有任何輸出結(jié)果。這個磁盤中包含了很多 空扇區(qū),一開始整個扇區(qū)的內(nèi)容都為 0,bzip2 負(fù)責(zé)對磁盤上的內(nèi)容進(jìn)行壓縮 —— 在到達(dá) 4,096 字節(jié)之前可能需要 1 分鐘,在到達(dá) 8,192 字節(jié)時還需要幾分鐘。最后的文件大小大約是 560 MB,對于一個 40 GB 的磁盤映像文件來說這還不錯。如果您希望從這個備份進(jìn)行還原,只需要執(zhí)行下面的命令:

# bzip2 -dc  tivo.img.bz2 > /dev/hde

如果您的磁盤上已經(jīng)有一些數(shù)據(jù),這個映像文件可能會遠(yuǎn)遠(yuǎn)大于 560 MB。此處假設(shè)您具有與 磁盤差不多的空閑空間。

那么,磁盤上有什么內(nèi)容呢?

由于磁盤并沒有進(jìn)行分區(qū),我們很容易就猜想它使用了某種專用的格式。研究其格式需要花費一定的時間。 當(dāng)然,要做的第一件事情是將磁盤看成裸字節(jié)。磁盤上數(shù)據(jù)的開頭有點類似于啟動引導(dǎo)程序的

root=/dev/hda7runfinaltest=2 contigmem8=16M brev=0x10

接下來是真相大揭密 —— 這個磁盤上包含了一個 Apple 分區(qū)映射:

0x0200  50 4d 00 00  00 00 00 0d  00 00 00 01  00 00 00 3f  'PM.............?'0x0210  41 70 70 6c  65 00 00 00  00 00 00 00  00 00 00 00  'Apple...........'0x0220  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  '................'0x0230  41 70 70 6c  65 5f 70 61  72 74 69 74  69 6f 6e 5f  'Apple_partition_'0x0240  6d 61 70 00  00 00 00 00  00 00 00 00  00 00 00 00  'map.............'0x0250  00 00 00 00  00 00 00 3f  00 00 00 33  00 00 00 00  '.......?...3....'

您還懷疑嗎?

回顧一下,對于運行 Linux 的 PowerPC 機器來說,使用一個 Apple 分區(qū)映射是非常合理的。對于 Apple 分區(qū)映射的支持并沒有什么特殊,也有很好的文檔進(jìn)行介紹。這對于 MIPS 系統(tǒng)來說并不是非常典型,但是卻可以選擇與 Series1 系統(tǒng)兼容,后者是在 PowerPC 上運行的。

嚴(yán)格來說,這仍然是一種專有格式;不過它已經(jīng)是大家都知道了的一種格式。不幸的是,這些分區(qū)使用的都不是 OS X 所熟悉的格式,但是我的 Mac Mini 可以讀取這個分區(qū)表。下面是這個分區(qū)表映射的內(nèi)容:

Partition map (with 512 byte blocks) on '/dev/rdisk1'#:                type name                       length   base     ( size )1: Apple_partition_map Apple                          63 @ 12:               Image Bootstrap 1                     1 @ 441613243:               Image Kernel 1                     8192 @ 44161325 (  4.0M)4:                Ext2 Root 1                     524288 @ 44169517 (256.0M)5:               Image Bootstrap 2                     1 @ 446938056:               Image Kernel 2                     8192 @ 44693806 (  4.0M)7:                Ext2 Root 2                     524288 @ 44701998 (256.0M)8:                Swap Linux swap                 262144 @ 45226286 (128.0M)9:                Ext2 /var                       262144 @ 45488430 (128.0M)10:                 MFS MFS application region     524288 @ 45750574 (256.0M)11:                 MFS MFS media region         33494098 @ 46799150 ( 16.0G)12:                 MFS MFS application region 2   524288 @ 46274862 (256.0M)13:                 MFS MFS media region 2       44161260 @ 64       ( 21.1G)Device block size=512, Number of Blocks=80293248 (38.3G)DeviceType=0x0, DeviceId=0x0

這為我們能夠期望得到什么內(nèi)容提供了很好的思想。首先,它好像是設(shè)計用來更新一個文件系統(tǒng),同時在另外一個文件系統(tǒng)上運行,這樣能使更新更加安全。奇怪的是:這為文件系統(tǒng)提供了精確的塊偏移量和大小。這說明現(xiàn)在可以重新在 Linux 機器上裝上這個磁盤并查看這些文件系統(tǒng)的內(nèi)容了。

# dd if=/dev/hde bs=512 count=524288 skip=44169517 of=root1.img# dd if=/dev/hde bs=512 count=524288 skip=44701998 of=root2.img# dd if=/dev/hde bs=512 count=262144 skip=45488430 of=var.img

這顯示 Root 1 文件系統(tǒng)尚未格式化;它只是 256 MB 的空字節(jié)。而 Root 2 文件系統(tǒng)的內(nèi)容非常理想:

# file root2.imgroot2.img: Linux rev 0.0 ext2 filesystem data# mount -o loop root2.img /mnt# ls /mnt.   bin  diag  etc       initrd   lib         mnt  proc  sbin  tvbin  var..  dev  dist  etccombo  install  lost+found  opt  res   tmp   tvlib# mount -o loop var.img /mnt/var# ls /mnt/var.   a    dev   etc  lost+found  mnt   packages  run    tmp..  bin  dist  log  mess        mtab  persist   state  utils

安全性

采用專用系統(tǒng)的缺點之一是, 具有一些旨在防止別人修改它的“安全性”特性。這是一個非常簡單的經(jīng)濟(jì)學(xué)問題 —— 以 100 美元的價格銷售具有硬盤和 TV 諧調(diào)器的通用 MIPS 系統(tǒng)的任何公司很快就破產(chǎn)了。對于現(xiàn)在來說,我們只是要了解一下 Linux 是如何在這個系統(tǒng)上運行的,而不是了解如何修改它。

注意,ext2 文件系統(tǒng)在不同系統(tǒng)之間的兼容性意味著您可以選擇使用一個普通的 Linux 機器。您甚至可以設(shè)置一個交叉編譯器以及相關(guān)的工具,后面我們會更詳細(xì)地進(jìn)行介紹。然而,不要期望能夠很容易地修改內(nèi)容;盡管已經(jīng)可以這樣做了,但是這并不意味著這非常簡單。記住,這是一個專有的可以實現(xiàn)錄像功能的硬件。更不必說,有很多公司都非常希望難以對它做較大修改。

在這個特定的 模型中,在加載內(nèi)核之前,要進(jìn)行一個硬件安全性檢查。然后,內(nèi)核本身具有一個內(nèi)嵌的 RAMdisk,其中包含了一些安全性特性;我們可以對在硬盤上找到的代碼進(jìn)行比較,例如 /var/utils/checkkernel.tcl 腳本。

值得指出的是,在原始安裝中有大量的額外空間。根文件系統(tǒng)使用了 54 MB 的空間,還有 182 MB 的剩余空間;/var 使用了 3 MB,還有 116 MB 的空閑空間。當(dāng)然,這樣做的目的是為了存儲大量的數(shù)據(jù),例如您需要監(jiān)視的程序。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉