同步
相信大家都听过Linux作业系统吧,但其实大家又知不知道PDA是可在Linux下作同步呢?虽然大部份的PDA用家亦是以微软视窗为作业系统,不过亦一定有采用Linux的朋友会购置
PDA,而我们又怎可以遗忘了这些PDA友?所以这次小记就找来许多文章来为大家消化,目的也只不过是想帮助一下用Linux的PDA新手用家。
就以索尼的Clie为例子,自己手上亦有一部N760C,可以即时知道网上介绍的方法是否可行,实验证明Cool@
拥有Clie的朋友都知道,跟Clie附送的光碟程式Palm Desktop只可在微软视窗执行的,如果要在Linux下运用同类的程式去同步传输资料、行事历记录、电话簿等,大家便要去下载一些同类的程式,而相信最容易的程式应该是Coldsync吧!不过可惜的是,这个程式只适用于PalmOS 4.x的Palm上,而所有PalmOS 5的Palm,包括索尼的Clie NX73V,便未能被支援了。
Coldsync
1.模组Modules
首先,用家必定要确定Linux已有以下核心模组kernel modules:
usbserial.ovisor.o
大家可在'/lib/modules/2.x.x/kernel/drivers/usb/'找到,而2.x.x代表你的核心版本。
如果用家是采用了Linux Redhat红帽的作业系统,用家便省却了不少功夫,因为红帽会自动载入(hotplug)这两个核心模组。不过用家若采用了Debian一类更专业的应用平台,那就要下一番功夫了。
要看看模组有否已载入,用家可在root根输入'lsmod',便会看到以下的文字:
FordPrefect:/home/milmber# lsmod
Module Size Used by
vmnet 17920 8
vmmon 18176 5
eeprom 3056 0
w83781d 17072 0
i2c-amd756 3056 0 (unused)
visor 10208 1
usbserial 17024 0 [visor]
NVdriver 945088 10 (autoclean)
3c59x 24992 1
再一次提醒大家,若使用红帽便可以省去这个步骤,因为它已为你载入了,大家只要确定在'/lib/modules/2.x.x/kernel/drivers/usb/'找到那两个模组便成。
2.权限及装置
之后便要确定是否已拥有正确的dev路径,用家可在'/dev/ttyUSBx'找到。若未有发现用家便要以root的身份自己新增dev路径了。如下:
'mknod /dev/ttyUSB0 c 188 0''mknod /dev/ttyUSB1 c 188 1'
同样红帽7.1的用家可省去这个步骤。
之后便是看看权限一项了,用家可在'/dev/ttyUSBx'档案检查到,当然要肯定所有预设用家都可以载入那两个USB埠,如果不是,那么每次同步便要以root的身份去进行了。如下:
crw-rw-rw- 1 root dip 188, 0 Jul 13 20:10 /dev/ttyUSB0crw-rw-rw- 1 root dip 188, 1 Jul 13 20:11 /dev/ttyUSB1
当然,保安问题便出现了。
3.Clie…预备
预备好电脑的设定,当然亦少不了你的Clie,你也要知道你的Clie已被Linux侦查到呢!而方法便是以root的身份去(tail)跟踪一下你的(log)登陆记录,输入'tail -f /var/log/messages',同时准备好用家的Clie于USB底座及按下同步(HotSync)键,便可看到:
Jul 13 22:15:22 FordPrefect kernel: hub.c: USB new device connect on bus1/1, assigned device number 23
Jul 13 22:15:22 FordPrefect kernel: Manufacturer: Sony Corp.
Jul 13 22:15:22 FordPrefect kernel: Product: Palm Handheld
Jul 13 22:15:22 FordPrefect kernel: usbserial.c: Sony Clie 4.0 converter detected
Jul 13 22:15:22 FordPrefect kernel: visor.c: Sony Clie 4.0: Number of ports: 2
Jul 13 22:15:22 FordPrefect kernel: visor.c: Sony Clie 4.0: port 1, is for Generic use and is bound to ttyUSB0
Jul 13 22:15:22 FordPrefect kernel: visor.c: Sony Clie 4.0: port 2, is for HotSync use and is bound to ttyUSB1
Jul 13 22:15:22 FordPrefect kernel: usbserial.c: Sony Clie 4.0 converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
Jul 13 22:15:22 FordPrefect kernel: usbserial.c: Sony Clie 4.0 converter now attached to ttyUSB1 (or usb/tts/1 for devfs)
4.Coldsync
终于可以一尝Coldsync这个程式了,当然用家要先下载及安装这个程式吧!最新的完整版仍是2.2.5呀,可到www.coldsync.org下载。
于母资料夹(home directory)新增以下的档案及改名为'.coldsyncrc'
listen serial {protocol: net;device: /dev/usb/ttyUSB0;旧版本可要输入/dev/ttyUSB0呢!}
/dev/usb/ttyUSB0是指用家将自己的Clie连线的USB埠,之后再输入'coldsync -mI',可看到:
pda {snum: "Clie的序号";username: "用户名称";userid:“账号名称";}
成功后再在之前的'.coldsyncrc'档案新增以下字串,如下:
listen serial {protocol: net;device: /dev/ttyUSB0;}pda "Sony Clie" {directory: /home/milmber/.palm;snum: "Clie的序号";username: "用户名称";userid:“账号名称";}
建议用家将同步的资料夹建于母资料夹(home directory)以及新增资料夹`.palm',还有的是,用家最好在`.palm'资料夹内建立'install'及'backup'的资料夹,这样可方便传输的档案管理。
现在用家的Clie理应可以作同步了。步骤是先按下Clie底座的HotSync键,之后再于电脑输入'coldsync',用家便可以看到Clie 的所有档案资料都会备份在'.palm/backup';如要安装程式,用家只要将档案放到'.palm/install'丙同步便行了。
5.常见问题
当执行Coldsync时,为什么会出现程式错误(program segfaults)?
原因有很多,可能用家的`.palm'不是建于母资料夹home directory;亦可能权限出现问题,用家未给予所有预设用家账户运用Coldsync的权力,只有root身份才有权力;用家亦可将`.coldsyncrc'档案的snum:及userid:两行未串的设定删除及再输入。
为什么执行程式时出现"warning: no device on /dev/ttyUSB0; sleeping"?
这代表了Linux未有侦查到用家的Clie的存在。如果用家是用较新的Linux版本,用家需要输入/dev/usb/ttyUSB0而不是 /dev/ttyUSB0;又或者是用家根本没有给权限予这个用户账号;亦有可能是你先执行了coldsync而未按处于USB底座的HotSync键。若仍不成功,用家可于`.coldsyncrc'的档案里,修改protocol的net转为simple便可以了。
启动(mounting)记忆棒(Memory Stick)
取了同步外,Clie还有一个很重要的程式,便是MS Import吧!而用家怎样才可以在Linux下启动到这个功能呢,其实亦很简单,不过这个方法只适用于以PalmOS 4.x版本作应用平台的Clie吧。
首先在'/lib/modules/2.x.x/kernel/drivers/usb/'检查一下用家有没有安装了'usb-storage.o' 模组,有的便要载入这个模组了。还有的是要确定核心有否支援SCSI,如模组- 'sg.o'及scsi盘支援- 'sd_mod.o'
用家在载入这些模组及更新核心后需要重新启动电脑。如果用家采用新版的核心,单单'modprobe usb-storage', 'modprobe sg'及'modprobe sd_mod'以足够了。之后用家需要做的便是将Clie放到USB底座上及于Clie点击启动MS Import。
点击连接(CONNECT)
连接成功后,用家可以root身份去跟踪登陆记录,输入'tail -f /var/log/messages'后会看到:
Jul 13 22:55:37 localhost last message repeated 3 timesJul 13 22:55:37 localhost kernel: hub.c: port 1, portstatus 103, change 0, 12 Mb/sJul 13 22:55:37 localhost kernel: hub.c: USB new device connect on bus1/1, assigned device number 13Jul 13 22:55:37 localhost kernel: usb.c: kmalloc IF c6511cc0, numif 1Jul 13 22:55:37 localhost kernel: usb.c: new device strings: Mfr=1, Product=2, SerialNumber=0Jul 13 22:55:37 localhost kernel: usb.c: USB device number 13 default language ID 0x409Jul 13 22:55:37 localhost kernel: Manufacturer: SonyJul 13 22:55:37 localhost kernel: Product: Sony PEG Mass StorageJul 13 22:55:37 localhost kernel: usb-storage: act_altsettting is 0Jul 13 22:55:37 localhost kernel: usb-storage: id_index calculated to be: 55Jul 13 22:55:37 localhost kernel: usb-storage: Array length appears to be: 64Jul 13 22:55:37 localhost kernel: usb-storage: USB Mass Storage device detectedJul 13 22:55:37 localhost kernel: usb-storage: Endpoints: In: 0xc33afda8 Out: 0xc33afd94 Int: 0xc33afd80 (Period 1)Jul 13 22:55:37 localhost kernel: usbdevfs: USBDEVFS_CONTROL failed dev 13 rqt 128 rq 6 len 4 ret -6Jul 13 22:55:37 localhost kernel: usb-storage: Found existing GUID 054c00990000000000000000Jul 13 22:55:37 localhost kernel: usb-storage: Allocating IRQ for CBI transportJul 13 22:55:37 localhost kernel: usb-storage: usb_submit_urb() returns 0Jul 13 22:55:37 localhost kernel: WARNING: USB Mass Storage data integrity not assuredJul 13 22:55:37 localhost kernel: USB Mass Storage device found at 13Jul 13 22:55:37 localhost kernel: usb.c: usb-storage driver claimed interface c6511cc0Jul 13 22:55:37 localhost kernel: usb.c: kusbd: /sbin/hotplug add 13Jul 13 22:55:37 localhost kernel: usb.c: kusbd policy returned 0xfffffffeJul 13 22:55:37 localhost kernel: hub.c: port 2, portstatus 103, change 0, 12 Mb/sJul 13 22:55:55 localhost modprobe: modprobe: Can't locate module char-major-6
之后再以root身份输入'mount -t vfat /dev/sda1/ /mnt/'你将会看到记忆棒内的资料。若未能成功,可试输入/dev/sda2/ , /dev/sda3/等。
如果因为其他原因,用家仍未能于Linux下启动记忆棒,大家可尝试更新以下的patch档,不过后果自负。
更新用家的核心(核心版本必须为2.4.3或以上)--- linux/drivers/usb/storage/transport.c.orig Tue Dec 4 16:55:13 2001+++ linux/drivers/usb/storage/transport.c Tue Dec 4 16:58:10 2001@@ -817,10 +817,7 @@}/* was this a command-completion interrupt? */- if (us->irqbuf[0] && (us->subclass != US_SC_UFI)) {- US_DEBUGP("-- not a command-completion IRQ\n");- return;- }+ us->irqbuf[0] = 0;
/* was this a wanted interrupt? */if (!atomic_read(us->ip_wanted)) {
更新核心后需要重新启动电脑,之后再mount用家的记忆棒,这次应该成功吧