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

          新聞中心

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

          領(lǐng)略L(fǎng)inux操作系統(tǒng)魅力:TiVo 揭秘

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

          看一看軟件

          關(guān)于 最有趣的一件事情是它有很多特殊用途的應(yīng)用程序。雖然從理論上來(lái)說(shuō)它有一個(gè)顯示設(shè)備,但是實(shí)際上它只能通過(guò)在屏幕上卷屏來(lái)顯示文本。系統(tǒng)中有一個(gè)可執(zhí)行文件 /tvbin/text2osd,它聽(tīng)起來(lái)像是一個(gè)將數(shù)據(jù)作為屏幕顯示寫(xiě)到輸出磁帶上的應(yīng)用程序。還有一些非常有趣的 PNG 文件,所有這些文件的大小都是典型的視頻文件的大小,其中包含了可能需要顯示的一些消息。

          雖然這些軟件有點(diǎn)混亂,但是實(shí)際上并不需要在一些直觀的位置上具有真正的內(nèi)容;只有開(kāi)發(fā)團(tuán)隊(duì)需要這些內(nèi)容。有些內(nèi)容對(duì)于其他用戶(hù)來(lái)說(shuō)可能并沒(méi)有太多意義,所有的 軟件都位于 /tvbin 和 /tvlib 中,但是很多程序的配置文件都位于 /opt/tivo 中。更傳統(tǒng)的 Linux 文件系統(tǒng)的布局應(yīng)該將這些文件放到 /opt/tivo/bin、/opt/tivo/lib 和 /opt/tivo/etc 中。

          來(lái)看一下 Tcl 腳本,我注意到它是由 /tvbin/tivosh 解釋的。這可能是一個(gè) tcl 解釋器。但是稍等一下,它實(shí)際上是一個(gè)符號(hào)鏈接,鏈接到一個(gè)名為 tivoapp 的程序。很多不同的程序都會(huì)鏈接到 tivoapp 上。它看起來(lái)就像是一個(gè)包含多個(gè)不同程序的統(tǒng)一的二進(jìn)制文件。為什么要這樣編譯程序的原因并不非常直觀 —— 它可以降低內(nèi)存的使用,或者可以讓系統(tǒng)更難以崩潰。

          混合與匹配

          非常值得注意的一件事情是 具有一個(gè)非常松散的 shell 腳本、Tcl 程序和二進(jìn)制程序的組合。查看一下程序,就可以了解到該程序到底做什么。例如 installNFS 腳本,是使用 bash 編寫(xiě)的,它調(diào)用 text2osd 來(lái)顯示消息。這個(gè)腳本中甚至內(nèi)嵌了一個(gè) Tcl 腳本!

          對(duì)于開(kāi)發(fā)來(lái)說(shuō),Linux 的一大魅力就在于它可以自由地混合并適應(yīng)開(kāi)發(fā)工具的要求,例如 TiVo 就充分說(shuō)明了這種優(yōu)點(diǎn)。

          系統(tǒng)啟動(dòng)

          與任何 Linux 系統(tǒng)一樣,TiVo 也會(huì)派生 /sbin/init,后者又會(huì)查看 /etc/inittab 的內(nèi)容來(lái)確定要執(zhí)行哪些操作。它所做的第一件事情是運(yùn)行 /etc/rc.d/rc.sysinit,后者又會(huì)運(yùn)行諸如 StageA_PreKickstart 和 StageG_PostApplication 之類(lèi)的目錄中的文件。它們都是按照順序來(lái)執(zhí)行的。

          每個(gè)這種目錄中都包含很多的腳本,這些腳本的名字類(lèi)似于 rc.Sequence_150.CheckForDebug.sh。這些文件與常見(jiàn)的 Linux 系統(tǒng)上的 /etc/rc.d/rc3.d/S12sshd 文件類(lèi)似。注意 shell 的擴(kuò)展順序(例如 rc.Sequence_*.sh)用來(lái)確定這些文件的執(zhí)行順序。如果一個(gè)腳本的名字中包含字符串 .Platform,那么它就只能在所匹配的硬件上運(yùn)行。

          對(duì)于供應(yīng)商來(lái)說(shuō)這是一個(gè)很好的設(shè)計(jì),因?yàn)樗麄儾⒉恍枰獮槊颗_(tái)機(jī)器都構(gòu)建不同的磁盤(pán)。.Implementation 和 .Implementer 標(biāo)記與此類(lèi)似,它們用來(lái)標(biāo)識(shí)只在某些系統(tǒng)上運(yùn)行的腳本。Stage 目錄替換了 rcN.d 目錄,后者在 TiVo 系統(tǒng)上已經(jīng)不存在了。

          這種組織方式使查看在啟動(dòng)的每個(gè)步驟中到底執(zhí)行了哪些功能變得相當(dāng)簡(jiǎn)單。有趣的是,這些 shell 腳本被引入了父 shell 中,這樣,早期的腳本就可以為以后的腳本設(shè)置一些環(huán)境變量了。

          結(jié)束語(yǔ)

          TiVo 是眾多不同 Linux 哲學(xué)中一個(gè)非常迷人的例子,它還在不斷發(fā)展,與公司通過(guò)向用戶(hù)銷(xiāo)售服務(wù)和提供簡(jiǎn)單健壯的應(yīng)用程序來(lái)賺錢(qián)的哲學(xué)形成了顯著的對(duì)比。黑客發(fā)現(xiàn)的最有效的很多特性可能是讓其他人不能使用完全定制的系統(tǒng)的客戶(hù)技術(shù)支持,同時(shí)納悶它們?yōu)楹尾荒芄ぷ鳌?

          從另外一方面來(lái)說(shuō),現(xiàn)在已經(jīng)進(jìn)行了大量的努力來(lái)使得對(duì)系統(tǒng)的攻擊更加困難。早期的 TiVo 系統(tǒng)通常被修改成 Web 服務(wù)器。我正在查看的一個(gè)特性正如任何人都了解的一樣,不能用來(lái)運(yùn)行新內(nèi)核;也不可能不經(jīng)過(guò)對(duì)硬件(PROM,用來(lái)檢查對(duì)軟件的未經(jīng)授權(quán)的修改)的攻擊就對(duì)系統(tǒng)進(jìn)行大量的改變。

          值得一提的是,盡管 GPL 要求 TiVo 必須公開(kāi)自己的內(nèi)核源代碼,但是并沒(méi)有不讓它們構(gòu)建一個(gè)不許您做任何更改的運(yùn)行 Linux 的系統(tǒng)。這種系統(tǒng)有趣的方面在于,了解系統(tǒng)如何來(lái)實(shí)現(xiàn)自己的功能,以及如何使用各種開(kāi)源工具和技術(shù)來(lái)構(gòu)建一個(gè)嵌入式應(yīng)用程序。


          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: Linux操作系統(tǒng) TiVo PNG文件

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();