基于 Linux® 的 Nokia 770 Internet tablet 对于 Linux 爱好者来说是一个迷人的东西。尽管它没有人们对掌上电脑所期望的大部分个人信息管理(PIM)程序,但是它在开发环境方面的一些新优点使它极受这些爱好者及专业嵌入式开发人员的垂青。
Nokia 770 的上市在 Linux 业界引起了一片喝彩之声。770 与之前的 Zaurus 不同,也和 Pocket PC 或 Palm 系统有很大区别,它并没有提供个人信息管理(PIM)功能;实际上,它并不能直接提供一般 PDA 所需要具备的特性。相反,它更像是一个提供诸如 Web 浏览器和 e-mail 客户机之类的应用程序的 “Internet tablet”。
Nokia 最近为 770 软件发布了一个更新包,它对于那些希望研究这个设备的用户来说更加友好。在之前的版本中,用户需要进入研发(R&D)模式才能获得 root 的访问权限。版本 1.05 使这个问题更容易得到解决。
Nokia 770 有两个存储设备可以使用,一个是内部的 flash 设备(被格式化为 JFFS2 文件系统),另外是一个插进来的卡(被格式化为 FAT 文件系统)。770 的连接方式非常有趣。在通过 USB 进行连接时,这个设备的默认行为是作为一个大容量存储设备使用。770 的内部存储不会通过这种方式来公开;相反,插进来的卡是作为一个通用 USB 存储设备给上游计算机使用的,这样可以简单地传输文件。当 770 以这种方式通过 USB 进行连接时,这块卡就会从 770 上卸载,这是为了防止出现数据崩溃的情况。这种方式能够很好地提供对设备上文件的访问。
在很大程度上,设备并不需要很多手工配置工作;它可以连接到蓝牙电话或无线网络上,这种连接可以自动实现也可以在用户进行少量干预下实现。基于 Linux 的系统在自动网络配置技术方面的发展十分显著。
安装概述
770 的安装与类似设备一样,都是围绕 BusyBox 而构建起来的。启动脚本都是相当标准的 Debian 脚本,带有完整的 README 文件。有趣的部分是用户界面和开发工具,与相当原始的 Zaurus 环境相比,它有相当明显的改进。通过 maemo.org 页面为开发人员提供的支持也相当全面(请参阅 参考资料 中的链接)。
与我之前见过的基于 Linux 的设备相比,770 的不同之处在于:对开发人员的支持更加有效,也更加深入。770 并没有很好地解决其中的所有问题(还好 Web 浏览是个例外)。然而,Nokia 似乎更想把社区开发的潜能作为这台机器的主要优点之一。开发工具也更偏重于一般的爱好者,而不仅仅是专业开发人员。用来加载新 ROM 镜像和设置特殊设备标志(例如 R&D 模式)的工具也可以通过下载获得了。
这种特性引发了大量有趣的开发项目。举例来说,与大部分 tablet 或 PDA 设备一样,770 在文本输入方面具有很大的缺陷:即使您喜欢键盘或手写识别,它也会占据屏幕上很大的地方,这对于一个只有 4 英寸屏幕的设备来说未免代价太高。现在,已经可以在 770 上使用蓝牙或 USB 键盘;情况好多了(更多信息请参阅 侧栏)。
获得访问权限
在 770 的早期版本中,用户必须要使用 flasher 工具将这个设备切换成 R&D 模式,然后运行 gainroot 脚本。这个脚本如清单 1 所示,它本身就非常有趣。
清单 1. gainroot 脚本
#!/bin/sh -e
trap exit SIGHUP SIGINT SIGTERM
PATH=/bin:/usr/bin:/sbin:/usr/sbin
MODE=`/usr/sbin/chroot /mnt/initfs cal-tool --get-rd-mode`
if [ x$MODE = xenabled ]
then
echo "Root shell enabled"
/bin/sh
else
echo "Enable RD mode if you want to break your device"
fi
默认的 sudoers 文件允许任何人通过 sudo 命令来运行这个脚本;如果您的 770 现在就处于 R&D 模式,您就会获得一个 shell;否则,您会看到一条幽默的警告信息。
在最新的版本中提供了一个更加简单的选择:可以以 root 用户的身份使用 ssh 登录到系统中。这需要下载一个第三方的 dropbear 包,然后以 root 用户的身份使用 ssh 登录系统,其密码为 rootme。这个允许 root 登录的默认密码随处可见,未免太过简单直接;如果您安装了 ssh 服务器,请务必修改自己的 root 密码。您没有修改?真的么?那就请修改一下吧。一种常见的解决方案是设置用户的密码,配置 /etc/sudoers,然后运行 passwd -l root 彻底禁止 root 登录。
我们之所以要离题介绍这些内容,是为了说明:尽管有些供应商可以提供 Linux 的一些最小子集,并严加保护;Nokia 现在提供给我们也还不过是个编译器。就目前而言,这个设备对于大部分人来说还不是个大众的消费品;目前它只是个 “玩具盒” 而已。有关如何找到一个适合在如此小的设备上使用的特性完整的 Linux,这里有很多有趣的东西。
桌面系统问题
770 的安装并不能决定它究竟是一个嵌入式系统还是一个功能完整的桌面 Linux。早期的版本提供了一个系统影像,其中所安装的文件都不受包管理系统的控制;在我曾经见过的版本中,包管理器提供了 900 多个包,其中有些可选,有些不可选,如清单 2 所示。
清单 2. 一个很长列表的开头
# dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii adduser 3.51 Add and remove users and groups
ii apt 0.6.42.3osso13 Advanced front-end for dpkg
ii archtunjo 0.0.8-4 the D-BUS wrapper for games
ii autoipd 0.9.6-1osso9 Autoipd from Howl
ii base-files 3.1.osso2 Debian base system miscellaneous files
ii base-passwd 3.5.7.osso1 Debian base system master password and group
ii bluez-utils 2.25-cvs200605 Bluetooth tools and daemons
这为更加灵活的安装提供了基础,有时您可能会希望腾出一些空间来安装其他文件 ---- 倒不是因为系统可能很快就没有空间了。在可移动设备上使用的一些大文件大都保存在可移走的卡上,而不是放在主存上。
一般来说,我们需要删除一些不太有用的程序或脚本;举例来说,glibc.sh 脚本负责警告 AMD64 系统上 glibc 的兼容性要求,在 770 上它显然就是不必要的(它实际上多少涉及到了 ARM 系统;它们需要内核版本 2.4 或之后的版本。我所见过的版本中的 2.6.16 内核可能就可以)。另外,我所见过的每个系统都有一些这种东西;在实践中,想方设法将这些没用的东西删除掉可能很麻烦,不太值得。
开发
770 的软件开发环境比较新,不过 770 的最终用户却看不到,因为这些开发工具并不会真正加载到 770 设备上,而是在一个工作站或 PC 上运行。大约 3 年前,我为 Sharp Zaurus 编写了一些交叉编译方面的东西(请参阅 参考资料 中的链接)。这个过程非常棘手。770 使用了一个新的交叉编译环境,名为 Scratchbox,由 Nokia 主导开发。这个工具中有很多改进,它提供了一个环境,目标系统上的二进制文件在交叉开发过程中就能在这个环境上运行(以仿真模式)。其最终结果是所有用于解决那些编写得很差的可移植性测试的麻烦和混乱都消失了;您获得的是主机系统的性能(包括编译器工具链的本地执行)和目标系统的行为能力。
尽管这些工具仍然处于早期的开发阶段中,但它们已经比较稳定,功能也比较强大,且在积极地维护之中。为各种其他系统开发工具的道路可能还很长。另外,一个很好的交叉编译环境,并已消除了较传统用法的一些弊端,可以帮助减少由于机器没有太多内存和 CPU 来进行大型的软件编译所带来的不便。
必须要进行的比较
从 770 可以看出它吸取了 Zaurus 中的很多经验和教训。在前面我曾经提到过缺少物理键盘,但是这却吸引了很多外部的开发努力。更加微妙的一个改进是可用内存的数量;尽管与以前的设备相比, 770 的内存更多,但是它也很容易就能将内存消耗殆尽。即使只多一点内存,也会大有帮助。另一方面,全屏视频回放也不能不提,能够提供此功能的设备会给人印象深刻。
770 并不像有些 PDA 设备那样有一些扩展选项(使用 CompactFlash 和 Secure Digital 卡插槽)。它唯一的扩展槽使用了一种简化型的 SD 卡,无疑它非常适合这种非常拥挤的设备。另一方面,很少有 PDA 设备可以配置成作为 USB 主机设备来工作;如果您愿意花一些时间和精力,770 甚至可以使用 USB 硬盘。
由于 770 是一个手持设备,因此人们不免会拿它与各种掌上型设备进行比较。770 并不是一个 PDA。它是一个 Internet 小部件。770 中所提供的 Opera Web 浏览器是一般的手持设备所不具有的。770 并没有用户对于 PDA 所期望的那种 PIM 应用程序,不过,很多以 PDA 为目标而设计的设备也都纷纷用于其他应用程序了,例如 Web 和 e-mail 的访问。在很多情况下,对比这类设备而言,770 的表现非常优秀,不过如果能够更好地支持键盘 ---- 举例来说,支持传统 IR 键盘 ---- 就再好不过了。
Nokia 在增强 770 对爱好者和玩家的友好性方面进行了很多努力,不过默认的安装并没有包含任何 shell;这与 Zaurus 有很大的不同。呈现在用户面前的更像是一个简化的 Internet kiosk 终端,而不像是一个桌面工作站。与 TiVo 类似,要有效地利用 770 的基本特性并不需要我们必须了解或关心自己是在运行 Linux 系统。但是与 TiVo不同的是,770 欢迎用户利用 Linux 来添加自己的特性。
770 的发展目标
在为撰写这篇文章而进行调研时,我阅读了大量有关 770 的评论,我的感觉是很多人都不清楚 770 到底是什么。人人都宣称希望有一个基于 tablet 的 Web 浏览器,但是很多人并不清楚自己究竟要用它来干什么。
770 提供了无线和蓝牙访问能力,这使得它作为一个在 Web 上查找内容的设备来说非常引人瞩目。它还很有潜力可用来开发定制应用程序;举例来说,它可以成为一个优秀的无线网络嗅探器。
尽管 770 的目标还不甚明确,但是 Nokia 对此已经进行了大量的研究工作;他们开发了一整套新的交叉编译架构,这在 770 上得到了广泛的应用。对开发人员友好的环境好像是把许多黑客也带了进来,不过开发人员所提供的反馈和补丁必然有助于这个开发环境的不断改进。即使它不会直接取得很大的成功,770 对于嵌入式 Linux 开发领域的贡献也相当大,最终会使今后基于 Linux 的设备更好,价格也会更便宜。
Wisdom 于 2006-12-21 09:17:50发表:
对 USB 键盘的支持
Nokia 770 可以非常好地支持 USB 键盘,因为它基本上就是一个硬件 hack。问题在于物理设备;770 的 USB 硬件有一个下游设备所常用的那种插孔,它所连接的芯片只有在加上 5 伏电压时才会激活 ---- 如果该设备作为一个下游机器使用,出现这种情况还算正常。这里还有一个软件问题:这台机器必须要配置成 USB 主机模式,而不能是 USB 设备模式。这可能会造成 flasher 工具出现一点混乱。奇怪的是,尽管 Nokia 的页面主要都是根据 Windows® 下载方式来构建的,flasher 工具却只能用于 Mac OS X 和 Linux。
不过,作为一名软件开发人员,我感觉 770 最迷人的地方是它开发了一个为 USB 线增加 5 伏电压的电路。