显示标签为“原创”的博文。显示所有博文
显示标签为“原创”的博文。显示所有博文

2007-12-02

windows和linux混合系统的多重启动


windows和linux混合系统的多重启动从来都是一个启动加载器加载另一个系统的引导记录或启动加载器.
因此Vista,Linux的双重启动也是如此:

方法1:用Vista的bootMbr加载grub
方法2:把Grub装到mbr,用grub "chainloader (hd0,1)+1"

方法2和XP没什么好说的,现在说方法1.

Vista的bootMbr可以看成一个小的操作系统,加载几种不同的程序

先来看:bcdedit /?create 中的一段话:

/application <apptype> 指定新项必须是应用程序项。
<apptype> 指定应用程序类型。
<apptype> 可以是下列类型之一:
BOOTSECTOR
OSLOADER
RESUME
STARTUP

如果使用其他应用程序类型而不是这些类型, 则还必须指定已知的标识符。

再来看,我系统的实际的BCD记录:

Windows 启动管理器
--------------------
标识符 {bootmgr}
device partition=D:
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
displayorder {ntldr}
{current}
{cdb7d744-a02e-11dc-a438-00115b1add5f}
toolsdisplayorder {memdiag}
timeout 30
Windows 启动加载器
-------------------
标识符 {current}
device partition=C:
path Windowssystem32winload.exe
description Microsoft Windows Vista
locale zh-CN
inherit {bootloadersettings}
osdevice partition=C:
systemroot Windows
resumeobject {91d7a191-a009-11dc-8f33-c08105f3e2d8}
nx OptIn
Windows 启动加载器
-------------------
标识符 {cdb7d741-a02e-11dc-a438-00115b1add5f}
device partition=D:
path ghldr
description GHLDR-O
从休眠状态恢复
---------------------
标识符 {91d7a191-a009-11dc-8f33-c08105f3e2d8}
device partition=C:
path Windowssystem32winresume.exe
description Windows Resume Application
locale zh-CN
inherit {resumeloadersettings}
filepath hiberfil.sys
pae No
debugoptionenabled No
Windows 内存测试程序
---------------------
标识符 {memdiag}
device partition=D:
path bootmemtest.exe
description Windows 内存诊断
locale zh-CN
inherit {globalsettings}
badmemoryaccess Yes
Windows 旧 OS 加载器
------------------------
标识符 {ntldr}
device partition=D:
path ntldr
description 早期版本的 Windows
实模式启动扇区
---------------------
标识符 {cdb7d744-a02e-11dc-a438-00115b1add5f}
device partition=D:
path NSTNeoGrub.mbr
description NeoGrub Bootloader
EMS 设置
------------
标识符 {emssettings}
bootems Yes
调试器设置
-----------------
标识符 {dbgsettings}
debugtype Serial
debugport 1
baudrate 115200
RAM 故障
-----------
标识符 {badmemory}
全局设置
---------------
标识符 {globalsettings}
inherit {dbgsettings}
{emssettings}
{badmemory}
启动加载器设置
--------------------
标识符 {bootloadersettings}
inherit {globalsettings}
恢复加载器设置
----------------------
标识符 {resumeloadersettings}
inherit {globalsettings}

可见vista的boorMbr(Windows 启动管理器)
可以加载:
OSLOADER(Windows 启动加载器)
BOOTSECTOR(实模式启动扇区)

也就是说,我们可以把Grub修改成上面两种程序中的一种,来让"Windows 启动管理器"来加载.

第一种的配置例如上面的:
Windows 启动加载器
-------------------
标识符 {cdb7d741-a02e-11dc-a438-00115b1add5f}
device partition=D:
path ghldr
description GHLDR-O
但这样的文件,ghldr,实现起来是比较麻烦的,因为缺少资料.

第二种:
实模式启动扇区
---------------------
标识符 {cdb7d744-a02e-11dc-a438-00115b1add5f}
device partition=D:
path NSTNeoGrub.mbr
description NeoGrub Bootloader
则已经有了产品:NeoGrub.mbr

这是我D:NST的文件:
d:NST>dir
驱动器 D 中的卷是 XPHOME 卷的序列号是 A05A-B1BB
d:NST 的目录
2007/12/02 02:16 <dir> .
2007/12/02 02:16 <dir> ..
2007/12/02 02:16 397 menu.lst
2007/06/15 05:19 8,192 NeoGrub.mbr
2 个文件 8,589 字节
2 个目录 393,293,824 可用字节
d:NST>type menu.lst
# NeoSmart NeoGrub Bootloader Configuration File#
# This is the NeoGrub configuration file, and should be located at D:NSTmenu.lst
# Please see the EasyBCD Documentation for information on how to create/modify entries:
# <a href="http://neosmart.net/wiki/display/EBCDhttp://neosmart.net/wiki/display/EBCD">http://neosmart.net/wiki/display/EBCD</a>
find --set-root --ignore-floppies /boot/grub/menu.lst
configfile /boot/grub/menu.lst
# All your boot are belong to NeoSmart!
d:NST>

这样,Grub就会按分区顺序寻找/boot/grub/menu.lst

也许你会问,到哪里去找这个NeoGrub呢?
上面的文件已经透露了:
请google "EasyBCD"

2007-06-18

关于无线全球电力广播的不知道可不可信的报道

关于无线全球电力广播的不知道可不可信的报道

他(特斯拉)的最著名的发明是“特斯拉线圈”,这是一种分布参数高频共振变压器,可以获得上百万伏的高频电压。 特斯拉线圈的线路和原理都非常简单,但要将它调整到与环境完美的共振很不容易,特斯拉就是特别擅长这项技艺的人。

  特斯拉后来发明了所谓的“放大发射机”,现在称之为大功率高频传输线共振变压器,用于无线输电试验。特斯拉的无线输电技术。值得一题的是:特斯拉把地球作为内导体,地球电离层作为外导体,通过他的放 大发射机,使用这种放大发射机特有的径向电磁波振荡模式,在地球与电离层之间建立起大约 8 赫兹的低频共振,利用环绕地球的表面电磁波来传输能量。

(这个怎么弄呀!整个地球岂不是要变成一个球形的电容器,一次充放电要多大的能量呀!)

  这一系统 与现代无线电广播的能量发射机制不同,而与交流电力网中的交流发电机与输电线的关系类似,当没有电力接收端的时候,发射机只与天地谐振腔交换无功能量,整 个系统只有很少的有功损耗,而如果是一般的无线电广播,发射的能量则全部在空间中损耗掉了。

  特斯拉有生之年没有财力实现这一主张。后人从理论上完全证实了 这种方案的可行性,证明这种方案不仅可行,而且效率极高,对生态安全,并且不会干扰无线电通信。只不过涉及到世界范围内的能量广播和免费获取,在现有的政 治和经济体制下,无人实际问津这种主张。

2007-06-02

xorg配置的一些看法

xorg配置的一些看法
以下是本人的一些看法,如有错误请指正:
--------------------------------------------------------------------------------
关于液晶显示器采用高的刷新频率而不是最佳刷新频率的问题:
如果是液晶显示器的话,很多是有一个显示效果最好的刷新频率,设高了,如果没超出显示器的范围,还是能工作的,但是显示器的显示效果反而不好。
这时候应该在你xorg.conf中有效的那一段Section "Monitor" 中添加或修改VertRefresh设置成VertRefresh (显示器底限) - (最佳频率+0.3到0.5)
因为X进行显示模式匹配的时候,同一分辨率的索引项,是安刷新频率从高到低排列的,也就是说合格的显示模式中,同一分辨率的,高刷新频率的模式会优先采用。
------------------------------------------------------------------------------------
关于X采用的刷新频率高于显示器的实际工作能力的问题:
X是跟据程序中Probe phase (硬件侦测)生成的数据和VertRefresh信息,HorizSync信息设定,进行显示模式索引的建立的。当VertRefres高限过高,或根本没提供VertRefresh信息时,能否正确进行显示模式索引的建立就依赖于Probe phase,Probe phase绝大部分情况下还是能很好工作的,但是程序毕竟不是万能的。就有可能采用的刷新频率高于显示器的实际工作能力。
另外HorizSync也是一个很有用的参数,因为显示器的刷新频率和分辨率是关联的,高分辨率时能工作的刷新频率就低。X就是根据HorizSync计算不同分辨率下的刷新频率的高限的。HorizSync不正确,即使VertRefres正确,也可能导致X在使用较高分辨率时刷新频率过高。
解决办法:(不太适用于不会在文本方式下工作的人)
1.先去掉所有的HorizSync VertSync 配置(Comment all HorizSync and VertSync values to use DDC)
2.1的方法不行的话,就需要收工指定HorizSync VertSync,在没有可靠资料的情况下:
如果是液晶显示器的话:VertRefresh高限设成 (最佳频率+0.3到0.5),一般最佳的是在60或65。 如果是CRT 17寸的话,VertRefresh 高限应该可以设到70。
如果同时装有windows的话,VertRefresh 高限设成你windows正在使用的刷新频率+0.3到0.5,同时Modes设成对应的Windows正在使用的分辨率。
3.2的办法不行的话把显卡驱动模块改成 "vga",去掉所有的HorizSync VertSync 配置,先提供一个图形界面供你上网,然后就google你的显示器型号,应该能找到一些资料吧。
-------------------------------------------------------------------------------------
还有的一些疑问,希望知道的告诉我:
现在还不清楚是xorg.conf中的配置和Probe phase是怎样配合的,有时候发现光靠Probe phase(就是xorg.conf不作配置)X能工作,这时xorg.conf添加了错误配置后反而不能工作,并不是设想的xorg.conf和Probe phase只要有一个能正确进行就能工作。这大概就是为什么有的xorg.conf的配置软件会在xorg.conf写入一行:
### Comment all HorizSync and VertSync values to use DDC:

2007-05-30

数字电视名词解释

=================
数字电视名词解释
google.com检索结果
IPTV 是Internet Protocol Television的缩写,是一种系统的总称,在这一系统中,电视和视频信号使用因特网协议上的宽带连接分配给订户。这经常是与订户的因特网连接并行的,由宽带运营者使用相同的基础设施提供,但在专用带宽分配之上。
IPPV 按次点播付费 Impulse Pay-Per-View。

=================
数字电视技术标准
IT.SOHU.COM
信道传输技术标准 —卫星传输
—有线传输(浙江大学)
—地面传输(清华大学、上海交通大学)
·信源编码技术标准(AVS工作组)
—数据与命令格式(系统)
—视频编码
—音频编码
·用户与安全管理标准(信息产业部第三所)
—付费管理
—加密与解密

==================
数字电视广播和数字电视终端
IT.SOHU.COM  2004-10-20 18:17
  随着数字电视(DTV)的开播,将给人们带来前所未有的高品质电视画面和逼真的环绕立声体效果.人类的生活质量将经历一次类似从马车向汽车转变的巨大变革.
  什么是数字电视?按照中国电子行业标准,数字电视是从电视信号的采集、编辑、传播、接收整个广播链路数字化的数字电视广播系统.与传统的模拟电视(TV)相比,其优点是可基本实现高保真传输,即图像、伴音质量与演播室效果无差异.而现有的模拟电视广播,模拟信号离发射塔越远,衰减越严重.同时由于可以采用数据压缩技术,传输一套模拟节目的频道可用来同时传输4~6套数字电视节目,大大降低发射、传输费用.
  数字电视节目的制作 数字电视节目根据内容的不同,采用不同制式摄制,其中大部分电影、电视连续剧和商业广告都先摄制在分辨率很高的胶片上,而现场演出或体育比赛实况则用高清 晰度电视(HDTV)摄像机摄制.一般来说,有1080i制式,即每帧画面有1080行隔行扫描线,每行含有1920个像素,则一帧画面超过200万像 素,(像素越多越清晰),另有一种720P制式,即720行逐行扫描线,每行像素1280个,每帧画面近100万像素.另外还有720i制式(720行隔 行扫描),还有480P制式(480行逐行扫描).最终将出现设想中的具有数字电视最高分辨率水平的1080P制式(1080行逐行扫描).无论哪种制式 的数字电视节目摄制后,都必须经过数字化处理后用于播出.
  数字电视节目数据的压缩与传输 没有数字压缩技术,数字电视就不能产生.数字电视和其它数字视频系统采用MPEG-2压缩方案,用巧妙的算法对一幅画面进行分析;并经有效的方式对画面数 据进行代码冗余处理.在数据的传输过程中,将根据节目的要求,采用不同制式用不同的带宽传输数据:例如体育比赛要求信息传输量大,速率更快,须采用 (HDTV)制式占用一个带宽,而相同的带宽可以混输2~6套电影、戏剧等信息量少、速率慢的SDTV制式节目.电视台将根据节目类型、画面分辨要求,采 用不同的制式、不同速率进行数据压缩播出,以此达到数据最佳传输效果.
  数字电视最终收看效果取决于数字电视机 不论电视台采用什么制式进行节目的制作或传输,新型的数字电视机将对数字信号自动处理,并显示接收到的节目.为能自动处理数字信号,数字电视机必带有数字 电视调谐器和解码器,有些电视机在加装一个单独模块或一个机顶盒后也能达到相同作用.美国消费电子协会最近界定了数字电视机标准,分为高清晰度电视 (HDTV),增强清晰度电视(EDTV),标准清晰度电视(SDTV)三类.均采用16∶9或4∶3的屏幕宽高比,杜比数字音响.
  国内市场上的数字化彩电 最近国内市场出现了大量数字化彩电、数码彩电;都是在不改变现行的广播传输体制(模拟体制)前提下,将经过图像检波的视频信号、经过伴音鉴频的音频信号以 及其它部分进行数字处理的广播电视接收机.由于不带数字电视调谐器、解码器或不能加装模块、机顶盒(即不能升级),所以都只能是数字化彩电,不能称为数字 电视机.1998年5月,长虹集团数字电视机样机才刚刚出现,而其它彩电厂商如康佳集团等力争三年后有数字电视机上市.
  要实现数字电视广播,首先要对电视信号的采集及传输体系的制式进行变更;其次对节目摄录设备、电视台广播设备、传输设备,用户中电视接收机全面 更新换代.英、美两国1998年数字电视广播已进入部分家庭,其中美国宣布在2006年全部淘汰现有模拟电视系统,而我国中央电视台1995年才购买数字 播出设备,1999年进行了试播.要在我国全面开通数字电视广播业务需要500多亿资金投入建立数字电视台,需要更多资金进口昂贵的数字电视机(7000 美元~100000美元每台),显然是不现实的,因此我国的数字电视广播的开通还有一段漫长的路要走,而模拟电视系统将在相当长的时间内存在

2007-05-20

生活如同魔方!

今天稍微“用心”玩了一下魔方,就15min,没有完成,但想了很多。

觉得,起始生活,做事很多情况下和玩魔方很像。

比如组成魔方的3x3x3个小方块都是不一样的,他们在完成状态下(每个面的颜色都单一)他们的位置都是固定的。
但是,当我们只是关注一种颜色的时候,(比如阶段性任务:把其中一个面变成单色的)
往往会把其中几个当成一样的,当你完成阶段性任务,把一个面变成单色的时候,其实第一层里面还有很多都不是最终态的应该的位置上。我们只是被一样的颜色给迷惑了。或者说我们在完成阶段性任务的时候把一些不该忽略的细节给忽略了。
紧接着,完成下一个阶段任务,在把一个面变成单色的基础上,第一层的四个侧面,变成完成态的样子。这是发现原来的成就里面包含了太多的浪费。而且老是担心会破坏已有的成就。

因此如果把任务:把其中一个面变成单色的改成,把第一层变成完成态,那我们就可以把没个小方块编号。不在被相同的颜色给迷惑了。我们眼里是1-9号方块,如何归位的问题。而不是再把白色的都看成是一样的了。
颜色其实根本没有意义了。

生活也是这样,要完成一个大目标,需要化解成许多个小目标来,一步一步完成,但如何分解成小目标,如何完成小目标,一定要盯住大目标。

另外:
如果是用计算机来计算这个问题。

把27个方块归位,和把六个面变成同色,两种想法就意味着两种不同的建模方式,程序也将不一样。
也许程序运行的结果是一样的。但一开始,内在的,处理问题的起点的水平就不一样了。

另外:
用人脑玩的时候,魔方变化的过程中,如果不把每个方块编号,那你就算知道每个方块都不一样,你还是
会误把一些方块当成一样的。而且就是知道前一个成就其实包含很多水分,但你还是不愿意破坏他。

另外:
同一个方块上有几种颜色,当我们从颜色的方向想办法的是后,就好像有许多的牵制。但从1-27编号来看,许多牵制就消失了。看问题的角度,和层次的问题呀。
(还有很多,太晚了,休息时间过了,以后再续吧)

2007-05-14

今天早晨醒来对梦的回忆

好像是在后悔,放弃了对zhcon在AUR上的维护。
没想到在我的潜意识里会对这件事情这么在意。
没办法,没有时间维护这个包了。及时放弃,让
别人接手是对的。
如果我有空再把自己的pkgbuid提交给新的维护者就好

开源世界,好像曾被人戏称为“共产主义”在软件开发上的试运行。

可惜现实世界还是市场模式。

开源的I&F的驱动模式还只是这个世界的一个很小的一个钉子

特别是生产力还不发达的发展中国家,驱动力更小。

2007-05-10

文章的来源与版权

这里的文章不都是我写的,应该有很多是搜集来的
很多是从我的kjobs里面拿出来的。有些copy进kjobs里
的时候没把出处写下来,因此就没写出处了。

对于我写的文章,可以链接,复制。
但请保留出处,有修改请说明,避免不必要的误会。

kjobs是KDE下的一个电子笔记本软件。

2007-05-07

Subversion手册

http://svnbook.subversion.org.cn/

2007-04-28

游戏的两种不同的玩法

一个高手托梦给我
游戏有两种玩法

一种是普通的玩法,参与游戏,按照规则,一步步玩下去。


另一种是独特的玩法,把构成游戏的各个要素当成玩具来玩。

游戏由什么构成呢?

可以看到的包括:参与者,裁判,规则,道具,场地等等。

第二种玩法道具可以是道具,也可以不是道具,游戏本身只不过是你的玩具而已。

如果两种玩法一起玩,那心态可就要好了!!!

2007-03-18

想做一个magiclinux的动态的阶段报道

原来想做在这里,但后来决定做到
google 论坛上了,依托google的搜索功能,让更多的人看到。

但不知道能不能坚持。

迷上了刘慈欣的作品

我从来不追星。

看书也不看谁是作者。

技术方案从来不管是谁提出来的。

但这次我却记住了一个不是历史人物的现实中的作家。

他的博客:
http://daliu.blogd.cn/

2007-03-10

从社区获得帮助

可以自由修改,任意传播。
欢迎共同完成本文。


从社区获得帮助
Ver 070309Night

Linux是大集市式的环境下开发出来的,因此信息也是到处都是。
对于新手,如何获取信息来解决自己面临的问题,往往是最大的
障碍。
通过互连网上成百上千的BBS,邮件列表,Web论坛来求获取帮助是必备
的本事。
但要别人帮助你,需要自己有一定的基础,并能够提供有用的可靠的
信息。

一、寻求帮助前的准备工作。

1。先了解一下自己面临的问题的现状,自己最大的障碍点在那里。
有时是自己对问题的背景知识不够,无从下手。有时是只有具体的一个
细节有疑问。

2。整理一下思路,看看自己已经作了什么,已经排除了什么因素。

3。调整自己的逻辑方式,特别注意不要受你原有产品的逻辑设定影响。
比如:Linux和windows在网络配置方面有逻辑上的差别,这种差别是系统
设计带来的,一般情况下,没有谁优谁劣的问题。

4。尝试自己处理问题,比如Google现有的文档,查看man文档。查看帮助文件
到出问题的部件的项目主页看看现有的文档。以来加深对问题的理解。二来
这往往是最快最有效的办法。

二、收集信息。

要寻求帮助,需要的是提供有效的信息。
提供信息有两种方法:
一种是提供反映你系统现状的信息,如配置文件的内容,诊断工具的输出,
屏幕的截图,log文件等等。

二是提供你的超作流程,和现象。

三、常见问题的信息提供办法。

1.显示配置问题:
a) 提供硬件信息。

lspci > pciinfo.txt
lsusb > usbinfo.txt
dmesg > booting.tx

然后提供给社区生成的文件
目的:提供显卡鼠标等的信息。

b) 提供X系统的配置文件和log文件:
对于现在最常用的xorg
是:
/etc/X11/xorg.conf
/var/log/Xorg.0.log

c)问题的描述。

2.硬件无法驱动的问题:
a)硬件的主控制芯片的型号,设备ID,:
lspci > pciinfo.txt
lsusb > usbinfo.txt
dmesg > booting.txt

然后提供给社区生成的文件
目的:提供硬件的信息。

还有就是硬件上面,或包装的标识。

b)内核的信息
uname -a 的输出
lsmod的输出

c)问题的描述

3。网络配置问题
a) 网络接口信息
ifconfig -a 的输出

b)路由表的信息
route的输出

c)DNS配置文件的内容

d)网络的物理结构
最好可以用物理连接的示义图,或拓扑图表示。
也可以用文字描述。

e)问题的描述
最好带有几个关键ping 的输出
如
ping www.google.com
ping 网关IP
ping modem的IP
ping DNS的IP

四、其他
1.为什么使用文本界面的工具
因为文本界面的工具已经发展了很久了,不同版本间的差异很小,
而且输出的内容清楚明了。且输出结果为文本,便于交流。
还有就是这样的东西能直接放映本质的东西。且到处都可以找到。

2.应该把求助发到哪里
针对发行版特有的问题发到发行版的专门的论坛或邮件列表。
针对某个项目的问题发到项目的论坛或邮件列表。
总之要有针对性。
并注意礼貌。并积极参与问题的讨论。不要好像大家亏欠你似的。
不要表现得对别人过分得依赖,如果你让人觉得你什么都不愿想,
很难一起解决问题得话,大家就没有热情了。

2007-02-25

Vista开始菜单搜索还算好用

Vista开始菜单搜索还算好用

1。可以直接运行命令行命令:


2。快速定位程序


3。快速定位资源。



从界面和功能上看,都还算好用。一个不错的改进。希望KDE有更好的类似功能。

搞定了机顶盒和电视的连接,谢谢google

一回到厦门,就碰上了小区有线电视的数字化改造。
前天领了机顶盒,因为一个接头没接上,今天登记,请广电的人来安装数字电视广播。我那古老的彩电,没有接RCA的视频输入端子,采用的是接BNC的视频输入端子。
安装专家(厦门广电的“安装工程师”)没搞清状况,一直在音频的两个端子(BNC,一个Input,一个Lineout)上忙着……
我赶紧告诉他,需要一个RCA-BNC转换接口。这是伟大博学的“谷歌”告诉我的,还把打印出来的图片给他看了。终于换来了一句话:他们没这种接头,去电子城看看吧。
于是我遵照广电的“专家”的指示,拿着下面这张图,自己到“电子城”花¥2.00买了一个转换接头,搞定了这个问题。
谢谢“谷歌”和广电的“专家”!!
希望全中国只有我这样一台这样的电视!!


2006-12-23

我的设备装到哪了?

我的设备装到哪了? [lanzinc@gmail.com]
用udev工具,简单分析udev动态建立设备文件的过程。
试验环境:Arch Linux 0.7.2 (Gimmick) 2.6.18-ARCH udev 103-1

有时候,我们把一个设备通过热拔插接入或脱离计算机的时候,KDE界面上一点反应也没用,这时就会考虑,是设备有问题呢,还是没有合适的驱动,还是只是KDE这样的上层建筑没有合适的配置来反应这个改变呢。
这时候应该如何着手解决这个问题呢?
还有时候,我们插如一条数据线,或者usb网卡,我们却不知到设备会别认成什么。

在现在的Linux系统里,一个设备通过热拔插接入计算机的时候,内核如果能够识别该设备,就加载相应的模块,并发布消息;udev从内核得到一组(或单条)消息(uevent),然后根据uevent按照事先建立好的规则(rules),进行一系列操作,(比如对消息进行编辑,生成新的消息,建立设备文件,建立符号链接,运行指定的脚本或程序)。


Usually udev runs as udevd(8) and receives uevents directly from the kernel if a device is added or removed form the system.
If udev receives a device event, it matches its configured rules against the available device attributes provided in sysfs to identify the device. Rules that match, may provide additional device information or specify a device node name and multiple symlink names and instruct udev to run additional programs as part of the device event handling.


udev软件包,提供了一套工具,来分析和管理udev:

[root@206studio ~]# pacman -Ql udev | grep bin
udev /sbin/
udev /sbin/migrate-udev
udev /sbin/scsi_id
udev /sbin/udevcontrol
udev /sbin/udevd
udev /sbin/udevsettle
udev /sbin/udevtrigger
udev /usr/bin/
udev /usr/bin/udevinfo
udev /usr/bin/udevtest
udev /usr/sbin/
udev /usr/sbin/udevmonitor
[root@206studio ~]#

现在来解决一个实际问题:
我的Nokia有一条数据线,可以和手机通信,现在把他接到linux上不知道能不能用?
我手头有几个软件,能够从手机上拷贝通信录和短信,但都是和串口通信的。
如果熟悉udev和设备,很快可以到/dev/tty中找到,不过这不影响我们用他来作例子。

首先,把数据线接到USB口
lsusb 看看是什么东西:

Bus 003 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port

这个是新增加的(如果不熟悉,可以在插入数据先前先lsusb一下),就是数据线,lsusb能列出来,硬件应该没太多问题,至少是能“说话”的。

运行dmesg看看,内核能否认出来?
最后有几行:

usb 3-1: new full speed USB device using uhci_hcd and address 5
usb 3-1: configuration #1 chosen from 1 choice
pl2303 3-1:1.0: pl2303 converter detected
usb 3-1: pl2303 converter now attached to ttyUSB0

看来内核是认出来了,不过找不到她说的ttyUSB0的设备文件,怎么办呢?

把数据线拔了,
运行udevmonitor
(详细的udevmonitor信息请用man)
插入数据线
可以看到:

[root@206studio lanzinc]# udevmonitor
udevmonitor prints the received event from the kernel [UEVENT]
and the event which udev sends out after rule processing [UDEV]

UEVENT[1163352445.301250] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1
UEVENT[1163352445.301608] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/usbdev3.6_ep00
UEVENT[1163352445.303713] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0
UEVENT[1163352445.304027] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/ttyUSB0
UEVENT[1163352445.304246] add@/class/tty/ttyUSB0
UEVENT[1163352445.304417] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep81
UEVENT[1163352445.304602] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep02
UEVENT[1163352445.304786] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep83
UEVENT[1163352445.304974] add@/class/usb_device/usbdev3.6
UDEV [1163352445.337791] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1
UDEV [1163352445.346145] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/usbdev3.6_ep00
UDEV [1163352445.484712] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0
UDEV [1163352445.488357] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/ttyUSB0
UDEV [1163352445.498504] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep81
UDEV [1163352445.508543] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep02
UDEV [1163352445.517974] add@/devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep83
UDEV [1163352445.564777] add@/class/tty/ttyUSB0
UDEV [1163352445.611365] add@/class/usb_device/usbdev3.6

Ctrl+C退出来。
可以清楚的看到设备插入后,udev接收和发送的消息。

用你熟悉的编辑器,比如vi,把上面的内容变成下面这个样子,并存成一个脚本 a.sh
(我用的是kate的替换功能,把"UEVENT.* add@"正则表达式表示的内容替换成"udevtest ",udevtest的信息同样请教man)

udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/usbdev3.6_ep00
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/ttyUSB0
udevtest /class/tty/ttyUSB0
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep81
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep02
udevtest /devices/pci0000:00/0000:00:10.2/usb3/3-1/3-1:1.0/usbdev3.6_ep83
udevtest /class/usb_device/usbdev3.6

然后运行sh a.sh &> b.txt

这样就得到一个文件b.txt
看看b.txt就知道udev都干了些什么了。

我关心的是udev建立了那些设备文件
运行cat b.txt | grep "creating device node" > c.txt
得到文件c.txt
内容:

[root@206studio ~]# cat c.txt
udev_node_add: creating device node '/dev/usbdev3.6_ep00', major = '442', minor = '4101', mode = '0660', uid = '0', gid = '0'
udev_node_add: creating device node '/dev/tts/USB0', major = '188', minor = '0', mode = '0660', uid = '0', gid = '5'
udev_node_add: creating device node '/dev/usbdev3.6_ep81', major = '442', minor = '4101', mode = '0660', uid = '0', gid = '0'
udev_node_add: creating device node '/dev/usbdev3.6_ep02', major = '442', minor = '4101', mode = '0660', uid = '0', gid = '0'
udev_node_add: creating device node '/dev/usbdev3.6_ep83', major = '442', minor = '4101', mode = '0660', uid = '0', gid = '0'
udev_node_add: creating device node '/dev/bus/usb/003/006', major = '189', minor = '261', mode = '0664', uid = '0', gid = '0'
[root@206studio ~]#


很明显应该使用/dev/tts/USB0

下面使用xgnokii进行试验:
首先修改配置文件:

[global]
port = /dev/tts/USB0
model = series60
initlength = default
connection = dku5

use_locking = yes

serial_baudrate = 19200

smsc_timeout = 10

[gnokiid]
bindir = /usr/sbin/

[connect_script]
TELEPHONE = 12345678
[disconnect_script]

[logging]

debug = on

rlpdebug = off

xdebug = on


运行xgnokii

[Sending Ack of type 1b, seq: 4]
Message received: 0x1b / 0x0032
01 31 00 08 00 01 58 2c 00 26 56 20 30 36 2e 30 | 1 X, &V 06.0
31 20 20 20 20 20 0a 31 38 2d 30 33 2d 30 35 0a | 1 18-03-05
52 48 2d 31 39 0a 28 63 29 20 4e 6f 6b 0a 52 00 | RH-19 (c) Nok R
00 00 |
Received message type 1b
Received revision V 06.01
model length: 5
Received model RH-19
Found model "RH-19"
Found model "RH-19"
Model: 3100
Product: RH-19
IMEI: 35565*******779
Revision: V 06.01
Phone connected. Starting monitoring...


成功!
GetFrom: lanzinc@gmail.com