領(lǐng)略L(fǎng)inux操作系統魅力:TiVo 揭秘
看一看軟件
關(guān)于 TiVo 最有趣的一件事情是它有很多特殊用途的應用程序。雖然從理論上來(lái)說(shuō)它有一個(gè)顯示設備,但是實(shí)際上它只能通過(guò)在屏幕上卷屏來(lái)顯示文本。系統中有一個(gè)可執行文件 /tvbin/text2osd,它聽(tīng)起來(lái)像是一個(gè)將數據作為屏幕顯示寫(xiě)到輸出磁帶上的應用程序。還有一些非常有趣的 PNG 文件,所有這些文件的大小都是典型的視頻文件的大小,其中包含了可能需要顯示的一些消息。
雖然這些軟件有點(diǎn)混亂,但是實(shí)際上并不需要在一些直觀(guān)的位置上具有真正的內容;只有開(kāi)發(fā)團隊需要這些內容。有些內容對于其他用戶(hù)來(lái)說(shuō)可能并沒(méi)有太多意義,所有的 TiVo 軟件都位于 /tvbin 和 /tvlib 中,但是很多程序的配置文件都位于 /opt/tivo 中。更傳統的 Linux 文件系統的布局應該將這些文件放到 /opt/tivo/bin、/opt/tivo/lib 和 /opt/tivo/etc 中。
來(lái)看一下 Tcl 腳本,我注意到它是由 /tvbin/tivosh 解釋的。這可能是一個(gè) tcl 解釋器。但是稍等一下,它實(shí)際上是一個(gè)符號鏈接,鏈接到一個(gè)名為 tivoapp 的程序。很多不同的程序都會(huì )鏈接到 tivoapp 上。它看起來(lái)就像是一個(gè)包含多個(gè)不同程序的統一的二進(jìn)制文件。為什么要這樣編譯程序的原因并不非常直觀(guān) —— 它可以降低內存的使用,或者可以讓系統更難以崩潰。
混合與匹配
非常值得注意的一件事情是 TiVo 具有一個(gè)非常松散的 shell 腳本、Tcl 程序和二進(jìn)制程序的組合。查看一下程序,就可以了解到該程序到底做什么。例如 installNFS 腳本,是使用 bash 編寫(xiě)的,它調用 text2osd 來(lái)顯示消息。這個(gè)腳本中甚至內嵌了一個(gè) Tcl 腳本!
對于開(kāi)發(fā)來(lái)說(shuō),Linux 的一大魅力就在于它可以自由地混合并適應開(kāi)發(fā)工具的要求,例如 TiVo 就充分說(shuō)明了這種優(yōu)點(diǎn)。
系統啟動(dòng)
與任何 Linux 系統一樣,TiVo 也會(huì )派生 /sbin/init,后者又會(huì )查看 /etc/inittab 的內容來(lái)確定要執行哪些操作。它所做的第一件事情是運行 /etc/rc.d/rc.sysinit,后者又會(huì )運行諸如 StageA_PreKickstart 和 StageG_PostApplication 之類(lèi)的目錄中的文件。它們都是按照順序來(lái)執行的。
每個(gè)這種目錄中都包含很多的腳本,這些腳本的名字類(lèi)似于 rc.Sequence_150.CheckForDebug.sh。這些文件與常見(jiàn)的 Linux 系統上的 /etc/rc.d/rc3.d/S12sshd 文件類(lèi)似。注意 shell 的擴展順序(例如 rc.Sequence_*.sh)用來(lái)確定這些文件的執行順序。如果一個(gè)腳本的名字中包含字符串 .Platform,那么它就只能在所匹配的硬件上運行。
對于供應商來(lái)說(shuō)這是一個(gè)很好的設計,因為他們并不需要為每臺機器都構建不同的磁盤(pán)。.Implementation 和 .Implementer 標記與此類(lèi)似,它們用來(lái)標識只在某些系統上運行的腳本。Stage 目錄替換了 rcN.d 目錄,后者在 TiVo 系統上已經(jīng)不存在了。
這種組織方式使查看在啟動(dòng)的每個(gè)步驟中到底執行了哪些功能變得相當簡(jiǎn)單。有趣的是,這些 shell 腳本被引入了父 shell 中,這樣,早期的腳本就可以為以后的腳本設置一些環(huán)境變量了。
結束語(yǔ)
TiVo 是眾多不同 Linux 哲學(xué)中一個(gè)非常迷人的例子,它還在不斷發(fā)展,與公司通過(guò)向用戶(hù)銷(xiāo)售服務(wù)和提供簡(jiǎn)單健壯的應用程序來(lái)賺錢(qián)的哲學(xué)形成了顯著(zhù)的對比。黑客發(fā)現的最有效的很多特性可能是讓其他人不能使用完全定制的系統的客戶(hù)技術(shù)支持,同時(shí)納悶它們?yōu)楹尾荒芄ぷ鳌?
從另外一方面來(lái)說(shuō),現在已經(jīng)進(jìn)行了大量的努力來(lái)使得對系統的攻擊更加困難。早期的 TiVo 系統通常被修改成 Web 服務(wù)器。我正在查看的一個(gè)特性正如任何人都了解的一樣,不能用來(lái)運行新內核;也不可能不經(jīng)過(guò)對硬件(PROM,用來(lái)檢查對軟件的未經(jīng)授權的修改)的攻擊就對系統進(jìn)行大量的改變。
值得一提的是,盡管 GPL 要求 TiVo 必須公開(kāi)自己的內核源代碼,但是并沒(méi)有不讓它們構建一個(gè)不許您做任何更改的運行 Linux 的系統。這種系統有趣的方面在于,了解系統如何來(lái)實(shí)現自己的功能,以及如何使用各種開(kāi)源工具和技術(shù)來(lái)構建一個(gè)嵌入式應用程序。
評論