死乘把口 发表于 2006-11-19 16:32:16

[分享]在Linux下同步Palm(with udev)

http://andylog.blogbus.com/logs/2006/11/3864061.html

OS: Ubuntu 606 Kernel = 2.6.15-23-686
Palm Treo650 (PalmOS 5.4H)

Palm官方提供的同步套件只有Windows版和Mac OSX版的。虽然在Linux下给Palm设备安装软件已经可以解决(Card Reader + Resco Explorer),但是同步PIM的话还是无能为力。

搜索到的文档大多都是说的2.6.9的kernel之前的。那时只要简单的做一个到/dev/ttyUSB*的连接就可以通过一些套件同步了。但是现在的 kernel已经加入了udev,这个东西对U盘等设备来说是很爽的。但是,她的先进通讯机制却让Plam设备不爽了。因为她是在插入USB设备后动态生成/dev/ttyUSB*的。也就是说。在初始状态下,插入Palm后并按下同步按钮之后会生成/dev/ttyUSB0和/dev/ttyUSB1这两个设备,取消同步之后这两个ttyUSB就会消失。问题就在这,因为这样的话就不能给/dev/ttyUSB*做一个名为/dev/pilot的固定连接。

OK,从头开始。首先安装pilot-link。可以到http://www.pilot-link.org抓源码自己编译安装,也可以直接apt。接着安装jpilot。一样,可以到http://www.jpilot.org抓源码或者apt。

接下来就是解决udev的问题。在/etc/udev/rules.d/目录下建立10-local.rules这个档案,内容如下:
BUS="usb" SYSFS{product}="Palm Handheld*" KERNEL="ttyUSB*" SYMLINK="pilot" MODE="666" KERNEL="ttyUSB*" SYMLINK="pilot"
然后重启udev:
/etc/init.d/udev restart

这时,若是使用Gnome自带的那个gpilot的话,在设备那里添上/dev/pilot,就可以使用gpilot和Evolution来同步了。。但是我不喜欢evolution,也早已删除了他。

我选择了jpilot做为同步工具。运行jpilot,在偏好设定中设置字符集为"GBK",连接端口为/dev/pilot。
这个时候你去同步的话会告诉你/dev/pilot不存在的。因为jpilot是先检测/de/pilot这个设备,然后在去同步的,但是udev的特性让 Palm在接入并且按了同步按钮之后才会生成/dev/ttyUSB0和/debv/ttyUSB1这个两个设备,然后根据前文所写的udev设备规则(10-local.rules),生成一个到/dev/ttyUSB1的连接,连接名为/dev/pilot。之所以gpilot可以同步成功是因为 gpilot是不断的去检测/dev/pilot是否有讯号,但不去检测/dev/pilot是否真的存在,在按下同步按钮之后生成了 /dev/pilot,所以gpilot就OK了。

所以,我做了一个到/dev/ttyUSB1的死链接(因为在按下同步按钮之前,ttyUSB1是不存在的):
ln -s /dev/ttyUSB1 /dev/pilot
然后在jpilot介面点击同步按钮,接着过几秒钟再按下Palm同步线或者同步底座上的同步按钮。记住一定要等几秒钟,不能像网上的那些比较老的文档中所说的那样,按下同步按钮后接着迅速按Palm上的同步按钮,因为那是对付没有udev的系统的。这时jpilot检测到/dev/pilot“存在”,并在你按下Palm上的同步按钮之后开始同步操作。同步完成之后,系统会自动释放/dev/pilot这个连接的,所以若是想再次同步,必须再执行ln -s /dev/ttyUSB1 /dev/pilot这个操作。

需要注意的是假若某次同步不成功,可能会导致系统没有成功释放 /dev/ttyUSB0和/dev/ttyUSB1这两个设备。所以再ln -s /dev/ttyUSB1 /dev/pilot会无法同步的,因为此时Palm会接驳在/dev/ttyUSB2和/dev/ttyUSB3上,依此类推。所以要ln -s /dev/ttyUSB3 /dev/pilot。可以用ls /dev/ttyUSB*来查看。
页: [1]
查看完整版本: [分享]在Linux下同步Palm(with udev)