清单 5. 这个格式非常熟悉,不是吗?
Partition map (with 512 byte blocks) on '/dev/rdisk1'
#: type name length base ( size )
1: Apple_partition_map Apple 63 @ 1
2: Image Bootstrap 1 1 @ 44161324
3: Image Kernel 1 8192 @ 44161325 ( 4.0M)
4: Ext2 Root 1 524288 @ 44169517 (256.0M)
5: Image Bootstrap 2 1 @ 44693805
6: 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
|
这为我们能够期望得到什么内容提供了很好的思想。首先,它好像是设计用来更新一个文件系统,同时在另外一个文件系统上运行,这样能使更新更加安全。奇怪的是:这为文件系统提供了精确的块偏移量和大小。这说明现在可以重新在 Linux 机器上装上这个磁盘并查看这些文件系统的内容了。
清单 6. 详细了解文件系统的内容
# 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 文件系统尚未格式化;它只是 256 MB 的空字节。而 Root 2 文件系统的内容非常理想:
清单 7. 好极了!
# file root2.img
root2.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
|
安全性
采用专用系统的缺点之一是,TiVo 具有一些旨在防止别人修改它的“安全性”特性。这是一个非常简单的经济学问题 —— 以 100 美元的价格销售具有硬盘和 TV 谐调器的通用 MIPS 系统的任何公司很快就破产了。对于现在来说,我们只是要了解一下 Linux 是怎么样在这个系统上运行的,而不是了解怎么样修改它。
注意,ext2 文件系统在不同系统之间的兼容性意味着您可以选择使用一个普通的 Linux 机器。您甚至可以设置一个交叉编译器以及相关的工具,后面我们会更详细地进行介绍。然而,不要期望能够很容易地修改内容;尽管已经可以这样做了,但是这并不意味着这非常简单。记住,这是一个专有的可以实现录像功能的硬件。更不必说,有很多公司都非常希望难以对它做较大修改。
在这个特定的 TiVo 模型中,在加载内核之前,要进行一个硬件安全性检查。然后,内核本身具有一个内嵌的 RAMdisk,其中包含了一些安全性特性;我们可以对在硬盘上找到的代码进行比较,例如 /var/utils/checkkernel.tcl 脚本。
值得指出的是,在原始安装中有大量的额外空间。根文件系统使用了 54 MB 的空间,还有 182 MB 的剩余空间;/var 使用了 3 MB,还有 116 MB 的空闲空间。当然,这样做的目的是为了存储大量的数据,例如您需要监视的程序。
看一看软件
关于 TiVo 最有趣的一件事情是它有很多特殊用途的应用程序。虽然从理论上来说它有一个显示设备,但是实际上它只能通过在屏幕上卷屏来显示文本。系统中有一个可执行文件 /tvbin/text2osd,它听起来像是一个将数据作为屏幕显示写到输出磁带上的应用程序。还有一些非常有趣的 PNG 文件,所有这些文件的大小都是典型的视频文件的大小,其中包含了可能需要显示的一些消息。
虽然这些软件有点混乱,但是实际上并不需要在一些直观的位置上具有真正的内容;只有开发团队需要这些内容。有些内容对于其他用户来说可能并没有太多意义,所有的 TiVo 软件都位于 /tvbin 和 /tvlib 中,但是很多程序的配置文件都位于 /opt/tivo 中。更传统的 Linux 文件系统的布局应该将这些文件放到 /opt/tivo/bin、/opt/tivo/lib 和 /opt/tivo/etc 中。
来看一下 Tcl 脚本,我注意到它是由 /tvbin/tivosh 解释的。这可能是一个 tcl 解释器。但是稍等一下,它实际上是一个符号链接,链接到一个名为 tivoapp 的程序。很多不同的程序都会链接到 tivoapp 上。它看起来就像是一个包含多个不同程序的统一的二进制文件。为什么要这样编译程序的原因并不非常直观 —— 它可以降低内存的使用,或者可以让系统更难以崩溃。
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一页 1 23 下一页
上一篇:Zaurus 引领嵌入式 Linux 下一篇:四种实时操作系统特性进行分析和比较
|