在ubuntu下使用UVC的摄像头

August 15th, 2008

买了一个摄像头,打算在ubuntu里面使用。

插上usb口,dmsg可以看到下面的信息:

[ 4521.267892] uvcvideo: Found UVC 1.00 device DEF-299A Camera (1871:0603)
[ 4522.264089] uvcvideo: Failed to query (1) UVC control 2 (unit 0) : -110 (exp. 26).
[ 4522.264099] uvcvideo: Failed to initialize the device (-5).
[ 4522.264153] usbcore: registered new interface driver uvcvideo
[ 4522.264157] USB Video Class driver (v0.1.0)

可以看到,这个是一个UVC的摄像头,系统可以认出来,那么应该也有它的驱动了。

lsmod |grep uvc
uvcvideo               58116  0
compat_ioctl32          2304  1 uvcvideo
videodev               29440  1 uvcvideo
v4l2_common            18304  2 uvcvideo,videodev
v4l1_compat            15492  2 uvcvideo,videodev
usbcore               146028  8 uvcvideo,snd_usb_audio,snd_usb_lib,hci_usb,usbhid,ehci_hcd,uhci_hcd

果然可以看到,uvcvideo模块已经load到内存里面了。不过摄像头还不可以用,

ls /dev/video0

结果是
file not found

如果是正常的话,会在dev生成一个video0的设备。应该是dmsg里面那几句"Failed"的原因。

网上说这个事情的并不多,而且都比较旧,但是终归还是被我找到一篇有用的。

里面说:

The webcam audio interface must be initialised before the video interface.Linux will by default initialise the video interface first, so you need to
remove the uvcvideo.ko module from the /lib/modules subdirectory where it gets loaded automatically, and load it manually after plugging the webcam.

大概意思是uvc的模块uvcvideo.ko在load之前需要先load其他的模块。那么我们需要不让uvc模块自动load:

mkdir /home/joe/module/
mv /lib/modules/$(uname -r)/ubuntu/media/usbvideo/uvcvideo.ko /home/joe/module/

vi /lib/modules/$(uname -r)/modules.dep

将里面有"uvcvideo"的一行删除,保存。

插入摄像头以后,用下面这个脚本来load模块。

#!/bin/sh

sudo modprobe videodev
sudo modprobe compat_ioctl32

sudo insmod /home/joe/module/uvcvideo.ko

正常情况下的dmsg:

[ 6503.835612] uvcvideo: Found UVC 1.00 device DEF-299A Camera (1871:0603)
[ 6503.839053] usbcore: registered new interface driver uvcvideo
[ 6503.839064] USB Video Class driver (v0.1.0)

如果使用

ls /dev/video0

可以找到该设备
使用cheese可以看到图像就大功告成了。另外camorama似乎还是不能用,可能和它的设置有关,不过我找不到地方设置,那就算了,用cheese也不错。

豪华旅游书籍

August 11th, 2008

下周要去呼伦贝尔,这个星期六就顺便去书店看看有没有什么关于内蒙古的好书可以看看。我自以为还算是一个Backpacker,就算是跟团,也别跟得糊里糊涂的嘛。

关于内蒙古的旅游书并不算多,有一本新的《走遍中国 内蒙古》看起来还是不错的,决定要买这一本。不过当然不是在书店买啦,网络上面可要比书店便宜30%以上呢。

这次去书店最大的发现是看到了许多的豪华旅游书籍,书架上60%以上是这种书籍。这种书的特征很明显:

1、全铜版纸,即使不全是铜版纸也是全彩印的;
2、60%以上都是图片;
3、字体是我最讨厌的扁平字体,在我最喜欢看村上春树的书的那段时间,版权被上海译文出版社买走以后,我也再没有买他的书,因为上海译文用的就是这种烂字体;
4、字体大,行距比字体还要大;
5、内容空洞;
6、非常重;
7、价格超贵;

随便翻开一本这些书,都觉得不堪入目。这些书可以称作是画册,但是绝对不应该成为旅游书籍。看看lonelyplanet吧!字体小到需要送你一个放大镜书签来防止你看不清楚字,有需要的地方用了几张彩色的插图,其他的页面都是黑白,纸质薄而结实。

相对于lp的内容来说,lp的价格绝对是非常合理的;相对于lp的价值来说,lp的重量是非常值得的!

珍爱钱包,远离豪华旅游书籍。

搬回了dreamhost主机

July 28th, 2008

上周五开始,将空间搬回了dreamhost。和fanlix一起,买了5年的dreamhost的host plan。dreamhost还是有很多好处的,有ssh和速度快就已经是最大的好处了。

这个blog一开始也是用优惠码买的dreamhost空间,不过一年以后就没有续款。想不到现在隔了两年以后又回来了。不过还是有一番周折,我的域名一开始加不了,提示系统中已经存在这个域名了。没有办法,只能找support,隔天他回信说搞好了,我再加,又提示说域名已经存在于他们的dns系统中。晕s,只能再发support给dreamhost。第2个support比较干脆,他直接帮我将域名到我的帐号中。估计是我以前用过这个域名,后来又没有用了,但是他们的系统却是一直保留着,以防止我再用优惠码的host plan使用该域名。

手术后的第十天

July 28th, 2008

到了今天,眼睛看近的东西还是会有点点朦胧的感觉,特别是看电视和电脑的时候,时间不能太长。不过看远距离的东西却是非常的清晰。
现在我每天上班需要每1小时休息10分钟左右,workrave真的是帮大忙了。这10分钟我觉得还是挺难熬的:趴在桌面睡觉影响不太好;到外面去,现在这天气又太热了。

昨天开始玩马里奥赛车,的确是神作。不明白fay为什么会觉得不好玩。不过能玩到这个游戏,还是费了一番功夫。wii升级到了3.3j,还是提示玩不了,要进行碟内升级。在网上查了,大家都是从3.3j让日版碟进行升级的,不过只要是日版碟+日版机应该就没有问题云云。于是我下定决心进行碟升级,结果完全没有问题,连频道也没有多。

完成了准分子激光手术

July 18th, 2008

我总是很容易冲动的,前天才去医院检查,看是否适合做准分子激光手术,纠正近视眼,想不到第二天就去了做手术。

可能有的人会觉得这个手术比较大风险,有反弹的可能,但是以我的亲身经历来看,这个手术对医生来说,应该只是小菜一碟。决定做这个手术之前我看了很多关于手术的介绍,也问了几个身边的朋友,都没有人说效果很不好的,这加强了我自己对它的信心。

准分子激光手术其实很简单,就是用仪器将你的角膜割开,然后在瓣下角膜基质层上用准分子激光根据近视、散光度数进行精确切削。听起来很可怕,但是其实做起来很简单很快,真正上手术台的时间只有几分钟。一只眼只需要30秒到1分钟就可搞掂(话虽然这么说,不过其实我做的时候还是很紧张)。

我选的医院是广州市第一人民医院,39健康网上面有一篇文章《年终PK 评点广州10大医院准分子手术》给了我很大帮助,根据文章里面的介绍,市一医院的价格比较适中,而且也是投入比较大,比较重视准分子手术的一家医院。首先,他专门成立了一个“激光近视眼”的科室,然后他的手术仪器据说是最先进的,最后是他的资料是最详细的:有自己的网站,里面的资料很非常有用;在google做了关键字广告,你搜索“激光”或者”近视眼“的话就可以看到。(关键的是,他没有在baidu做,我稀饭)。那么就决定去市一做了。

星期三早上去了检查,380元。检查的项目比较多,时间是1个半小时左右,不过其实有大半的时间是耗在等眼睛散瞳上。散瞳以后,原来要5个小时眼睛才能恢复,我晕,下午还去了上班。不过就是看不清楚近的东西而已。。天呀,我要离显示器2米来工作?所以最好还是留一天来做检查比较好。星期四早上回去复检,然后下午3点左右进行手术。我选的是ORK手术,总价是7500元。

手术准备的屋子不大,只能容纳6、7个人左右,手术的衣服也只有那么几件,大家轮着穿。第一个步骤是自己去洗手、洗脸,然后护士帮我穿上手术服,最后用消毒液帮我冲洗干净眼睛和睫毛,我就可以在旁边等了。看着一个个人从手术间完成手术出来,都安然无恙,我感觉还是比较放心。不过快到我的时候,心里面又开始有点紧张了。轮到我了,先进去手术室,护士帮我的眼睛滴上麻药。几分钟以后,前一位完成手术以后,我就要立即上台了。

躺下以后,眼前是3盏红灯,根据提示,我死盯着中间那盏闪着的红灯看。一个发着机器“孜孜”的声音的金属物体落下,然后我就看不到东西了。过了两秒,金属物体拿开了,我又看到红灯。这时候,我的心里面只有一个念头,”一定要看着红灯“!坚持了几十秒左右,一只眼睛就做好了,然后就到另一只眼睛。整个过程,没有疼痛的感觉。

终于做好了!不过之后我又被戴上了一个透明的眼罩,就好像从玻璃杯看出来一样,很不舒服。不过也只需要戴一晚而已,那就忍一晚好了。下午回家以后不能看东西,那么就睡在床上听歌,几个小时里流了n多眼泪,不是感动,而是麻药的关系。。

手术后的第二天早上去了复检,说每天要滴3瓶眼药水。现在是第二天的下午,已经可以上班了。

ext3文件系统文本文件的恢复

June 26th, 2008

今天误删了一个脚本文件,十分懊恼。自己做过安全培训的导师,居然也犯这些低级错误,实在是不应该。

虽然脚本不是很长,但是也不想重新写一次,于是到处找方法看能不能恢复。

网上是有恢复的方法,不过都是针对ext2的,如果是ext2的话,直接用debugfs的lsdel指令找出删除文件的inode,然后根据其来进行恢复就可以了。

可是,现在还有人用ext2么?ext3和ext2大部分功能都一样,但是删除文件上面却不一样。在“如何恢复 Linux 上删除的文件,第 4 部分”这篇IBM的文章中写到:

在删除文件时,对于 ext2 文件系统来说,操作系统只是简单地修改对应索引节点中的删除时间,并修改索引节点位图和数据块位图中的标志,表明它们已经处于空闲状态,可以被重新使用;而对于 ext3 文件系统来说,还清除了表明数据块存放位置的字段(i_block),并将索引节点中的文件大小信息设置为 0。然而,这点区别对于恢复被删除文件的用途来说却是至关重要的,因为缺少了文件大小和数据块位置的信息,尽管文件数据依然完好地保存在磁盘上,但却没有任何一条清晰的线索能够说明这个文件的数据块被存储到哪些磁盘块中,以及这些数据块的相互顺序如何,文件中间是否存在文件洞等信息,因此要想完整地恢复文件就变得非常困难了。这也正是使用 debugfs 的 dump 命令在 ext3 文件系统中并不能恢复已删除文件的原因。

上面这篇文章里面一共举出了三个方法对ext3的文件进行恢复,但是我觉得比较靠谱的只有第一个。

第一个方法是使用grep或者strings命令,对分区的所有文本内容进行检索,以找回自己误删文件的内容。这个方法是比较可行的,我也实践成功了。不过缺点是只可以恢复文本文件,因为2进制文件是匹配不到的。

第二个方法是提前备份元数据,这个方法我觉得不靠谱,也是和ext3的原则相违背的:本来ext3就是要改为删除文件的时候同时删除i_block,你还自己手工加一个进去。
其实我在搜索其他方法的时候也见过几个这样做的文章,sourceforge上面也有人写了一个这样的工具,好像叫作"giis"。我下载以后,看它的readme,上面第一句就说:

It's a file recovery tool...but you can't recover files deleted before installtion of giis

差点没把我气死。

第三个方法是修改内核,修改ext3的实现,这个方法评价同上。我的服务器用的是debian,有自己的包更新系统,所以不太希望自己对内核进行改动。

介绍完毕,现在开始实作:
那么我就用第一个方法,匹配分区中所有的文本来找回我的脚本内容。

急救措施第一步,当然是先umount掉你的分区,或者将其设置为readonly的,以免误删文件的block被覆盖,那就完蛋了。

mount -o remount,ro /dev/sda9

可以用fueser命令看当前目录有什么进程在用,然后kill掉它。

fuser -v -m /home

这个方法是使用grep或者strings命令对分区进行操作。

使用grep的话,可以用下面的命令:

grep -A 1 -B 1 -a -n "Your script content" /dev/sdb9 > sdb9.testfile

-A 和 -B分别是同时显示匹配行的下一行和上一行的内容,"Your script content"里面包含脚本的一些关键字,最好是同一分区下面其它文本文件没有的关键字啦。

不过,一般的脚本都会有几十行以上,不然直接自己写出来就好了,所以要显示脚本的全部内容的话,"-A 1"和"-B 1"是不够的。我试过,使用"-A 30"和"-B 30",结果是内存很快就用光,不能再分配。

那么还是使用"strings"命令好一点。"strings"命令的方式是将分区中所有文本文件的内容都print到一个文件中,如:

strings /dev/sda9 |gzip -c > /usr/sda9.gz

这样就将/dev/sda9中所有文本内容都print到/usr/sda9.gz中并且压缩了。我进行压缩的原因是sda9是我最大的分区,我怕直接print成一个文件的话,/usr分区会撑爆。如果要直接print成一个文件,那么:

strings /dev/sda9  > /usr/sda9.file

我的/dev/sda9分区总共60G左右,已用空间是8G,strings+gzip的时间是30分钟左右,压缩以后的文件是1.6G。而IBM那篇文章中的例子,扫描 20GB 的分区大概需要13分钟。

然后直接从导出的文件里面找你要的内容就可以了,我的方法是:

gunzip sda9.tgz -c - |grep -A 20 -B 20 -a "Your script content"

Yeah!我找回了自己的脚本,你呢?

多谢dan提供的参考文章。

参考:
如何恢复 Linux 上删除的文件,第 4 部分

从泰国回来了

June 23rd, 2008

昨天终于从泰国回来了。
休息了一个星期,要好好工作呀!

泰国是一个非常适合去旅行的国家,当然,你知道我不是说跟团。

Bangkok是一个大杂烩,什么都有,混乱、堵塞的交通、特色的guest house、高高在上的BTS、Mr. P、shopping、chinese、naraya、金碧辉煌的大皇宫、历史悠久的火车站、便宜的火车票、渡轮、鸡肉炒饭......

Chiang Mai很安静,古城里有非常多的庙宇,当然不得不提的是路上也有非常多的狗屎。Chiang Mai是邓丽君最喜欢和生命旅程的最后一站,的确足够和谐与安详。素贴山很高,但是我的moto车可以上,不过真的太对不起这台100cc的Honda,载着我们上到海拔1000多米的山顶,上气不接下气,还差点抛锚。下山的时候,我才发觉到原来上山的路并没有上山时看到的如此平坦。

Ayutthaya三面环水,几乎整个城市都在古迹的废墟之中。

Bang Pa-In,夏宫是我们来这里的唯一目的。