<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

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

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

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

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

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

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

          接下來是真相大揭密 —— 這個(gè)磁盤上包含了一個(gè) 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....'

          您還懷疑嗎?

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

          嚴(yán)格來說,這仍然是一種專有格式;不過它已經(jīng)是大家都知道了的一種格式。不幸的是,這些分區(qū)使用的都不是 OS X 所熟悉的格式,但是我的 Mac Mini 可以讀取這個(gè)分區(qū)表。下面是這個(gè)分區(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è)計(jì)用來更新一個(gè)文件系統(tǒng),同時(shí)在另外一個(gè)文件系統(tǒng)上運(yùn)行,這樣能使更新更加安全。奇怪的是:這為文件系統(tǒng)提供了精確的塊偏移量和大小。這說明現(xiàn)在可以重新在 Linux 機(jī)器上裝上這個(gè)磁盤并查看這些文件系統(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)的缺點(diǎn)之一是, 具有一些旨在防止別人修改它的“安全性”特性。這是一個(gè)非常簡單的經(jīng)濟(jì)學(xué)問題 —— 以 100 美元的價(jià)格銷售具有硬盤和 TV 諧調(diào)器的通用 MIPS 系統(tǒng)的任何公司很快就破產(chǎn)了。對(duì)于現(xiàn)在來說,我們只是要了解一下 Linux 是如何在這個(gè)系統(tǒng)上運(yùn)行的,而不是了解如何修改它。

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

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

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



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();