热门关键字:  ubuntu  分区  Fedora  linux系统进程  函数

当前位置 :| 主页>Linux教程>编程开发>

Linux 助力 Nokia 770

来源: 作者: 时间:2007-02-25 Tag: 点击:
基于 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 的系统在自动网络配置技术方面的发展十分显著。

对 USB 键盘的支持

Nokia 770 可以非常好地支持 USB 键盘,因为它基本上就是一个硬件 hack。问题在于物理设备;770 的 USB 硬件有一个下游设备所常用的那种插孔,它所连接的芯片只有在加上 5 伏电压时才会激活 —— 如果该设备作为一个下游机器使用,出现这种情况还算正常。这里还有一个软件问题:这台机器必须要配置成 USB 主机模式,而不能是 USB 设备模式。这可能会造成 flasher 工具出现一点混乱。奇怪的是,尽管 Nokia 的页面主要都是根据 Windows® 下载方式来构建的,flasher 工具却只能用于 Mac OS X 和 Linux。

不过,作为一名软件开发人员,我感觉 770 最迷人的地方是它开发了一个为 USB 线增加 5 伏电压的电路。在后面 参考资料 一节中给出了有关这些内容的链接。

安装概述

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 内核可能就可以)。另外,我所见过的每个系统都有一些这种东西;在实践中,想方设法将这些没用的东西删除掉可能很麻烦,不太值得。



相关文章:
ioctl函数
struts与spring三种整合方法
进程的创建fork
jsp速成
Hibernate单向一对多应注意的问题
Java RMI之HelloWorld篇
常用的Eclipse快捷键
sparc linux 系统调用
一个关于jboss "Halting VM"的情况处理
编写更好的Linux程序3(这次只讲void *)
Tikiwiki 2.2+ Ucenter 1.5(Discuz)整合
玩转ptrace(一)
玩转ptrace(二)
dup2
pipe
Jboss的学习
gcc用法
将UI从代码中解放出来
数据结构与算法(2)
有关于JAVA中的CLASSPATH的作用
const成员函数
虚函数
《c和指针》读书笔记2
初次接触Zend Framework需要掌握的内容
php中require和include的简单区别
正则表达式在PHP中的应用
在PHP中使用与Perl兼容的正则表达式
Zend Studio 生成 wsdl
freebsd7 + php5.2.6 + xdebug2.0.2安装
PHP抓取远程网站数据的代码