星期一, 十二月 08, 2008

Waiting For You

so long time
this make me mad

Read More...

星期日, 十一月 02, 2008

S.E.N.S

听听吧,很不错的

Read More...

星期六, 十一月 01, 2008

那时的他们

看看吧,感触颇多

Read More...

星期日, 十月 26, 2008

老外的中文课笔记

老外的中文课

Year Tim,

shall by too dull doll by too jack won,

dolphin long can Jim shall by too low,

shall by too when dull low, doll car low,

dolphin long doll Ham Eason

“more power!”
老外上中文课的笔记。下面是中文课文。
一天
小白兔到大白兔家去玩
大灰狼看见小白兔了
小白兔闻到了,躲开了
大灰狼大喊一声
莫跑!

Read More...

星期二, 九月 30, 2008

普通中国人的一天(2008网络版)

我早上醒来,先用二甘醇超标的田七牙膏刷牙,再用发臭的蓝藻水洗脸,给儿子兑一瓶添加三聚氰胺的三鹿奶粉,自己喝杯黑作坊的豆浆,吃几个硫磺熏白了的馒头, 或者是废纸箱当肉馅的包子,就点儿废旧油漆桶里腌的榨菜,饭盒里放几个安徽人05年包的粽子(上班饿了吃),吃饱喝足,出门,深吸一口富含CO的空气,到 断成两截的九江大桥上溜溜腿儿,找找白蛇仙子和许相公在断桥的感觉。 中午跟同事一起到肯德基吃顿苏丹红炸鸡,喝了杯苯超标的可乐。下午用山寨手机给朋友打电话,听见她哭哭啼啼,大约是炒股亏大了,约她出来到新开的菜馆吃顿 饭开开心,点了几个地沟油炒的菜: 一盘避孕药催大的铁板鳝鱼,一盘臭水沟捞来的麻辣龙虾,一盘农药高残留的清炒菠菜,一盘亚硝酸盐超标的卤菜拼盘,一盘饱含瘦肉精的熘肉片,一盘福尔马林泡 过的火爆毛肚,两小碗硫磺熏过的银耳枸杞羹,老板免费送了一杯重金属超标百多倍的碧螺春茶,再喝了点甲醛勾兑的啤酒 ,算帐的时候318元,吉利,老板又找回了一张假币。 回家的时候被宝马撞倒,太幸运! 得让丫出点血,所以躺着不动,一睁眼,看宝马调回头来碾压……以史无前例的速度爬起来跑掉。 回家。要睡觉的时候,被刚装修完的甲醛呛得眼泪直流,只好把脑袋蒙到黑心棉被子里。想起房子还有好几十万贷款加利息,辗转反侧到天半亮都没眯着。找安眠药 吃了半瓶也没用,含在嘴里,哦,是糯米粉! 想想喝点农药死了算了,咕咕咕大半瓶下去一点动静没有,原来这农药是用酱油勾兑的!

Read More...

星期二, 九月 02, 2008

移动公司老总被按摩小姐气得吐血!

一天,某地移动老总加完夜班后想找个地方按摩放松放松,于是驾车去到一家桑拿按摩中心。
  进到按摩中心,移动老总选了一个最漂亮的按摩小姐,然后就跟着她往里走。
  “老板,请问你是在大厅按摩还是到VIP包间按?是要普通服务还是移动贵宾服务?”按摩小姐声音甜甜的问道。
  “到VIP包间吧;要移动贵宾服务。”
  于是按摩小姐把移动老总带进一间VIP包间里。

  “老板,VIP包间要加收200块小费,按我们的规定,请你先付小费我才能为你提供服务。”
  “别的地方小费都没有这么高噢?”移动老总问道。
  “不好意思,你从别的地方消费转过来到我们这里消费,这200块小费就相当于移动公司的“漫游费”,一点都不高的。”
  移动老总一听,虽然觉得这规矩有点特别,但心想这里的小姐不但非常懂礼貌而且比别的地方的小姐长得漂亮多了,规矩特别点也是当然的,于是痛快的掏出两张“红牛”交给按摩小姐。
  收下钱后,按摩小姐又问:“老板,请问你是要做普通按摩还是全套按摩?”
  “全套的吧。”移动老总答。
  “全套按摩要先交500块基本消费费,麻烦你先把钱交了。”按摩小姐又说。
  “这也太离谱了吧?”移动老总有点不痛快了;不过既然来了最后还是把钱交了。
  收了钱后按摩小姐又问:“老板,请问你要不要先个洗澡?”
  移动老总心想“钱都交了怎不洗呢?”于是说道“要洗。”
  “老板,请问你洗热水还是冷水?”
  “热水。”
  “请你加付100块热水费。”按摩小姐又说道。
  “妈的,还有没有王法了?”可气归气,衣服都脱了能总不能不洗吧?移动老总无奈的交了钱。
  “小姐,卫生间里怎么黑糊糊的什么也看不见?你到是把灯开开呀。”
  “好的,马上就为你开;不过请你先交100块来电显示费。”按摩小姐礼貌的回答。
  “你们宰猪啊?”移动老总这下被气坏了。
  “你是我们尊敬的顾客,怎么能说是猪呢?老板你真幽默!”按摩小姐彬彬有礼道。
  洗了一会儿,移动老总对按摩小姐说“有没有沐浴露?”
  “不好意思,沐浴露要另外收费的;不过我们在搞活动,香皂是免费的。”
  “那就拿块香皂来吧。”
  两分钟后按摩小姐拿来一块用去了好多的香皂。移动老总一看,生气道:“你怎么能把别人用过的香皂拿来给我用?”
  “不好意思,我们这里的香皂是随意拿的,拿到那块你就要用那块。”
  “这样我不要用了。”
  “那请你先付清这个月的香皂使用费共300块。”按摩小姐和气的说道。
  “不是说免费的?怎么又要收费?”移动老总瞪大了眼睛。
  “今晚是免费让你使用,但下次的都是收费的。”
  “可我下次不会再来你们这里了,根本用不着你们的狗屁香皂,凭什么收我的钱?”
  “我们这里规定使用香皂必须至少使用一个月,不按天计算。”
  “我靠!比孙二娘的店还黑!”移动老总无奈的又交了300块钱说“这回总该给我换快没用过的香皂了吧?”
  “抱歉,就用这块吧;你见过移动用户使用彩铃业务的时候可以自己选择使用哪一首彩铃的吗?”
  没办法,虽然感觉别人用过了很恶心,可恶心也要用了——不然300块钱就白花了。移动老总极度不爽地三两下洗完了澡。
  “现在开始服务吧。”移动老总想快点完事离开这里了。
  “好的,请你先交500块服务费。”按摩小姐回答。
  “刚才不上交了500块了吗?”移动老总怒问。
  “那500块是基本消费——相当移动的月租费,你现在再交500块才能得到服务。”按摩小姐又答。
  移动老总心想这地方没法玩了还是快点走吧,于是就说:“算了、算了,我不要服务了;你把刚才的500块退给我,我要走了。”
  “你真的不要服务了吗、真的要走吗?”按摩小姐问。
  “不走还留在这里让你们当猪宰啊?快退钱给我。”移动老总已经气得两眼冒火了。
  “是这样的,因为刚才前台已经开始记钟了,所以那500块不能再退给你;就象移动的卡一开通,月租费就不退了。”按摩小姐耐心的解释。
  “去他吗的......”用了块别人用过的香皂洗了个澡就花了1000多块,这一刀被宰得也太狠、太窝囊了......移动老总彻底抓狂了,忿忿的穿上衣服头也不抬就往外走。
  谁知还没走出门口,按摩小姐又说话了:“老板,请你先交了3000块取消服务押金再走;三个月后可凭收据来这里我们给你退回。”
  “我要走了,永远不来你们这里了;还要什么服务押金?”移动老总脑门直冒烟。
  “不是‘服务押金’是‘取消服务押金’;你虽然说要走,但我们怎么知道你不会不会跑到其它包间去做按摩、又怎知道你改天会不会再来?所以我们要先收你 3000块‘取消服务押金’,要是三个月后发现你确实不在我们这里接受过服务,我们就会把押金退还你——这跟你到移动公司去销号是一样的。”
  “老子就是不交,看你们还敢抢了老子不成?”移动老总是火冒三丈了。
  “我们当然不会抢你,不过你要是不办理取消服务手续的话,以后每个月我们都要收取你500块的按摩基本消费费。”按摩小姐礼貌的回答。
  “你们有本事找到我就去要吧。”堂堂移动老总什么场面没见过,还能被你一个按摩小姐给吓住了?于是移动老总头也不回就走了出去。
  刚刚走出按摩中心大门,刚才的那个按摩小姐又跟上来说道:“老板,前面你在我们这里开VIP包间的时候用身份证做了登记,现在你的资料以保存在我们的 电脑里,如果你现在不办理取消服务手续,那么以后每个月我们都会通过法院给你的公司寄去按摩欠费单;同时,我们的客服人员也将会不定期打电话到你家催交欠 费的!”
  移动老总听完按摩小姐这话,顿时感到嗓眼一腥“哇”的一口鲜血喷口而出,接着两眼一黑,扑通一声倒在了按摩中心的大门外!

Read More...

星期三, 八月 20, 2008

坚持

平静枯燥的生活,坚持,,,,,
今天mrmei comes ,好久不见了,可是这份平静的心又被打乱了,很想见他可又想专心看书,觉得了,见他一面还是坚持闭关了

Read More...

星期日, 七月 06, 2008

bmpanel-9999.ebuild


# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/x11-misc/bmpanel/bmpanel-9999.ebuild,v 1.10 2008/05/21 22:43:41 uberlord Exp $

inherit git
EGIT_REPO_URI="git://github.com/nsf/bmpanel.git"

DESCRIPTION="A themeable reincarnation of fspanel"
HOMEPAGE="http://nsf.110mb.com/bmpanel/"
SRC_URI=""

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 ppc sparc x86 ~x86-fbsd"
IUSE=""
RESTRICT="strip mirror"

RDEPEND="media-libs/imlib2
>=media-libs/freetype-2.1.10-r3"
DEPEND="${RDEPEND}
dev-util/pkgconfig
x11-proto/xproto
media-libs/fontconfig"
src_unpack() {
git_src_unpack
}

src_compile() {
# econf || die "configure failed"
./configure || die "configure failed"
# emake || die "compile failed"
emake || die "compile failed"
}

src_install () {
make DESTDIR="${D}" install || die "make install failed"
dodoc AUTHORS README

}

Read More...

qtm-0.6.3.ebuild


# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/kde-misc/qtm/qtm-0.6.3.ebuild,v 1.10 2008/04/14 22:43:41 uberlord Exp $

DESCRIPTION="A blogging client which is presently capable of composing, formatting and submitting blog entries to a weblog"
HOMEPAGE="http://qtm.blogistan.co.uk"
SRC_URI="http://prdownloads.sourceforge.net/catkin/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 ppc sparc x86 ~x86-fbsd"
IUSE=""
RESTRICT="strip mirror"

RDEPEND=">=x11-libs/qt-4.2
>=dev-util/cmake-2.4.3"
DEPEND="${RDEPEND}
dev-util/pkgconfig
dev-util/scons
x11-proto/xproto"

src_unpack() {
unpack ${A}
}

src_compile() {
cmake -D USE_STI:BOOL=TRUE .
emake || die "compile failed"
}

src_install () {
make DESTDIR="${D}" install || die "Installation failed"
dodoc README
}

Read More...

星期六, 七月 05, 2008

哈佛大学凌晨四点的图书馆

馆训:
1.现在睡觉的话会做梦而现在学习的话会让梦实现
This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
2.我无所事事地度过的今天是昨天死去的人们所奢望的明天
I leave uncultivated today, was precisely yesterday
perishes tomorrow which person of the body implored.
3.感到晚了的时候其实是最快的时候
Thought is already is late, exactly is the earliest time.
4.不要把今天的事拖到明天
Not matter of the today will drag tomorrow.
5.学习的痛苦是一时的而没有学习的痛苦是一辈子的
Time the study pain is temporary, has not learned the pain islife-long.
6.学习不是人生的全部但连学习都征服不了你还能做什么?
The study certainly is not the life complete. But, sincecontinually life part of - studies also is unable to conquer, what butalso can make?
7.学习不是因为缺少时间而是缺少努力
Studies this matter, lacks the time, but is lacks diligently.
8.所有人的成功都不是偶然的
Nobody can casually succeed, it comes from the thoroughself-control and the will.郭澧葱
9.无法避免的痛苦就去享受吧!
Please enjoy the pain which is unable to avoid.
10.早起的鸟儿有虫吃
Only has compared to the others early, diligently diligently, canfeel the successful taste.
11.成功并不属于每个人
Nobody can casually succeed
12.时间在流逝
HOW time flies
13.今天流下的口水将变成明天流下的泪水
Now drips the saliva, will become tomorrow the tear


Read More...

程序员八荣八耻

以动手实践为荣,以只看不练为耻。
以打印日志为荣,以出错不报为耻。
以局部变量为荣,以全局变量为耻。
以单元测试为荣,以手工测试为耻。
以代码重用为荣,以复制粘贴为耻。
以多态应用为荣,以分支判断为耻。
以定义常量为荣,以魔法数字为耻。
以总结思考为荣,以不求甚解为耻。

Read More...

星期六, 六月 07, 2008

一首老歌

Read More...

星期五, 六月 06, 2008

生日快乐!x86标准30岁了【转】

30年前的6月8号,Intel发布了其第一款16位的微处理器--8086,还有一句著名的广告语“开启了一个时代”。有点夸大其词?那是,不过也的确说的比较准。当8086的光环退去之后,其支撑架构--后来我们所熟知的x86也成为了最成功的业界技术标准。

“X86”是Intel和其他几家公司处理器所支持的一组机器指令集,它大致确定了芯片的使用规范。从8086到80186、80286、80386、80486,再到后来的奔腾系列以及现在的多核技术,都是使用一脉相承的x86指令集,既不断扩展又向后兼容。
在8086之后的30年间,x86家族横跨了桌面、服务器、便携式电脑,超级计算机等等。无数对手败倒在了其脚下,甚至是一些看似已成定局的领域。例如近年来被x86所吞掉的苹果电脑,原来一直使用的是PowerPC。
那么Intel的架构是怎么统治了电脑世界这么多年?让我们一起来看看。
最初
在 1971年,Intel为一家日本计算器厂制造了Intel历史上的第一块处理器——4位的4004。很快,在1975年,Intel又推出了8位的处理器8008和8080。8080处理器为Altair8800 PC所采用。顺便说一句,Altair8800 PC是一台邮件订单处理计算机。比尔·盖茨和保罗·艾伦建立微软公司的时候,就曾把Basic卖给Altair8800 PC。
3年以后,16位的8086初次登场。在80年代初,IBM公司选择了8086的衍生产品8088作为IBM PC的处理器。IBM的这一行为给X86带来了巨大发展,并且帮助它成为了行业标准——一直到今天。
Intel 执行副总裁Patrick Gelsinger说:“PC行业发展的革命性转折点是1985年32位处理器80386的推出,它推动了整个行业的发展。当时,X86需要从早期的16 位寻址空间进行升级。”人们问我们:“32位是什么?”我们说:“它是给微型计算机和中型计算机用的。”那时人们总会嘲笑们说这太浪费了,这些是没必要的事情。
当时IBM抛弃了386,因为当时没有32位的软件发挥出它的性能。IBM自己也开发了16位的操作系统叫做OS/2。
当时担任386设计小组成员的Patrick Gelsinger说:“IBM当时拥有自己的整个架构。它们有它们自己的应用程序,操作系统和硬件设计。当IBM开发下一代产品时,他们将是唯一能够给提供全套解决方案的,只是并不能保证下一代过渡的兼容性。”
“当386到来时候,所以的一切变了,”Gelsinger说,:“我们从一个垂直的行业到一个水平的行业,而且我们真的打开了新世界之门。”
386 之后,1989年486诞生了。由于当时数字不能作为商标,Intel从1993年开始改变了产品命名方法。第五代处理器被命名为Pentium而不是 586。数字命名产品转变为Pentium命名(比如Pentium Pro, Pentium II and Pentium D)。从那时开始,Intel在X86体系中,增加了低端的赛扬系列和高端的双核系列产品。
所有的基于X86架构的芯片,开始于8086,一直延续到今天。当然他们的命名发生了变化,运算速度也有了惊人的提升。
成功的秘方
为什么X86能一直成功,击退甚至完全打败其他的处理器架构?从一开始来说,X86的诞生就是在一个很恰当的时间点。1978年的时候,计算从巨大、昂贵的中型计算机转变为小型、便宜的微型计算机已经有几年了。台式电脑成为变革的前沿。
更重要的是,X86证明了戈登·摩尔在1965年提出的一个定律。戈登.摩尔在后来成为Intel的主席和CEO。摩尔说,在成本不变的前提下,微处理每过 2年其运算速度会翻一番。他的预言,后来被成为摩尔定律,被证实是正确的。X86的发展道路越走越宽。X86处理器也从数据处理中心走向办公室和千家万户。
并且8086以及它的后续产品一直与电脑行业两个大名鼎鼎的名字紧紧联系在一起。在1972年,比尔·盖茨和保罗·艾伦就尝试用性能很弱的8008开发Basic编程语言,虽然后来失败了。但是他们最终在性能强劲一些的8080处理器上开发出了Basic语言,并在1975年把 Basic语言应用到Altair8800 PC。
这成为Intel和微软亲密关系的开始。微软从那开始,创造了一个巨大的软件帝国,并推动了整个行业的发展。在X86架构成功的过程中,可能没有比RISC 处理器的影响更巨大的了。
RISC的风险
在 20世纪80年代晚期和90年代早期,X86的一个巨大威胁产生了——RISC(精简指令集计算机)。采用RISC架构的处理器有Sun Sparc、IBM/苹果/摩托罗拉的PowerPC,以及MIPS处理器。RISC架构的核心思想是:处理器的指令集如果十分简单,一个时钟周期运行一个指令,那么处理器的速度会十分快。RISC的核心思想有别于以X86为代表的CISC(复杂指令集计算机),CISC的核心思想是采用复杂的多时钟周期指令。
计算机专家们和Intel的竞争对手们曾经预言CISC会最终消亡。“那确实是一个十分艰难的时期”,Gelsinger承认。确实,Intel很快开始开发自己的RISC工作站处理器i860。但是860或者其他RISC处理器最终都没能改变X86的地位。
根据领导了80486开发的Gelsinger的说法,原因是这样的:在486发布以前(1989年4月10日),已经有价值数百万美元的软件打算在486 平台上运行。虽然和RISC相比,x86(CISC)架构是有一点慢,但是当你花时间开发出适合RISC的软件的时候,我们已经开始出更快的x86处理器。我们有巨大的经济优势,因为我们已经有了一个良好的基础,并且我们有庞大的开发团队。RISC电脑不可能赶上我们。
具有讽刺意味的是,比80486和Pentium处理器性能更强的RISC处理器电脑由于缺少软件,最终消亡了,包括Intel自己的i860处理器和其他的RISC处理器。打算推出RISC架构是一个错误,Intel后来承认。
RISC 发明人之一,加州大学伯克利分校的计算机教授David Patterson说:“但是RISC激发了许多创新”。例如,电子设备集团的VAX架构能够也是随着RISC发展起来的,虽然最后也消亡了。但是 Intel能够吸收RISC的各种优秀想法,依靠他们雄厚的软件基础,改进旧有的架构。同时,Intel的成功的另外一个原因是它的先进的制造技术。
浮点错误的灾难
像 RISC一样让人痛彻心脾的危机,发生于1994年夏天的夏天,当时Intel的测试工程师发现了在新Pentium处理器的浮点电路中存在微小的错误。错误发生的几率很低,所以对于这些错误的影响,Intel仅仅对芯片修正后就重新进行生产,并且没有召回有瑕疵的芯片。
但是几个月后,弗吉尼亚州林奇堡学院的一位数学教授,就发现了这个缺陷。他无法找到Intel的任何人听他申诉,因为Intel当时并不承认。所以他把他的发现公布在互联网上。没过多久,Intel就陷入了舆论风暴之中,并导致了巨大的公共关系危机,最终花费了4亿7500万美元召回这批芯片。
“这是一次痛苦的经历,但是我们最终学会从消费者的角度出发”, 前Intel资深副总裁Albert Yu在他的著作《创造数字未来》中回忆说。
兼容并包
另外一个x86历史上的标志性的事件发生在1995年。卡内基梅隆大学计算机教授、Intel问题研究专家Todd Mowry这样说。当时Intel推出了革命性的Pentium Pro微处理器,能够预先考虑一串指令,并猜测那些需要不按照规则处理的指令。Pentium Pro还拥有一个全新的高速缓存,这一切保证了处理器能够获得大部分时间,并且在一些应用程序中表现出色。
“事情完全出乎意料”,Mowry说,:“他们使用了RISC的优点,但并没有改变指令集。他们把X86指令翻译成更像RISC指令的微操作。所以你拥有的是x86电脑中的RISC电脑。并且这样的做法弥补了X86原有的性能差距。
Mowry说Pentium Pro源于一个自上而下的设计处理。“他们先打算设计出一款高性能的电脑,再计算出怎样使得X86满足设计要求”,他说。
寻找非x86架构的优点和缺点,这是x86取得进步的方法。Gelsinger说:“Pentium是一个巨大的架构进步,我们从微型机和中型机中寻找优秀的想法,并且把这些想法在实践中做得更好,因为我们有一个巨大画布让这些美丽的想法尽情挥洒——这个画布的名字叫做硅。”
“中型机是把要处理的不同部分在机柜中的一个很广阔的空间内传递。与中型机不同,微处理器设计者们则把所有的信息单元放在在单独的、微小的、紧密集成的芯片上,这样设计会更加有弹性,设计的产品更出色。”他说。确实,这些年来,当由多种配件组成的电脑系统发展并不很快时,硅芯片取得了与摩尔定律所预测完全一致的惊人发展速度。
竞争愈演愈烈
Intel并没能够有避免竞争,哪怕是在自家的x86架构领域。例如,1987年创建于硅谷的台湾威盛公司采用了x86的技术,销售主板芯片组。威盛目前生产很广的一系列产品,并且打算生产自己的x86架构低能耗移动处理器。
AMD 公司,世界第二大芯片制造商,自从2000年以来,它已经成为了Intel的强有力的竞争对手。在整个20世纪80年代和90年代,AMD已经成为一个 x86芯片的模仿者,并且几乎对Intel产生重大影响。(Mercury咨询:AMD仍然有占有15%的x86兼容台式机和移动电脑市场份额)。
但是AMD出人意料的在2000年推出了64位的基于x86扩展指令集的处理器,并取得了良好的技术声誉和市场效果。作为一个扩展集,它意味着新的x86架构的64位处理器能够运行旧的32位软件。
在那时,Intel的64位产品是安腾,由于Intel和HP开发,主要用于超标量执行。该处理器在一个大铁箱中,并且它不与x86架构的32位软件兼容。 Intel面对AMD的威胁,在2004年,推出了自己的64位x86指令扩展集,EM64T。事实表明,AMD已经在最重要的64位产品市场打败了 Intel。
“这是一个用x86指令集的灵活性对抗Intel的例子”,Patterson说,“所以尽管Intel统治着这个市场,其他公司也能够改变x86的发展方向。”
挑战极限
今天,Intel的x86在计算的极限领域微不足道。在4月28日,Intel宣布它将与Cray电脑公司一起,发展基于x86架构的超级计算机芯片。(Cray已经使用了AMD的基于x86的64位皓龙处理器。)
在 4月2日,上海举行的Intel全球发展论坛上,Intel宣布基于x86架构的Atom处理器,这是Intel目前的最小的处理器。它的能耗小于2.5 瓦,而一款典型的桌面处理器的能耗为35瓦。就在这周,Intel将为小型台式机和台式机发布两款新的Atom处理器。
所以,x86 能够再生存并繁荣30年么?在竞争的格局中,将有许多力量从根本上改变微处理器的设计,甚至就会发生就在近期发生。但是几乎没有人预测令人尊敬的x86架构会消亡。卡内基梅隆大学的Mowry说道:“我们恐怕很难看到其他的指令集取代x86,因为有太多的有价值的软件运行在x86架构上。”

Read More...

祝善良美丽的小侄女高考成功

祝善良美丽的小侄女高考成功!本站连续3天为我可爱的小侄女祝福,愿她美梦成真,金榜题名。

Read More...

星期二, 六月 03, 2008

Tested by windows live writer

dude12

以前好像不支持发布图片,这个竟然能够自动把图片加上,呵呵,看来以后就用这个了。

Read More...

星期五, 五月 30, 2008

靠,还让不让员工活了

第一家公司

老板:兔兔,今天工作忙不忙?

兔兔:不忙。

下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你不能多为公司干事,所以才会不忙,公司要你何用?

*第二家公司


老板:兔兔,今天工作忙不忙?

兔兔:很忙。

下班时老板对兔兔说:你明天不用来了。

兔兔:为什么?


老板:因为你做事没有条理性,所以才会整天忙,公司要你何用?

*第三家公司

老板:兔兔,今天工作忙不忙?


兔兔:还行。

下班时老板对兔兔说:你明天不用来了。

兔兔:为什么?


老板:因为你做事不理性,所以才会有什么"还行"不"还行"的,公司要你何用?

*第四家公司


老板:兔兔,今天工作忙不忙?

兔兔:刚忙完。

下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你做事效率太低,做完就不能检查一下么?公司要你何用?

*第五家公司


老板:兔兔,今天工作忙不忙?

兔兔:有些做完了,也检查过了,现在在做其他事。下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你做事缺乏系统性,有些事不会一起做么?公司要你何用?

*第六家公司


老板:兔兔,今天工作忙不忙?

兔兔:我的工作都做完了,正在帮别人做。下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你做事没有打算,你不会自己规划一下明天要做的事么?公司要你何用?

*第七家公司


老板:兔兔,今天工作忙不忙?

兔兔:今天的工作做完了,明天的工作也了。下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你做事不考虑整体,你不会帮同事分忧解劳吗?公司要你何用 ?

*第八家公司

老板:兔兔,今天工作忙不忙?

兔兔:今天的和明天的工作都做完了,现在在帮同事的忙。

下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:因为你太爱出风头,你的帮忙很可能造成其他人的懒惰或 压力,公司要你何用?

*第九家公司


老板:兔兔,今天工作忙不忙?

兔兔:等一下,我思考一下再回答你。

下班时老板对兔兔说:你明天不用来了。


兔兔:为什么?

老板:你目中无人,我问你话竟然一再搪塞我, 公司要你何用?

*第十家公司


老板:兔兔,今天工作忙不忙?

兔兔:我......我......不、不知道......该、该怎么、回答你。


下班时老板对兔兔说:你明天不用来了。

兔兔:为什么?

老板:因为你连做事忙不忙都不知道,公司要你 何用?


*第十一家公司

老板:兔兔,今天工作忙不忙?

兔兔:去你的,老子辞职了~~~~~~~~~~


老板:嘿!有个性,我们公司就不放你走!

Read More...

星期四, 五月 22, 2008

看了一天的youube骂sb女的视频

看了一天的youube骂sb女的视频,心里总算是舒服点了,xxxxx,气死我了,听的真解气。大家都去听听

Read More...

气得我不知道说什么好了-sb辽宁女

全国人民都在哀悼地震死难者,你。。。。。
从来不在网上骂人,今天就破个例吧
我操你妈小比,日。你还是人吗,操,真他妈的把我气坏了。日你妈的
操。

Read More...

星期日, 五月 18, 2008

为地震灾区祈福

天灾无情,人心有情!
为地震中遇难的同胞哀悼,希望能有更多的奇迹出现,祈祷吧!

Read More...

星期六, 五月 17, 2008

strace命令详解

strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。
  strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
  下面记录几个常用 option .
  1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程
  2 -o xxx.txt 输出到某个文件。
  3 -e execve 只记录 execve 这类系统调用
  —————————————————
  进程无法启动,软件运行速度突然变慢,程序的"SegmentFault"等等都是让每个Unix系统用户头痛的问题,
  本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的"疑难杂症"。
  
  
  truss和strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序,包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具;
  而strace最初是为SunOS系统编写的,ltrace最早出现在GNU/DebianLinux中。
  这两个工具现在也已被移植到了大部分Unix系统中,大多数Linux发行版都自带了strace和ltrace,而FreeBSD也可通过Ports安装它们。
  
  你不仅可以从命令行调试一个新开始的程序,也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同,下面仅介绍三者共有,而且是最常用的三个命令行参数:
  
  -f :除了跟踪当前进程外,还跟踪其子进程。
  -o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。
  -p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。
  
   使用上述三个参数基本上就可以完成大多数调试任务了,下面举几个命令行例子:
  truss -o ls.truss ls -al: 跟踪ls -al的运行,将输出信息写到文件/tmp/ls.truss中。
  strace -f -o vim.strace vim: 跟踪vim及其子进程的运行,将输出信息写到文件vim.strace。
  ltrace -p 234: 跟踪一个pid为234的已经在运行的进程。
  
   三个调试工具的输出结果格式也很相似,以strace为例:
  
  brk(0) = 0×8062aa8
  brk(0×8063000) = 0×8063000
  mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0×92f) = 0×40016000
  
  每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 truss、strace和ltrace的工作原理大同小异,都是使用ptrace系统调用跟踪调试运行中的进程,详细原理不在本文讨论范围内,有兴趣可以参考它们的源代码。
  举两个实例演示如何利用这三个调试工具诊断软件的"疑难杂症":
  
  案例一:运行clint出现Segment Fault错误
  
  操作系统:FreeBSD-5.2.1-release
  clint是一个C++静态源代码分析工具,通过Ports安装好之后,运行:
  
  # clint foo.cpp
  Segmentation fault (core dumped)
   在Unix系统中遇见"Segmentation Fault"就像在MS Windows中弹出"非法操作"对话框一样令人讨厌。OK,我们用truss给clint"把把脉":
  
  # truss -f -o clint.truss clint
  Segmentation fault (core dumped)
  # tail clint.truss
   739: read(0×6,0×806f000,0×1000) = 4096 (0×1000)
   739: fstat(6,0xbfbfe4d0) = 0 (0×0)
   739: fcntl(0×6,0×3,0×0) = 4 (0×4)
   739: fcntl(0×6,0×4,0×0) = 0 (0×0)
   739: close(6) = 0 (0×0)
   739: stat("/root/.clint/plugins",0xbfbfe680) ERR#2 'No such file or directory'
  SIGNAL 11
  SIGNAL 11
  Process stopped because of: 16
  process exit, rval = 139
  我们用truss跟踪clint的系统调用执行情况,并把结果输出到文件clint.truss,然后用tail查看最后几行。
   注意看clint执行的最后一条系统调用(倒数第五行):stat("/root/.clint/plugins",0xbfbfe680) ERR#2 'No such file or directory',问题就出在这里:clint找不到目录"/root/.clint/plugins",从而引发了段错误。怎样解决?很简单: mkdir -p /root/.clint/plugins,不过这次运行clint还是会"Segmentation Fault"9。继续用truss跟踪,发现clint还需要这个目录"/root/.clint/plugins/python",建好这个目录后 clint终于能够正常运行了。
  
  案例二:vim启动速度明显变慢
  
  操作系统:FreeBSD-5.2.1-release
   vim版本为6.2.154,从命令行运行vim后,要等待近半分钟才能进入编辑界面,而且没有任何错误输出。仔细检查了.vimrc和所有的vim脚 本都没有错误配置,在网上也找不到类似问题的解决办法,难不成要hacking source code?没有必要,用truss就能找到问题所在:
  
  # truss -f -D -o vim.truss vim
  
  这里-D参数的作用是:在每行输出前加上相对时间戳,即每执行一条系统调用所耗费的时间。我们只要关注哪些系统调用耗费的时间比较长就可以了,用less仔细查看输出文件vim.truss,很快就找到了疑点:
  
  735: 0.000021511 socket(0×2,0×1,0×0) = 4 (0×4)
  735: 0.000014248 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)
  735: 0.000013688 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)
  735: 0.000203657 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 'Connection refused'
  735: 0.000017042 close(4) = 0 (0×0)
  735: 1.009366553 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)
  735: 0.000019556 socket(0×2,0×1,0×0) = 4 (0×4)
  735: 0.000013409 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)
  735: 0.000013130 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)
  735: 0.000272102 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 'Connection refused'
  735: 0.000015924 close(4) = 0 (0×0)
  735: 1.009338338 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)
  
   vim试图连接10.57.18.27这台主机的6000端口(第四行的connect()),连接失败后,睡眠一秒钟继续重试(第6行的 nanosleep())。以上片断循环出现了十几次,每次都要耗费一秒多钟的时间,这就是vim明显变慢的原因。可是,你肯定会纳闷:"vim怎么会无 缘无故连接其它计算机的6000端口呢?"。问得好,那么请你回想一下6000是什么服务的端口?没错,就是X Server。看来vim是要把输出定向到一个远程X Server,那么Shell中肯定定义了DISPLAY变量,查看.cshrc,果然有这么一行:setenv DISPLAY ${REMOTEHOST}:0,把它注释掉,再重新登录,问题就解决了。
  
  
  案例三:用调试工具掌握软件的工作原理
  
  操作系统:Red Hat Linux 9.0
   用调试工具实时跟踪软件的运行情况不仅是诊断软件"疑难杂症"的有效的手段,也可帮助我们理清软件的"脉络",即快速掌握软件的运行流程和工作原理,不 失为一种学习源代码的辅助方法。下面这个案例展现了如何使用strace通过跟踪别的软件来"触发灵感",从而解决软件开发中的难题的。
  大家都知道,在进程内打开一个文件,都有唯一一个文件描述符(fd:file descriptor)与这个文件对应。而本人在开发一个软件过程中遇到这样一个问题:
   已知一个fd,如何获取这个fd所对应文件的完整路径?不管是Linux、FreeBSD或是其它Unix系统都没有提供这样的API,怎么办呢?我们 换个角度思考:Unix下有没有什么软件可以获取进程打开了哪些文件?如果你经验足够丰富,很容易想到lsof,使用它既可以知道进程打开了哪些文件,也 可以了解一个文件被哪个进程打开。好,我们用一个小程序来试验一下lsof,看它是如何获取进程打开了哪些文件。lsof: 显示进程打开的文件。
  
  /* testlsof.c */
  #include #include #include #include #include
  int main(void)
  {
   open("/tmp/foo", O_CREAT|O_RDONLY); /* 打开文件/tmp/foo */
   sleep(1200); /* 睡眠1200秒,以便进行后续操作 */
   return 0;
  }
  
  将testlsof放入后台运行,其pid为3125。命令lsof -p 3125查看进程3125打开了哪些文件,我们用strace跟踪lsof的运行,输出结果保存在lsof.strace中:
  
  # gcc testlsof.c -o testlsof
  # ./testlsof &
  [1] 3125
  # strace -o lsof.strace lsof -p 3125
  
  我们以"/tmp/foo"为关键字搜索输出文件lsof.strace,结果只有一条:
  
  
  # grep '/tmp/foo' lsof.strace
  readlink("/proc/3125/fd/3", "/tmp/foo", 4096) = 8
  
   原来lsof巧妙的利用了/proc/nnnn/fd/目录(nnnn为pid):Linux内核会为每一个进程在/proc/建立一个以其pid为名 的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd。目标离我们很近了。好,我们到/proc/3125/fd/看个究 竟:
  
  # cd /proc/3125/fd/
  # ls -l
  total 0
  lrwx—— 1 root root 64 Nov 5 09:50 0 -> /dev/pts/0
  lrwx—— 1 root root 64 Nov 5 09:50 1 -> /dev/pts/0
  lrwx—— 1 root root 64 Nov 5 09:50 2 -> /dev/pts/0
  lr-x—— 1 root root 64 Nov 5 09:50 3 -> /tmp/foo
  # readlink /proc/3125/fd/3
  /tmp/foo
  
  答案已经很明显了:/proc/nnnn/fd/目录下的每一个fd文件都是符号链接,而此链接就指向被该进程打开的一个文件。我们只要用readlink()系统调用就可以获取某个fd对应的文件了,代码如下:
  
  
  #include #include #include #include #include #include
  int get_pathname_from_fd(int fd, char pathname[], int n)
  {
   char buf[1024];
   pid_t pid;
   bzero(buf, 1024);
   pid = getpid();
   snprintf(buf, 1024, "/proc/%i/fd/%i", pid, fd);
   return readlink(buf, pathname, n);
  }
  int main(void)
  {
   int fd;
   char pathname[4096];
   bzero(pathname, 4096);
   fd = open("/tmp/foo", O_CREAT|O_RDONLY);
   get_pathname_from_fd(fd, pathname, 4096);
   printf("fd=%d; pathname=%sn", fd, pathname);
   return 0;
  }
  
   出于安全方面的考虑,在FreeBSD 5 之后系统默认已经不再自动装载proc文件系统,因此,要想使用truss或strace跟踪程序,你必须手工装载proc文件系统:mount -t procfs proc /proc;或者在/etc/fstab中加上一行:
  
  proc /proc procfs rw 0 0

Read More...

irc命令笔记

1./msg <别名|#闲聊室> <消息>
【描述】
  用来向某人发出密聊话语,或者对某个闲聊室的所有人说话。
【举例】
  假设你敲/msg TigTag
你好,那么TigTag就会在他的小窗口里看到你在说“你好”,而且这句话只有你跟TigTag才会看到;
  假设你敲/msg #Chat 大家好,那么在#Chat中的全体成员都会看到你在说“大家好”。
【注意】
  当用/MSG命令对某人发出密聊话语时,其作用与/QUERY相同。唯一的区别就是:使用/MSG命令时,自己这边不单独开个小窗口;而使用/QUERY命令时,双方都会各自开一个小窗口进行对侃。
/NOTICE 命令
【语法】
   /notice <别名> <消息>
【描述】
  用来向某人发出通告信息。与/MSG和/QUERY不同,这种通告信息不会在双方开小窗。
2.
TOPIC 命令
【语法】
   /topic <#闲聊室> [新主题]
【描述】
  用来更改指定闲聊室的聊天主题。
  如果不指定新主题,则系统会告诉你指定闲聊室的当前主题。
3.
/MODE 命令
【语法】
   /mode <#闲聊室|别名> [[+|-]参数]
【描述】
  /MODE命令是一个强有力的命令,它使得一个闲聊室的主持人能够更改所属闲聊室以及该闲聊室成员的属性。
 * 更改闲聊室的属性
   参数     效果
    b <别名>   禁止某人加入该闲聊室 (ban)
    i       把闲聊室设置成只有被邀请的人才能进入 (invite)
    l <人数>   限定进入该闲聊室的最大人数 (limit)
    m       旁听模式—只有主持人和被许可的人才能说话 (mode)
    n       是否接受从闲聊室外传来的信息(+n为不接受)
    o <别名>   使指定的人也成为闲聊室的主持人,即给他/她@符号(帽子)
    p       把闲聊室设置成私人房间 (private)
    s       把闲聊室设置成隐藏 ---(shroud)隐藏
    t       锁定主题—只有主持人才能更改它
    k <密码>   为闲聊室设置密码—只有知道密码的人才能进来
 * 更改用户的属性
   参数     效果
    i    
  使你变得不可见—如果你不在任何闲聊室里,而别人又不知道你的别名的话,他/她就看不到你
    o    
  IRC管理员(IRC-OP)状态,/MODE命令只能取消该状态。要设置该状态必须用/OPER命令
    s       是否接受服务器的通告(+s为接受)
    v       允许某人在一个设置成旁听模式的闲聊室说话
    w       是否接收WALLOPS信息
【注意】
  要在某个闲聊室使用/MODE命令,大多数情况下,你必须在该闲聊室拥有帽子(也就是是主持人)才可以。
  你只能更改某人在某个闲聊室的属性,而不能更改其在IRC服务器上的属性(自己除外)。
【举例】
  使TigTag成为#Chat的主持人,用命令:/mode #Chat +o TigTag
  使TigTag不再是#Chat的主持人,用命令:/mode #Chat -o TigTag
  禁止TigTag进入#Chat,用命令:/mode #Chat +b TigTag
  不再禁止TigTag进入#Chat,用命令:/mode #Chat -b TigTag
  限定#Chat的最大人数是100,用命令:/mode #Chat +l 100
  使TigTag在服务器上隐藏起来,用命令:/mode TigTag +i
  ……
 * 如果要使多个人成为主持人,这里有个更快捷的方法:/mode #Chat +o nicka
:/mode #Chat +oooo nicka nickb nickc nickd
4.
查看access和level的值
/cs access #ubuntu-cn list 和/cs level #ubuntu-cn list
5.
/msg nickserv register密码
  密码是为你的昵称所选择的密码,电子邮件必须填写,但是系统不校验。如果你不想被他人盗用你的现有名字,请注册。

6.你想给某人发悄悄话可以用:  
  /msg nickname这里的nickname为你好友的昵称。  
7)修改自己的密码:   
  /msg nickserv set password新密码
  注意:如果密码忘了,请联系管理员。

8)删除自己(如果你不满意这个昵称或不想在IRC聊天了):
  /msg nickserv drop希望只是不满意这个昵称,而不是不再来了。:)
9)注册频道:
  /msg chanserv register #频道名密码简短说明
  注册频道之前,你必须已经在这个频道里,并且你是有帽子(@符号)的。

Read More...

星期四, 五月 15, 2008

EVA字体乱码问题解决

编辑 ~/.kde/share/config/kdeglobals,加入如下内容:

[General]
StandardFont=wenquanyi bitmap song,9,-1,5,50,0,0,0,0,0
activeFont=wenquanyi bitmap song,9,-1,5,75,0,0,0,0,0
fixed=wenquanyi bitmap song,9,5,20,50,0
font=wenquanyi bitmap song,9,-1,5,50,0,0,0,0,0
menuFont=wenquanyi bitmap song,9,-1,5,50,0,0,0,0,0
taskbarFont=wenquanyi bitmap song,11,-1,5,50,0,0,0,0,0
toolBarFont=wenquanyi bitmap song,10,-1,5,50,0,0,0,0,0

把“wenquanyi bitmap song”换成你所需要的字体,比如“simsun”或“sans
serif”。再进入 eva,字体就完好了,终于可以舒服的聊 QQ 了。

要确定可以用什么字体,用 xlsfonts | grep &lt;fontname&gt; 查看,得到的
-wenquanyi-wenquanyi bitmap song-medium-r-normal--16-160-75-75-p-80-iso10646-1
这样的字符串的第二段就是可用的名字。
另外,qt程序字体设置在qtconfig这个程序里面

Read More...

星期一, 五月 12, 2008

平安归来

过去的两周真不知道该怎么说了,妈妈生病了还不告诉我,幸亏我猜着几分,这才赶回家去,连着陪床陪了一周,总算是平平安安的,最后去包头检查说一点问题没有,心里一颗悬着的石头总算是放下了。
在这里祝愿妈妈身体永远健康,妈妈的健康就是我的幸福,bless

Read More...

星期日, 四月 27, 2008

真是服了,一个月内丢了3辆车了都

靠,真tmd服了,昨天刚刚把李欣走时留下的车骑回来,结果小罗给的车就丢了,真是无语了
偷车的也太猖狂了吧,就在楼下就连着丢了3辆,更何况我是锁在铁栏杆上的。

Read More...

星期六, 四月 26, 2008

小罗走了

一起学习工作的好弟兄都走了,为了各自的理想,大家都选择了离开,祝愿弟兄们都能有个美好的前途
blesss
今天小罗走了,心里很酸,前几天李欣的离开就让我好几天都不开心。
bless

Read More...

星期三, 四月 23, 2008

Pekwm &bmpanel











今天来个pekwm+bmpanel+conky
其实和前面的openbox差不多都那样,改的地方也差不多,设置好了一个其他的也就照着改改就ok了,唯一遗憾的是bmpanel在设置font的时候不能用pl的zhunyuan字体,只能用丑陋的Vera,好像这个是bmpanel的bug?google了半天也没找到什么,呵呵,再说吧 ,先凑合着用吧

Read More...

星期二, 四月 22, 2008

eva版本号过低无法登陆QQ的解决办法

该死的腾讯总是喜欢封杀第三方QQ,不过他只是靠拒绝低版本号QQ登陆来实现的。
因为第三方QQ更新得比较慢(eva,luma),所以经常会出现登陆不上的情况,这时只好自己动手,丰衣足食了。

以eva为例:
emerge -f eva //下载eva的源码包
将 /usr/portage/distfiles/eva-0.4.1.tar.bz2 包解出来
修改 eva/src/libeva/evadefines.h 文件中的 QQ_CLIENT_VERSION 常量
改为 const int QQ_CLIENT_VERSION = 0x0E1B; 这个版本号可以想办法找到最新的(比如看看珊瑚虫的设置)
然后把修改过的源码重新打包,放回 /usr/portage/distfiles/ 目录
然后
cd /usr/portage/local/layman/gentoo-china/net-im/eva
ebuild eva-0.4.1.ebuild digest
否则emerge时会重新下载,做的修改就白费了。

然后就可以
emerge eva
安装修改过的eva了。装完了以后成功登陆QQ。

Read More...

mplayer的配置与双语字幕设置

先编写mplayer的配置文件:~/.mplayer/config

# Write your default config options here!
joystick=no #不加载游戏手柄的控制
fs=yes #支持全屏
zoom=yes #支持缩放
subcp=cp936 #支持中文字幕
subfont-autoscale=1 #字幕占屏幕的大小
#subfont-text-scale=3 #字幕的字体大小
font=/usr/share/fonts/cjkuni-fonts/uming.ttf #
选择字体
overlapsub=1 #支持多语言字幕
sub-fuzziness=1 #设定字幕自动加载的识别
osdlevel=3 #在屏幕的左上角显示相应时间等
vf=expand=:::::4/3:2 #如果是16:9的影片,字幕可以放在下面的黑框中

保存.

字幕的自动加载
sub-fuzziness有三个值可以设置,
0:代表完全匹配,字幕的名字和影片的名字必须一样,例如:xxxx.avi,xxxx.srt
1: 代表部分匹配,字幕的名字完全包含影片的名字就可以自动加载,例如:xxxx.avi,xxxx.chs.srt
2:代表所有这个目录下的字幕都会被加载

双语字幕
overlapsub=1是为了加载多语言字幕,最常用的是中英文字幕,但如果只是把中文和英文字幕放到影片目录里,中英文字幕是不会同时出现的,这时要把两个字幕合并成一个字幕,很简单:
$ cat xxxx.eng.srt xxxx.chs.srt&gt;xxxx.srt

Read More...

星期一, 四月 21, 2008

fluxbox-又一pp桌面











show一下我的pp的fluxbox桌面

Read More...

星期五, 四月 18, 2008

体验openrc

按照这篇暂时还是非官方的“官方”文档作,基本没什么问题
升级baselayout-2

感觉速度提升很快,尤其是在/etc/rc.conf里面设置rc_parallel="YES"
并行启动,开机关机速度比以前快多了感觉

但是现在就还剩下一点小问题,不知道是我的个人的问题还是用了openrc的问题,就是我的gensplash不太管用了,只有开始的那个图片,后面的进度条等等都不显示了
重新emerge splashutils-1.5.4-r1就好了

Read More...

尝鲜bmpanel,ebuild学习处女作

突然之间发现bmpanel这个好东东,发现gentoo还没有,于是试着写了个,准确的说应该是改了个,呵呵

在自己的系统上基本没有问题,今天拿出来,有兴趣的同学们可以试试
btw:还请zhllg帮看看有什么需要完善的,自己也是头一次试着写,有很多还不知道,

bmpanel-0.9.14.ebuild
代码:
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/x11-misc/bmpanel/bmpanel-0.9.14.ebuild,v 1.10 2008/04/14 22:43:41 uberlord Exp $

DESCRIPTION="A themeable reincarnation of fspanel"
HOMEPAGE="http://nsf.110mb.com/bmpanel/"
SRC_URI="http://nsf.110mb.com/bmpanel/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 ppc sparc x86 ~x86-fbsd"
IUSE=""
RESTRICT="strip mirror"

RDEPEND="dev-libs/libev
media-libs/imlib2
&gt;=media-libs/freetype-2.1.10-r3"
DEPEND="${RDEPEND}
dev-util/pkgconfig
dev-util/scons
x11-proto/xproto"

src_unpack() {
unpack ${A}
}

src_compile() {
scons || die "scons failed"
}

src_install () {
dodir /usr/bin
scons prefix="${D}/usr" install || die "scons install died"
}
这个是上面那个的依赖包
昨天在irc上也问了,后来发现这个和libevent有些关系,但是还不是一个包,gentoo下没有这个包,于是把这个也试着写了
libev-3.2.ebuild
代码:
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-libs/libev/libev-3.2.ebuild,v 1.3 2008/04/14 22:44:38 uberlord Exp $

inherit multilib eutils

DESCRIPTION="A full-featured and high-performance event loop"
HOMEPAGE="http://software.schmorp.de/pkg/libev.html"
SRC_URI="http://dist.schmorp.de/libev/${P}.tar.gz"

LICENSE="LGPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~sparc ~x86 ~x86-fbsd"

DEPEND=""
RDEPEND="${DEPEND}"

src_unpack() {
unpack ${A}
cd "${S}"
}

src_compile() {
econf \
--prefix=/usr || die "configure failed"
emake || die "emake failed"
}

src_install() {
emake DESTDIR="${D}" install || die "make install failed"
dodoc ChangeLog VERSION README
}
现在有一个问题比较郁闷,那就是在emerge bmpanel的时候
到了sandbox那里有这个错误
代码:
ACCESS DENIED unlink: /usr/bin/bmpanel
scons: *** [/usr/bin/bmpanel] /usr/bin/bmpanel: Permission denied
没办法非得 FEATURES="-sandbox" emerge -av bmpanel
才过得去,使用倒是没问题,想问问zhllg关于sandbox这里ebuild该怎么修改呢?
另外,bmpanel-0.9.14.tar.gz这个包好像在我这里下载不到,最后非得tor才把他下来,一起放在这里兄弟们就不用去http://nsf.110mb.com/bmpanel下载了
点击图片以查看大图  名称: panel.png 查看次数: 45 文件大小: 7.1 KB ID: 47155

Read More...

星期六, 四月 12, 2008

what happens to me?

想说的太多了,可是我又什么都不想说
这是为什么呢?
自己反复想可就是想不通,what happens to me?
anything i can do ,and what could i do ?
that is nothing
let it proved by times!

Read More...

星期二, 四月 08, 2008

今天开始看书

又踏上这慢慢征程,已经没有退路了,给自己加加油
fighinting

Read More...

星期一, 四月 07, 2008

赢在中国第三季 创业星光论坛(下)

Read More...

7 habits for effective text editing

Read More...

快速稳定漂亮的桌面(pcmanfm,tilda,fbpanel,openbox)











主要是参靠http://www.oceanboo.cn/index.php的配置修改的,美观还有待提高,呵呵,不过的确很快,资源占用很小
没有用rox主要是pcmanfm用习惯了,还有就是习惯了tilda的嵌入桌面了,rxvt和tilda换着用感觉很爽

Read More...

星期日, 四月 06, 2008

mplayer、ffmpeg 指令備忘

  • 查看 DVD 結構
  • 擷錄 DVD 影片
  • 修剪影音檔案
  • 下載影音串流檔案
  • Webcam 應用

環境: Fedora 8 with Livna repo


查看 DVD 結構

mplayer dvd:// -identify -endpos 0 | grep ID_DVD

ID_DVD_TITLES=2 (總共有兩個標題)

ID_DVD_TITLE_1_CHAPTERS=11
(第一個標題有十一個章節)
ID_DVD_TITLE_1_ANGLES=1
(第一個標題只有一種視角)
ID_DVD_TITLE_2_CHAPTERS=8
(第二個標題有八個章節)
ID_DVD_TITLE_2_ANGLES=1

(第二個標題只有一種視角)


dvd:// → DVD
vcd:// → VCD
cdda:// → Audio CD
cddb:// → Audio CD




擷錄 DVD 影

#擷錄 TITLE 1, CHAPTER 8

mplayer dvd://1 -chapter 8-8 -dumpstream -dumpfile myfile.vob

-dumpstream: Video + Audio

-dumpvideo: Video only
-dumpaudio: Audio only (-dumpfile filename.pcm)







修剪影音檔案 #從第 11 秒的地方開始擷錄 (去除前面 10 秒內容)

ffmpeg -i input_file -ss 11 -acodec libmp3lame -ab 192k output.mp3

#從 -ss hh:mm:ss 開始擷錄, 且只錄製 -t hh:mm:ss 長度
ffmpeg -i input_file -ss hh:mm:ss -t hh:mm:ss -acodec copy -ab 192k output_file






下載影音串流檔案 #下載 mms:// 影音串流

mplayer mms://host/hot_mv.asf
-dumpstream -dumpfile myfile.asf






Webcam 應用 #播放 Webcam 視訊

mplayer tv:// -fps 30

#錄製 Webcam 影像

ffmpeg -i /dev/video -f video4linux2 -s 320x240 -f m4v myvideo.m4v



Read More...

星期六, 四月 05, 2008

一些常用且需要记忆的数

经常遇到这些东西,每次都拿计算器计算太麻烦,在网上看见了一个列表,转过来:


0x40000000是1GB处;
0x00040000是256K处,
0x00020000是128K处,
0x90000000是2GB多的地方。
1M->0x00100000,
2M->0x00200000,
8M->0x00800000
16M->0x01000000,
32M->0x02000000
256M->0x10000000
64K->0x00010000
4K->0x00001000

Read More...

星期五, 四月 04, 2008

硬盘安装gentoo(无cdrom) [原]

硬盘安装gentoo(无cdrom)
其实网上已经有很多很多的安装linux(当然也包括gentoo)的方法了,写这篇文章的主要目的就是给像我一样光驱坏了但是想体验gentoo的弟兄们一个安装gentoo的思路(抛砖引玉 希望有更简单更适合像我这样没有光驱的贱兔用户的安装方法)

首先说说我的电脑硬件
asus laptop L4R 很老的本本了(谁教我没钱买新的呢?~~)
显卡 ati 9100 iGP ,cpu pentium-m 1.5 ,声卡 ati-ixp,硬盘40g(主要的也就这几个吧)
{hda1 ,hda5}=》 windows xp ;
{hda3(boot) hda4(root)}=》gentoo(这么分区可能不够好,但是是历史原因,呵呵就这么一直用下去了,改起来也费劲)

说说我之所以这么安装gentoo的动机吧
安装gentoo 最主要的困难是我没有个可用的光驱(光驱基本不能用)所以在这里比较费劲
前提是得有个能启动的windows系统,以前安装gentoo那个折腾啊,想了很多招,曾经用虚拟机在windows下装的差不多后重启进入 gentoo继续安装,这个方法简单易用,但是忍受不了它的龟速,还有我现在是网通adsl拨号上网,不象以前在学校是直接连接在教育网上,在虚拟机里面 上网的话和宿主系统冲突,得来回切换网路麻烦的很(或许大家还有更好的办法,可是我只能想到这个笨办法,那就是禁用xp的网洛在虚拟机中在拨号,但是这样 在宿主系统查资料就不方便了~~)

无奈只能另外想其他的办法,后来发现还是chroot这个办法不错,但是我没有光驱,所以livecd我没法启动,大家可能会说先在电脑上装个其他的小型 系统,然后在chroot,但是我有“洁癖”我只想要两个系统xp和gentoo其他的都不想要,也不想浪费硬盘上一点点的空间,怎么办呢,去网上找能够 在windows下启动的小型系统(其实网路上有很多),最后我选择了cd linux(http://cd-linux.sourceforge.net/index-cn.html) 这个好用的东东,这个好像是国人弄的吧,最新版本是0.5.9 ,废话说了一堆了,下面说说我的安装步骤
1 下载cdlinux 0.5.9 iso文件在windows下,然后用rar解压iso文件,把里面的整个boot目录拷贝到某个硬盘分区的根目录下(这里我是放在windows的d盘 也就是hda5)。主页上介绍的是用loadlin程序在纯DOS下引导,因为我的本本上有现成的linux的grub引导程序,就直接用grub来引导 了(要是没有可以用grub4dos来引导)我不喜欢用什么loadin来引导,还是喜欢用纯正的grub来工作 ----这一步是准备工作
2 一切ok后重启电脑,进入grub菜单输入:c 进入command模式(不要说这个你不知道啊,小心我劈你。。。。google啊)
代码:
kernel (hd0,4)/boot/CDlinux/autoboot/bzImage vga=791
initrd (hd0,4)/boot/CDlinux/autoboot/CDlinux
然后 按b
boot cdlinux 等待片刻进入安装环境 是xfce4的安装环境,非常友好,我们可以边上网查资料边emerge,感觉比livecd爽多了,至少比那种方式快很多(现在就是给我光驱我也不用了 ~~呵呵)
下面就是 传统的安装步骤了,我主要是想说说上面的这个办法
3 开始安装 就都是一些命令了
首先 我得先连接上internet吧
代码:
#pppoe-setup
#pppoe-start
ok 了可以上网了 ,(happying,打开firefox 查你的手册,wiki什么的吧)

创建reiserfs分区
代码:
# mkreiserfs /dev/sda4 (正常应该是hda4,但是这里cdlinux识别成了sda4,无所谓,待会写fstab的时候改回来就好了)
# mkfs.ext3 /dev/sda3
激活交换分区
代码:
# mkswap /dev/sda6
# swapon /dev/sda6
创建与挂载分区
代码:
# mkdir /home/gentoo/ (本想在/mnt下创建目录的,但是/mnt貌似是只读的 ,无所谓哪里都行)
# mount /dev/sda4 /home/gentoo/
# mkdir /home/gentoo/boot
# mount /dev/sda3 /home/gentoo/boot/
下载stage3-i686-2007.0.tar.bz2与portage-latest.tar.bz2文件,放在/home/gentoo下
安装基本系统和portage
代码:
#tar xvjpf stage3-i686-2007.0.tar.bz2
#tar xvjf /home/gentoo/portage-latest.tar.bz2 -C /home/gentoo/usr
配置make.conf
我直接cp我原来的make.conf
下面是我的make.conf
代码:
# These settings were set by the catalyst build script that automatically built this stage
# Please consult /etc/make.conf.example for a more detailed example
#CFLAGS="-O2 -march=i686 -pipe"
CFLAGS="-mtune=pentium-m -march=pentium-m -O2 -pipe -fomit-frame-pointer -msse2 -msse -mmmx -mfpmath=sse"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"
LDFLAGSHASHSTYLE=" -Wl,-O1 -Wl,--hash-style=both"
GENTOO_MIRRORS="http://61.135.158.199 \
http://mirror.qubenet.net/mirror/gentoo \
http://gentoo.chem.wisc.edu/gentoo \
http://mirror.averse.net/pub/gentoo \
http://mirror.lupaworld.com/gentoo"
#ftp://ftp3.tsinghua.edu.cn/mirror/gentoo \
#http://ftp.belnet.be/packages/gentoo \
#http://mirror.espri.arizona.edu/gentoo/ \
#http://ftp.gentoo.or.kr/ \
#http://mirror.espri.arizona.edu/gentoo/ \
#http://mirror.gentoo.gr.jp/ \
#http://ftp.swin.edu.au/gentoo/ \
#ftp://ftp.sjtu.edu.cn/gentoo/ \
#http://gentoo.chem.wisc.edu/gentoo/ \
#http://gentoo.inode.at/ \
#http://mirror.gentoo.gr.jp/ \
#http://gentoo.gg3.net/ \
#http://www.ibiblio.org/gentoo/"
#SYNC="rsync://rsync.au.gentoo.org/gentoo-portage"
#SYNC="rsync://mirror.averse.net/gentoo-portage"
SYNC="rsync://rsync.qubenet.net/gentoo-portage/"
#SYNC="rsync://61.135.158.199/gentoo-portage"
#SYNC="rsync://rsync.namerica.gentoo.org/gentoo-portage/"
#SYNC="rsync://mirror.espri.arizona.edu/gentoo/"
#SYNC="rsync://gentoo.139pay.com/gentoo-portage"
#SYNC="rsync://linux.ntcu.net/gentoo-portage"
#SYNC="rsync://rsync.gentoo.org/gentoo-portage"
#SYNC="rsync://gentoo.chem.wisc.edu/gentoo/gentoo-portage"
#SYNC="rsync://acm.cs.rpi.edu/gentoo-portage"
#SYNC="rsync://61.135.158.199/gentoo-portage"
#SYNC="rsync://38.99.64.200/gentoo-portage"
#SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
#SYNC="rsync://219.111.13.142/gentoo-portage"
#SYNC="rsync://61.135.158.199/gentoo-portage"
#SYNC="rsync://gentoo.kems.net/gentoo-portage"
#SYNC="rsync://202.1.117.1/gentoo-portage"
#SYNC="rsync://ftp.swin.edu.au"
#SYNC="rsync://rsync.gg3.net/portage"
#SYNC="rsync://rsync.de.gentoo.org/gentoo-portage"
#SYNC="rsync://mirror.lupaworld.com/gentoo/gentoo-x86-portage"
#SYNC="rsync://http://mirror.lupaworld.com/gentoo/gentoo-x86-portage/"
#SYNC="rsync://ftp3.tsinghua.edu.cn/gentoo/gentoo-portage"
PORTDIR_OVERLAY="/usr/local/portage/overlay /usr/local/portage/compiz-overlay /usr/local/portage/gfxboot_overlay"
MAKEOPTS="-j2"
ACCEPT_KEYWORDS="~x86"
USE="X aac accessibility alsa -apm -arts avi avahi bash-completion branding bitmap-fonts cairo -cdr clucene cjk crypt loop-aes -cups curl dbus -doc dri dvd -dvdr -eds emboss encode esd fbcon fbcondecor fbsplash festival firefox gdbm gdm gif gnome gpm gstreamer gtk gtk2 hal -ipv6 java jpeg -kde -kde4 -kdeenablefinal ldap libwww lyrics mad -mozilla mpd mikmod mmx mng mono moznopango mp3 mpeg msn -mysql ncurses nls nptl nptlonly newspr ogg opengl oss pam pcre pdf perl png python qq -qt3 -qt4 quicktime rar real readline rtc sdl session spell srt sse sse2 ssl svg symlink taglib tcpd truetype truetype-fonts type1-fonts unicode vim vim-syntax vorbis win32codecs xml xorg xosd xv zlib"
FEATURES="sandbox parallel-fetch ccache "
LINGUAS="zh_CN"
CCACHE_SIZE="1G"
CCACHE_DIR="/var/tmp/ccache/"
VIDEO_CARDS="radeon fbdev"
ALSA_CARDS="atiixp"
INPUT_DEVICES="keyboard mouse evdev synaptics"
PORTAGE_ECLASS_WARNING_ENABLE="0"
FETCHCOMMAND="/usr/bin/axel -a -n2 \${URI} -o \${DISTDIR}" #
RESUMECOMMAND="/usr/bin/axel -a -n2 \${URI} -o \${DISTDIR}"

source /usr/local/portage/layman/make.conf
剩下的我就不写了,没多大意义了,主要的参考
在IBM ThinkPad X41上安装Gentoo全记录!(第一部分)
http://www.linuxsir.org/bbs/showthread.php?t=313392
在IBM ThinkPad X41上安装Gentoo全记录!(第二部分)
这个帖子写的非常好,基本上照着安装就好了,没什么新的东西。
另外最近blogger访问不了了,大家也是吗?
以前通过proxy.pac脚本都可以,最近好几天了,怎么老是访问不了
郁闷,好多文章都在那里呢

Read More...

星期五, 三月 28, 2008

Linux系统里有几根内存信息

Linux系统里有几根内存信息
dmidecode |grep -A16 "Memory Device$"

dmidecode -t memory

dmidecode -t 可以看到 可以显示的相关信息

如:dmidecode -t processor 就可以显示cpu的相关信息。

Read More...

Gentoo portage-utils常用选项 [转]

之前一直用的eix equery这些工具,结果上次当equery b 不听话的时候有人告诉我qfile,结果让我改变了对portage-utils的看法,所以就顺带整理了一下目的是方便自已看,各位高手看到下面有误的地方,请提示改正
#------------------------------------------------------------------------------
qlist &lt;opts&gt; &lt;pkgname&gt;
-I , --installed *仅显示已安装的包 等同于eix -I --names-only
-S, --slots *显示已安装的包时同时显示slots
-U, --umap   *显示已安装包的同时显示使用的USE标记
-D,--dups *仅显示包dups
-e, --expact *Exact match(only CAT/PN or PN without PV)
-a, --all *显示所有安装包
-d, --dir *仅显示包安装后的目录 equery files --filter=dir
-o, --obj *仅显示包安装后的obj
-s, --sym *仅显示包安装后的软链接
-v, --verbose *详细得你不想再详细
-q, --quiet *尽量的减少输出信息,并且连警告都不显示
-C, --nocolor *输出时不带颜色形式输出
-h, --help *打印帮助信息并退出
-V, --version *打印版本信息并退出
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
qpkg &lt;opts&gt; &lt;misc args&gt; 注意该命令需要管理员权限
Options: -[cpP:vqChV]
-c, --clean *清除无用的二进制文件目录,也就是 eclean-dist -d ??有待考证
-p, --pretend *用过emerge -p就会用这个了
-P, --pkgdir &lt;arg&gt; *alternate package directory不知如何解释
-V, --verbose *
-q, --quiet *
-C, --nocolor *
-h, --help
-V, --version
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
qfile &lt;filename&gt;
Options: -[ef:m:oRx:vqChV]
-e, --Exact *精确匹配,类似eix -e gcc只查到包名为gcc的包效果一样
-f, --from &lt;arg&gt; *Read arguments form file &lt;arg&gt; ("-" for stdio)
*将读入文件作为qfile的输入(有待考证)

-m, --max-args &lt;arg&gt; * Treat from file arguments by groups of args(默认为5000)
-o, --orphans *显示孤立文件 这个是显示孤儿文件,就是不包含在任何安装包里边的文件。(不是通过ebuild安装的,可能是你手工安装的程序,也可能是反删除时候留下的文件),这个一般用来清除系统垃圾文件。
-R, --root-prefix, Assume arguments are already prefixed by $ROOT
*假设已将参数前缀设置为$ROOT了(不知如何表达)

-x, --exclude &lt;arg&gt; * Don't look in package &lt;arg&gt;排除xxxx

&lt;注&gt;当equery b filename时未找到匹配时可以试试qfile,可能会给你带来惊喜
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
qlop &lt;opts&gt; &lt;pkgname&gt;
-g, --gauge * Gauge number of times a package has been merged
比较准确估算出一个包已merged的时间

-t, --time *计算一个指定包merge的时间
-H, --human *输出的是秒形式,所以用此参数转化为人性化的显示方式(需要-t参数的支持)
-l, --list *显示merge历史
-u, --unlist *显示unmerge 历史
-c, --current *显示当前正在emerging的包,相当于genlop -c

-f, --logfile &lt;arg&gt; *Read emerge logfile instead of /var/log/emerge.log
*用logfile的文件来代替/var/log/emerge.log
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
quse &lt;opts&gt; &lt;useflag&gt;
-e, --exact *精确比较,不使用正则表达式
-a, --all *Show annoying things in IUSE (不管3721全显)
-K, --keywords *Use the KEYWORDS vs IUSE
-L, --license *Use the LICENSE vs IUSE
-D, --describe *显示USE的描述信息,类似 euse -i xxx
-F, --format &lt;arg&gt; * Use your own variable formats. -F NAME=
-N, --name-only * Only show package name
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
qcheck &lt;opts&gt; &lt;pkgname&gt;
-e, --exact *Exact match (only CAT/PN or PN without PV)
-a, --all *显示所有包
-u, --update *更新包的缺失的文件,校验码和修改时间(不要乱用)
-A, --noafk *忽略缺失的文件
-H, --nohash *Ignore differing/unknown file chksums
-T, --nomtime *Ignore differing file mtimes
-v, --verbose
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
qsize &lt;opts&gt; &lt;pkgname&gt;
-f, --filesystem *显示已使用的磁盘空间(包占用大小)
-a, --all *显示所有安装包的大小
-s, --sum *Include a summary 还会显示一个总和
-S, --sum-only *仅显示总和
-m, --megabytes *用M方式显示 xMbytes
-k, --kilobytes *用K方式显示 Kbytes
-b, --bytes
-v, --version
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
qdepends &lt;opts&gt; &lt;pkgname&gt;
-d, --depend *显示依赖信息
-r, --rdepend *显示反向依赖信息
-p, --pdepend *显示PDEPEND信息 (未理解到)
-k, --key &lt;arg&gt; *User defined vdb key
-Q, --query &lt;arg&gt; *查询反向依赖
-N, --name-only *仅显示包名
-a, --all *显示所有依赖信息
-v, --verbose
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

Usage: qtbz2 &lt;opts&gt; &lt;misc args&gt; : manipulate tbz2 packages

Options: -[jstxOvqChV]
-j, --join * Join tar.bz2 + xpak into a tbz2
-s, --split * Split a tbz2 into a tar.bz2 + xpak
-t, --tarbz2 * Just split the tar.bz2
-x, --xpak * Just split the xpak
-O, --stdout * Write files to stdout
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit



Usage: qxpak &lt;opts&gt; &lt;misc args&gt; : manipulate xpak archives

Options: -[lxcd:OvqChV]
-l, --list * List the contents of an archive
-x, --extract * Extract the contents of an archive
-c, --create * Create an archive of a directory/files
-d, --dir &lt;arg&gt; * Change to specified directory
-O, --stdout * Write files to stdout
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit

#------------------------------------------------------------------------------
Usage: qatom &lt;opts&gt; &lt;pkg&gt; : split atom strings
拆分原子字符串
Options: -[cvqChV]
-c, --compare * Compare two atoms
* 比较两个原子
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit

#------------------------------------------------------------------------------
Usage: qgrep &lt;opts&gt; &lt;misc args&gt; : grep in ebuilds
Options: -[IiHNclLexJEsS:B:A:vqChV]
-I, --invert-match * Select non-matching lines
* 选择不匹配的行
-i, --ignore-case * Ignore case distinctions
* 忽略大小分
-H, --with-filename * Print the filename for each match
* 打印每个匹配的文件名
-N, --with-name * Print the package or eclass name for each match
* 打印每个匹配的包名或eclass名
-c, --count * Only print a count of matching lines per FILE
* 只显示每个文件匹配行总个数
-l, --list * Only print FILE names containing matches
* 只打印文件名里面包含的匹配
-L, --invert-list * Only print FILE names containing no match
* 只打印文件名里面不匹配的内容
-e, --regexp * Use PATTERN as a regular expression
* 使用正则表达式
-x, --extended * Use PATTERN as an extended regular expression
* 使用正则表达式的扩展语法
-J, --installed * Search in installed ebuilds instead of the tree
* 搜索已安装的ebuilds
-E, --eclass * Search in eclasses instead of ebuilds
* 搜索
-s, --skip-comments * Skip comments lines
* 跳过注释行 只要重要的信息
-S, --skip &lt;arg&gt; * Skip lines matching &lt;arg&gt;
* 跳过匹配&lt;arg&gt;的行
-B, --before &lt;arg&gt; * Print &lt;arg&gt; lines of leading context
* 打印
-A, --after &lt;arg&gt; * Print &lt;arg&gt; lines of trailing context
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit

#------------------------------------------------------------------------------
Usage: qmerge &lt;opts&gt; &lt;pkgnames&gt; : fetch and merge binary package

Options: -[fFsKUpuyO5vqChV]
-f, --fetch * Fetch package and newest Packages metadata
* 获取包和最新的包metadata,等同emerge -f
-F, --force * Fetch package (skipping Packages)
* 获取包 (跳过包)
-s, --search * Search available packages
* 搜过有效包
-K, --install * Install package
* 安装包
-U, --unmerge * Uninstall package
* 卸载包
-p, --pretend * Pretend only
* 假打
-u, --update * Update only
* 仅更新
-y, --yes * Don't prompt before overwriting
* 直接代替你输入yes
-O, --nodeps * Don't merge dependencies
* 不emerge依赖包
-5, --nomd5 * Don't verify MD5 digest of files
* 不校验文件的MD5信息
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit
#------------------------------------------------------------------------------
Usage: qsearch &lt;opts&gt; &lt;regex&gt; : search pkgname/desc

Options: -[acsSNHvqChV]
-a, --all * List the descriptions of every package in the cache
* 显示cache中每个包的描述信息
-c, --cache * Use the portage cache
* 使用portage cache
-s, --search * Regex search package basenames
* 用正则表达式搜索包的基本名字
-S, --desc &lt;arg&gt; * Regex search package descriptions
* 用正则表达式搜索包的基本描述信息
-N, --name-only * Only show package name
* 只显示包名
-H, --homepage * Show homepage info
* 显示主页信息
-v, --verbose * Make a lot of noise
* 详细
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit

#------------------------------------------------------------------------------
Usage: qcache &lt;opts&gt; &lt;action&gt; &lt;args&gt; : search the metadata cache

Options: -[p:c:idtansvqChV]
-p, --matchpkg &lt;arg&gt; * match pkgname
* 匹配包名
-c, --matchcat &lt;arg&gt; * match catname
* 匹配
-i, --imlate * list packages that can be marked stable on a given arch
* 显示可以
-d, --dropped * list packages that have dropped keywords on a version bump on a given arch
*
-t, --testing * list packages that have ~arch versions, but no stable versions on a given arch
*
-s, --stats * display statistics about the portage tree
-a, --all * list packages that have at least one version keyworded for on a given arch
*
-n, --not * list packages that aren't keyworded on a given arch.
*
-v, --verbose * Make a lot of noise
-q, --quiet * Tighter output; suppress warnings
-C, --nocolor * Don't output color
-h, --help * Print this help and exit
-V, --version * Print version and exit

#------------------------------------------------------------------------------

Read More...

星期一, 三月 24, 2008

使用Tor+Firefox+FoxyProxy访问被和谐的网站

作者:李延瑞 (lyanry@gmail.com)

2007年10月15日

版本:0.1

对于GFW,我痛恨但不指责

整 个中国,相互连接的计算机构成了一个超大的局域网,但是在这个局域网面向海外的出口那里有一堵墙,它的名字叫做“The Great Fire Wall of China”,它的简称就是传说中的GFW,目前对其比较时髦的称谓是“和谐”。就是因为这堵墙,我们才不会被国外那些反华、反共、淫秽的信息所荼毒;也 是因为这堵墙,我们经常难以访问许多优秀的网络站点,譬如维基百科全书、Google Blogger、Google Page等。

对于GFW这种“宁肯错杀一千,也不放过一万”的做法,我的个人态度是非常痛恨但不打算指责,只好努力通过一些技术手段来获取访问那些被GFW了的好网站,来满足自己获取知识的需求。

目 前,我所衷爱并正在使用的操作系统是Gentoo Linux,因此在这篇并不太长的文档中,我要讲述在Gentoo下如何使用Tor、Firefox+Foxyproxy扩展来访问这些被“和谐”了的健 康网站。当然,本文的大部分内容也适合其他Linux发行版。对于Windows用户而言,本文内容除了有关Tor的安装与配置方法有区别外,其他有关 Firefox+FoxyProxy配置的内容是可以作为参考的。

让Tor为你编织一些田间小路

战争年代,难民们要从一座城市到另一座城市,他们要是走大路,很容易被敌军设置的路卡拦截,所以他们会选择一些只有乡下人才知道的田间小路,以隐藏自己的踪迹。

现在,我们身处信息时代,虽然不像战争年代那样残酷,但是从我们计算机发出或接受的信息都有可能被居心叵测的网络“路卡”(包括GFW)所拦截。所以我们要寻找一些可以隐藏自己踪迹的“田间小路”,它就是Tor。

有关Tor的详细描述请参考 这里,本文主要专注于Tor的具体应用。

对于Gentoo用户,安装Tor是一件非常容易的事情,只需要:

# emerge -avt tor

下一步是配置Tor,首先将其一个配置文件示例中的内容作为其默认配置:

# cp /etc/tor/torrc.sample /etc/tor/torrc

然后启动Tor服务,以监听所有来访Tor端口的信息:

# /etc/init.d/tor start

如果不想每次都手动启动Tor服务,可以将其添加到系统启动过程中,这样每次启动Gentoo时,都会自动为你开启Tor服务。设置如下:

# rc-update add tor default

Firefox的FoxyProxy扩展

Firefox有一个扩展,唤作FoxyProxy,是用来为一些站点配置专门的代理服务访问的,它可以从 这里 下载安装。如果你对Firefox的扩展安装还处于懵懂无知的境地,可以参考 这里。我在这里只说一下安装完FoxyProxy扩展并重启Firefox之后的故事。

首先,重启Firefox后,会弹出这样的对话框:

对于这个对话框,嘛也别说了,点击 “是” 按钮,让FoxyProxy可以与Tor协同工作。

紧接着会弹出 :

Privoxy是Tor的黄金搭档,专门用于实现Tor的Web代理访问的一个工具,由于FoxyProxy无需要Privoxy的支持即可调动Tor为其工作,所以这里选择“不使用”,而且我们也没必要去安装Privoxy。

下面弹出的对话框是让你选择Tor的监听端口的,默认值为“9050”,我们使用这个默认值就好。

说实在的,我很不太满意FoxyProxy的安装过程,一个一个对话框的向外跳,很烦人呃。为啥就不能把这些设置放在一个对话框面板中让用户进行设定呢?无论你是否愿意,如果像我这样决定使用FoxyProxy了,还是耐心一些了。喏,下面又是一个对话框:

对于这个对话框所提出的问题,我也不知道如何选择,那么就按照它的提示,选择 “是”。听人劝,吃饱饭。

下 面跳出的这个对话框,不需要你选择什么,直接点击 “确定” 按钮即可。这个对话框实际上是FoxyProxy的配置面板,目前已经为你配置了使用Tor来访问你的 GMail 帐户,实际上在此你可以谢绝这个好意,将这项配置选中并删除。这个面板的用法,在下文中我们还要碰到,在此就略表即可。

下面弹出一个欢迎信息的对话框,祝贺你完成了FoxyProxy有关Tor的配置,点击 “确定” 即可。

下面会弹出最后一个对话框,提示你现在重新启动一下Firefox,请点击 “是”按钮。

埃,傻瓜式的配置过程终于结束了。这个过程让我心里有好多恶心的感觉,感觉那熟悉的Windows风格又回来了。

FoxyProxy安装完后,会在Firefox的任务栏上显示出任务图标:

狐假狐威的FoxyProxy

本节主要介绍如何配置FoxyProxy,以便让Firefox畅通无阻地访问经常被和谐的Google Page、Google Blogger站点。

在Firefox任务栏上左键单击FoxyProxy图标,即可弹出FoxyProxy配置对话框,在该对话框中你可以新建、删除特定站点的代理服务器配置。

点击FoxyProxy配置对话框上的“新建代理服务器”按钮,打开下面的代理配置对话框,并在其“常规”页面上填写一些可以让自己明白所设置代理服务器意义的信息:

在FoxyProxy代理配置对话框的“代理服务器细节”页面上作以下设置,给出代理服务器地址、端口等信息:

在FoxyProxy 代理配置对话框的“模板”页面上设定使用这一代理服务器访问的站点模板。所谓的站点模板实际上就是所访问网站的域名匹配字串,该字串有两种形式:通配符与 正则表达式。这样,Firefox将会根据此处设置的字串去匹配地址栏中你所输入的网址,如果匹配成功,那么就自动使用前面所设定的代理服务器访问相应站 点。

在“模板”配置页面上,点击“添加新模板”按钮,即可打开用于配置新模板的对话框。下图在该对话框中配置了匹配Google Page Creator的模板:

照 葫芦画瓢,我们可以再建立两个模板:1)用于匹配“*googlepages.com/*”域名的模板,可用于访问Google Page Creator创建的页面;2)用于匹配"*blogspot.com/*"域名的模板,用于访问Google Blogger。新模板配置完毕后,点击配置新模板对话框的“确定”按钮,回转到FoxyProxy代理配置对话框的“模板”页面,在模板列表栏里可以看 到刚才所设定的模板了:

最后点击确认按钮,可以回转到在FoxyProxy代理配置对话框,在代理服务器列表栏里可以看到相应的代理服务器信息。

最 后,点击FoxyProxy代理配置对话框中的确认按钮结束配置任务。现在,Firefox应该可以访问Google Page Creator、Google Blogger等站点了。如果不放心,可以重新启动一下Firefox。要确认所设定的代理是否可用,可以访问一些Google Page或Google Blogger站点测试一下,比如访问我的 Google Page

这 一节的内容至此已经结束,但是你也许会奇怪,为什么这一节的标题叫做“狐假狐威”的FoxyProxy呢?这是因为Firefox本身就具备这种专用的代 理服务器配置功能,这一功能是通过代理服务器自动配置脚本来实现的,也就是“.pac”文件,譬如上面FoxyProxy中的Google Servers代理配置过程可以写成一个“google-servers.pac”文件,其内容如下:


function FindProxyForURL(url,host){
if(dnsDomainIs(host, ".blogspot.com")){
return "PROXY 72.14.219.190:80";
}
if(dnsDomainIs(host, ".googlepages.com")){
return "PROXY 72.14.219.190:80";
}
if(dnsDomainIs(host, "pages.google.com")){
return "PROXY 72.14.219.190:80";
}
return "DIRECT";
}

这种自动代理配置脚本代码是javascript代码,Firefox与IE中都可以使用它来控制某一网站的代理服务访问模式。有关它的具体用法,可以google到更为详细的资料,此处略表不提。

FoxyProxy与Tor的配合

上一节讲了FoxyProxy怎样狐假狐威地作为Google Servers代理服务器的,其实FoxyProxy还是有一些真才实学的,譬如它与Tor的配合使用。

前文已经提到过将Tor用户网络代理访问工具的黄金搭档是Privoxy,但是对于我们仅仅使用Tor来访问一些被GFW的网站而言,使用FoxyProxy即可。下面通过在FoxyProxy中配置一个Tor代理来访问 http://zh.wikipedia.org作为示例,演示一下FoxyProxy与Tor的配合使用方法。

首先,点击Firefox任务栏上FoxyProxy的图标,打开配置对话框。在“代理服务器”配置页面上的列表栏中显示已配置的代理服务器,如下图所示。

由 于前文在安装FoxyProxy时,已经配置了一个默认的Tor代理服务器,现在用鼠标左键双击列表栏中的Tor服务器条目,即可打开该代理服务器配置页 面,并作出如下图所示的设定。注意,此处对于代理服务器地址与端口的设定,必须与Tor配置文件中的代理服务器地址与端口信息相一致。Tor的配置文件即/etc/tor/torrc(见前文安装Tor的内容)。对于本文而言,/etc/tor/torrc文件中Tor的代理服务器地址与端口是与此处FoxyProxy中的设定是一致的。

完成Tor代理服务器配置之后,就可以访问 维基中国网站了。

你也可以使用Tor来访问其他一些被GFW的内容健康的网站,但是你一定会抱怨访问速度怎么这么慢。这时,你应当好好了解一下Tor的工作原理,只有如此,你才能心里上略加安慰,并积极地使用Tor,甚至把自己的网络也融为Tor的一部分。

Read More...

星期三, 三月 19, 2008

emerge tips

quickpkg portage 备份当前的portage包,以便出现问题恢复

quickpkg bash 备份当前的bash包,以便出现问题恢复

emerge -uO portage O就是不考虑依赖关系

emerge -uDNpv world D=--deep N=--newuse

Read More...

星期四, 三月 13, 2008

今天辞职了

今天辞职了,心理还是怪怪的,这大半年发生了太多的事,希望留在那里的弟兄能够有个好的未来,也希望自己再次考研成功,哎 算了 不写了
改天吧

Read More...

星期三, 三月 12, 2008

10个你所不知道的杀手级FireFox扩展【转】

最为重要的是,这些精彩的扩展几乎都不是我们所熟知的著名产品,它可以有效地提升您的浏览体验.

1. PicLens

PicLens可以立即将你的浏览器变成全屏3D视角,形成一个3D浏览墙,可以通过拖放,点击,缩放等操作来加强浏览体验.

2. Snap Links

通过拖动快速收集超级链接

3. Tab Scope

类似于Windows Vista的任务栏预览.

4. Reminder Fox

FireFox的提醒软件,贵人从此少忘事

5. Download Statusbar

显示下载的进度,再也不用点菜单来浏览下载情况

6. HyperWords

将FireFox变成专业级的文字处理工具,挺酷吧!

7. Foxmarks Bookmark Synchronizer

将书签同步到网上,就算到了另一台机器也可以轻松获取到

8. Tab Effect

3D Cube功能

9. Cooliris Previews

快速预览一个站点,并且通过图形的方式直接引导访问.

10. StumbleUpon

对网上的内容进行评分,这样你可以参考大家的意见做出自己的选择.

Read More...

星期二, 三月 11, 2008

《在路上》---自勉

将这首《在路上》送给自己
希望能在路上,披荆斩棘,一往无前!

Read More...

星期一, 三月 10, 2008

s3c2410 LCD图片显示【转】

最近研究了s3c2410下LCD控制器的相关知识,主要的参考资料就是 三星s3c2410数据手册(arm920T),英文版,看的不是非常明白,后来参考了WinCE下的部分代码,似有所领悟。于是写了此程序,用以在LCD上显示图片。
本程序可以在LCD上居中显示小于800×480的任意大小的图片。用到的辅助工具就是上篇文章中的RGB分量提取器.
关键模块如下:

0、全局变量的定义:

#define DMA_BUFFER_BASE 0xAC000000
#define DMA_PHYSICAL_BASE 0x35000000 // S3C2410X01 0x30000000

#define FRAMEBUF_BASE (DMA_BUFFER_BASE + 0x00100000)
#define FRAMEBUF_DMA_BASE (DMA_PHYSICAL_BASE + 0x00000000)//0x00100000

#define IOP_BASE 0x56000000 // 0x56000000

typedef struct {
unsigned int GPACON; // 00
unsigned int GPADAT;
unsigned int PAD1[2];
...................
}IOPreg;

// Define LCD type of S3C2400X01
#define TFT24BPP 3
#define LCDTYPE TFT24BPP // define LCD type as upper definition.
//
// Registers : LCD Controller
//

#define LCD_BASE 0x4D000000 // 0x4D000000
typedef struct {
unsigned int LCDCON1; // 00
unsigned int LCDCON2; // 04
unsigned int LCDCON3; // 08
.....................
}LCDreg ;

// LCD register value

#define MODE_TFT_24BIT (224)
#define LCD_XSIZE_TFT (800)
#define LCD_YSIZE_TFT (480)
#define ARRAY_SIZE_TFT_24BIT (SCR_XSIZE*4*SCR_YSIZE)
#define HOZVAL_TFT (LCD_XSIZE_TFT-1)
#define LINEVAL_TFT (LCD_YSIZE_TFT-1)
#define MVAL (13)
#define MVAL_USED (0)
#define VBPD ((32-1)&0xff)
#define VFPD ((11-1)&0xff)
#define VSPW ((2-1) &0x3f)
#define HBPD ((88-1)&0x7f)
#define HFPD ((40-1)&0xff)
#define HSPW ((128-1)&0xff)
#define CLKVAL_TFT (1)
#define M5D(n) ((n) & 0x1fffff)

U32* pLCDBuffer24=(U32*)FRAMEBUF_DMA_BASE;
U32* picData;

volatile LCDreg *s2410LCD = (LCDreg *)LCD_BASE;

volatile IOPreg *s2410IOP= (IOPreg *)IOP_BASE;

int nCol = 800;//象素列数
int nRow = 480;//象素行数
U32* picDataT=NULL;

1、入口函数,其中包括了相应端口、寄存器初始化的入口,aa,bb,cc,dd,ee是可选择的5幅预定义图片的GRB码数组,具体代码如下

void lcd_Main(void)
{
char sel;
Uart_Printf("Lcd_Driver ");

lcd_port_init();
lcd_regs_init();

Uart_Printf("select one Picture to show(1 2 3 4 5 0) ");

while((sel = Uart_Getch()) != 'e')
{
Uart_Printf("%c ",sel);
switch(sel)
{
case '1':
picData = (U32*)aa;break;
case '2':
picData =(U32*)bb;break;
case '3':
picData = (U32*)cc;break;
case '4':
picData = (U32*)dd; break;
case '5':
picData = (U32*)ee;break;
default:
Uart_Printf("Input 1 2 3 4 5 0 ");
}

lcd_display();

Uart_Printf("select one Picture to show(1 2 3 4 5 0) ");
}
Uart_Printf("Exit");
//lcd_close();
}

2、相应端口设置,包括GPC,GPD,GPG的相应位的设置:


void lcd_port_init(void)
{

// LCD port initialize.
s2410IOP->GPCUP = 0xFFFFFFFF;
s2410IOP->GPCCON = 0xAAAAAAAA;

s2410IOP->GPDUP = 0xFFFFFFFF;
s2410IOP->GPDCON = 0xAAAAAAAA;

s2410IOP->GPGCON &= ~(3 <<>GPGCON |= (1 <<>GPGDAT |= (1 <<>LCDCON1 = (1 << vclk =" HCLK"> About 7 Mhz
(MVAL_USED <<>LCDCON2 = (VBPD <<>LCDCON3 = (HBPD <<>LCDCON4 = (MVAL <<>LCDCON5 = 0x00000000;
/**//*
s2410LCD->LCDCON5 = (0 <<>LCDSADDR1 = ((FRAMEBUF_DMA_BASE >> 22) <<>> 1)) << lcdbank =" ((FRAMEBUF_DMA_BASE">> 22) << lcdbaseu =" ((M5D(FRAMEBUF_DMA_BASE)">> 1) <<>LCDSADDR2 = (M5D(FRAMEBUF_DMA_BASE) >> 1) + ( (LCD_XSIZE_TFT*2) + 0 )*(LINEVAL_TFT+1);
//LCDBASEL = s2410LCD->LCDSADDR2

s2410LCD->LCDSADDR3 = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << offsize =" (((LCD_XSIZE_TFT" pagewidth =" (LCD_XSIZE_TFT)">TPAL = 0x0;
s2410LCD->LCDCON1 |= 1;

#endif
}

4、居中显示图片:

void lcd_display(void)
{
int y;
int pw, ph;
int sw=800, sh=480;
U32* pdata;
U32* pBt=NULL;

lcd_clear();

get_XY();//获得图片的宽与高,以保存在RGB数组的头两个字节。
pw = nCol, ph = nRow;

pBt = pLCDBuffer24 + sw*(sh/2-ph/2) + (sw/2-pw/2);//定位图片显示的起始位置

pdata = (U32*)picDataT;
for(y=0; yLCDCON1 |= 0;

}

5、每次显示都要获得图片的宽度和高度,并且清除前面的屏幕,所谓清屏就是显示背景图片(蓝色):

void lcd_clear()
{
int y=0;
U32* pdata = (U32*)(bgData+2);
for(y=0; y<480; ++y)
{
memcpy((pLCDBuffer24+800*y),(char*)pdata,800*4);
pdata = (U32*)(pdata+800);
}
}

void get_XY(void)
{
nCol = picData[0];
nRow = picData[1];

picDataT =(U32*) (picData + 2);
}

Read More...

Linux系统的开机程序执行顺序

开机的程序是这样的:

1. 加载 BIOS 的硬件信息,并取得第一个开机装置的代号;

2. 读取第一个开机装置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等

等) 的开机信息;

3. 加载 Kernel 操作系统核心信息, Kernel 开始解压缩,并且尝试驱动所有硬件装

置;

4. Kernel 执行 init 程序并取得 run-level 信息;

5. init 执行 /etc/rc.d/rc.sysinit 档案;

6. 启动核心的外挂模块 (/etc/modprobe.conf);

7. init 执行 run-level 的各个批次档( Scripts )

Read More...

星期六, 三月 08, 2008

2007,十张欧美唱片推荐

Playing My Game Lene Marlin

lene marlin

静谧的空气里,却不能忽略这样一副好嗓音,一份迷茫,一缕落寞
曲目推荐:Sitting Down Here

Konvicted Akon

akon

至终都充满了节奏音感,精炼的blues接踵而至,涌入耳膜。如果你喜欢蓝调 嘻哈,怎能错过这位饶舌天才的音乐呢。
曲目推荐:Dont Let Up

Metamorphosis Hilary Duff

hilary duff

初次听她的歌完全是冲于专辑封面,略带轻摇滚的音乐风格,自然,甜美却不失张力
曲目推荐:Where Did I Go Right


Back To Basics
Christina Aguilera

christina

爵士不是我喜欢的音乐 但是在这张专辑里,我听出了不同的味道。珠,玉,野心 迸裂,如果你想跳
曲目推荐:save me from myself

Trust Me CRAIG DAVID

craig david

太多的优点 太多的惊艳 太多的……归于兀自。07,我庆幸听到了他的音乐,trust me。你,还想说什么
曲目推荐:Hot Stuff-Let’s Dance

we are one Kelly Sweet

kelly sweet

清新 空灵 脱俗 如同精灵一般,用天使的嗓音吟唱着凡间的音乐,用娓约的声音诉说着那股抛不开的淡淡悲伤
曲目推荐:we are one

Music for Tourists Chris Garneau

chris garneau

游离在中音区的情感诉说,辅以钢琴与大提琴作为旋律表达。用心去听,或许,你会有种想哭的感觉。
曲目推荐:black and blue

breakaway Kelly Clarkson

kelly clarkson

可爱的封面包装确实不同味道的风格。发酵的音乐旋律,搭配着摇滚味儿的唱腔,破茧而出。
曲目推荐:BeautifulDisaster

Not Going Anywhere Keren Ann

keren ann

一个人呼吸 低调 飘渺的雾气充斥在生活之中 适合于清静的环境 一个人慢慢得思绪 回味 享受
曲目推荐:End Of May

Naughty But Nice Sarah Connor

sarah connor

独有质感的嗓音 磅礴 大气 听她的歌,总能将情感空间提升到一个思绪澎湃的境界 投入 亦无法平静 欲罢不能。
曲目推荐:Living To Love You

Read More...

emerge error on which-2.19

make[2]: Entering directory `/var/tmp/portage/sys-apps/which-2.19/work/which-2.19/tilde'
source='tilde.c' object='tilde.o' libtool=no \
DEPDIR=.deps depmode=none /bin/sh ../depcomp \
i686-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. -mtune=pentium-m -march=pentium-m -O2 -pipe -fomit-frame-pointer -msse2 -msse -mmmx -mfpmath=sse -c tilde.c
source='shell.c' object='shell.o' libtool=no \
DEPDIR=.deps depmode=none /bin/sh ../depcomp \
i686-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I. -I.. -mtune=pentium-m -march=pentium-m -O2 -pipe -fomit-frame-pointer -msse2 -msse -mmmx -mfpmath=sse -c shell.c
Unknown depmode none
make[2]: *** [tilde.o] Error 1
make[2]: *** Waiting for unfinished jobs....
Unknown depmode none
make[2]: *** [shell.o] Error 1
make[2]: Leaving directory `/var/tmp/portage/sys-apps/which-2.19/work/which-2.19/tilde'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/var/tmp/portage/sys-apps/which-2.19/work/which-2.19'
make: *** [all] Error 2
*
* ERROR: sys-apps/which-2.19 failed.
* Call stack:
* ebuild.sh, line 49: Called src_compile
* environment, line 2050: Called die
* The specific snippet of code:
* emake || die "emake failed";
* The die message:
* emake failed


when use this
am_cv_CC_dependencies_compiler_type=gcc3 emerge which
all things goes well

Read More...

星期五, 三月 07, 2008

Love In December - Club 8

Read More...

星期三, 三月 05, 2008

fcitx主体颜色

其一

[界面]
候选词个数=10
主窗口使用3D界面=0
输入条使用3D界面=0
主窗口隐藏模式=1
是否自动隐藏输入条=1
显示虚拟键盘=0
输入条居中=1
首次显示输入条=1
# 输入条固定宽度(仅适用于码表输入法),0表示不固定宽度
输入条固定宽度=0
输入条偏移量X=0
输入条偏移量Y=67108880
序号后加点=1
显示打字速度=0
显示版本=0
光标色=92 210 131
主窗口背景色=255 255 255
主窗口线条色=229 229 229
主窗口输入法名称色=191 191 191 80 220 150 30 160 250
输入窗背景色=255 255 255
输入窗提示色=250 40 200
输入窗用户输入色=250 40 200
输入窗序号色=250 40 200
输入窗第一个候选字色=30 160 250
# 该颜色值只用于拼音中的用户自造词
输入窗用户词组色=250 40 200
输入窗提示编码色=100 100 255
# 五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=30 160 250
输入窗线条色=229 229 229
输入窗箭头色=30 240 170
虚拟键盘窗背景色=255 255 255
虚拟键盘窗字母色=250 40 200
虚拟键盘窗符号色=30 160 250

其二

粉色

光标色=102 159 66
主窗口背景色=255 255 255
主窗口线条色=203 202 186
主窗口输入法名称色=153 153 153 102 159 66 56 134 230
输入窗背景色=255 255 255
输入窗提示色=2 89 196
输入窗用户输入色=255 0 132
输入窗序号色=0 66 200
输入窗第一个候选字色=0 99 200
#该颜色值只用于拼音中的用户自造词
输入窗用户词组色=0 99 200
输入窗提示编码色=255 0 132
#五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=56 134 230
输入窗线条色=203 202 186
输入窗箭头色=193 227 151
虚拟键盘窗背景色=220 220 220
虚拟键盘窗字母色=80 0 0
虚拟键盘窗符号色=0 0 0

其三

ubuntu主题
[界面]
候选词个数=10
主窗口是否使用3D界面=1 #
输入条使用3D界面=1
主窗口隐藏模式=1 #0-->一直显示在顶层;1-->只有在中文输入状态下才显示;2--> 不显示
显示虚拟键盘=0
是否自动隐藏输入条=1
输入条是否居中=0
首次显示输入条=0
#输入条固定宽度(仅适用于码表输入法),0表示不固定宽度
输入条固定宽度=0
输入条偏移量X=0
输入条偏移量Y=12
序号后加点=1
显示打字速度=0
显示版本=0
光标色=160 446 46
主窗口背景色=240 240 240
主窗口输入法名称色=153 153 153 200 200 200 240 153 50
主窗口线条色=245 154 49
输入窗背景色=240 240 240
输入窗提示色=48 132 240
输入窗用户输入色=255 0 255
输入窗序号色=239 104 49
输入窗第一个候选字色=238 103 48
#该颜色值只用于拼音中的用户自造词
输入窗用户词组色=241 154 49
输入窗提示编码色=255 0 255
#五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=245 154 49
输入窗线条色=237 104 48
输入窗箭头色=193 227 151
虚拟键盘窗背景色=219 211 188
虚拟键盘窗字母色=245 154 49
虚拟键盘窗符号色=238 103 48

其四

黑色主题
[界面]
候选词个数=10
主窗口是否使用3D界面=1 #
输入条使用3D界面=1
主窗口隐藏模式=1 #0-->一直显示在顶层;1-->只有在中文输入状态下才显示;2--> 不显示
显示虚拟键盘=0
是否自动隐藏输入条=1
输入条是否居中=0
首次显示输入条=0
#输入条固定宽度(仅适用于码表输入法),0表示不固定宽度
输入条固定宽度=0
输入条偏移量X=0
输入条偏移量Y=12
序号后加点=1
显示打字速度=0
显示版本=0
光标色=160 446 46
主窗口背景色=30 34 35
主窗口线条色=29 123 213
主窗口输入法名称色=153 153 153 170 170 170 255 255 0
输入窗背景色=30 34 35
输入窗提示色=1 154 232
输入窗用户输入色=255 0 255
输入窗序号色=255 255 255
输入窗第一个候选字色= 85 255 85
#该颜色值只用于拼音中的用户自造词
输入窗用户词组色=255 255 0
输入窗提示编码色=255 0 255
#五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=255 255 0
输入窗线条色=1 183 255
输入窗箭头色=193 227 151
虚拟键盘窗背景色=30 34 35
虚拟键盘窗字母色=255 255 255
虚拟键盘窗符号色=255 255 255

其五

白玉色主题
候选词个数=10
主窗口使用3D界面=0
输入条使用3D界面=0
主窗口隐藏模式=1
是否自动隐藏输入条=1
显示虚拟键盘=0
输入条居中=1
首次显示输入条=1
# 输入条固定宽度(仅适用于码表输入法),0表示不固定宽度
输入条固定宽度=0
输入条偏移量X=0
输入条偏移量Y=67108880
序号后加点=1
显示打字速度=0
显示版本=0
光标色=92 210 131
主窗口背景色=255 255 255
主窗口线条色=229 229 229
主窗口输入法名称色=191 191 191 80 220 150 30 160 250
输入窗背景色=255 255 255
输入窗提示色=250 40 200
输入窗用户输入色=250 40 200
输入窗序号色=250 40 200
输入窗第一个候选字色=30 160 250
# 该颜色值只用于拼音中的用户自造词
输入窗用户词组色=250 40 200
输入窗提示编码色=100 100 255
# 五笔、拼音的单字/系统词组均使用该颜色
输入窗其它文本色=30 160 250
输入窗线条色=229 229 229
输入窗箭头色=30 240 170
虚拟键盘窗背景色=255 255 255
虚拟键盘窗字母色=250 40 200
虚拟键盘窗符号色=30 160 250

Read More...

星期一, 三月 03, 2008

vitas-The star

Read More...

星期三, 二月 27, 2008

重读 《节妇吟》

节妇吟
【唐】张籍

君知妾有夫,赠妾双明珠;
感君缠绵意,系在红罗襦。
妾家高楼连苑起,良人执戟明光里。
知君用心如日月,事夫誓拟同生死。
还君明珠双泪垂,恨不相逢未嫁时!


今天重读这首诗,心里又有别样的感觉,最近发生了很多事,自己也需要静下来
淡泊以明志,宁静而致远。

Read More...

星期日, 二月 17, 2008

一种在U-BOOT中嵌入千兆网络功能的方法【转】

摘 要:U-BOOT是一种开放源码的、用于多种嵌入式微处理器的引导加载程序,目前U-BOOT仅支持10M/100M网络功能。本文介绍了一种让U- BOOT支持千兆网络功能的方法及所需的硬件平台结构,重点介绍了此千兆网络驱动程序的结构及设计方法,并给出了驱动程序在U-BOOT中的移植过程。该 设计可以使U-BOOT功能更加强大,使用更加方便,同时也能使嵌入式系统网络接口设计更加灵活。
关键词: U-BOOT;千兆网;AX88180;驱动

引言
U-BOOT是德国DENX小组开发的用于多种嵌入式微处理器的引导加载程序,它是系统上电后运行的第一段程序代码,用于初始化目标板 硬件,为嵌入式操作系统提供目标板硬件配置信息,并装载、引导和运行嵌入式操作系统等。U-BOOT支持网络功能,在下载操作系统内核和大的文件系统时, 比其它不支持网络的引导加载程序速度更快、更方便。目前U-BOOT仅支持10M/100M的网络功能,随着科学技术发展,千兆网络功能必将大量应用在嵌 入式系统中。本文介绍了一种让U-BOOT支持千兆网络功能的方法,可以使U-BOOT功能更加强大,使用更加方便。

U-BOOT简介
U-Boot的全称是Universal Boot Loader,它遵循GPL条款的开放源码项目,支持多种处理器,如ARM、PowerPC、MIPS等,也支持Linux、VxWorks、QNX、RTEMS、ARTOS、LynxOS等嵌入式操作系统。
U- BOOT包含两种不同的工作模式:启动加载模式和下载模式。启动加载模式也称为自主模式,即U-BOOT从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,这种模式是U-BOOT的正常工作模式。下载模式就是在开发或生产过程中,U-BOOT通过网络连接等通信手段从主机下载操作系统内核和文件系统 等到目标机的 RAM 中,然后再写到目标机上的FLASH 类固态存储设备中。U-BOOT允许用户在这两种工作模式间进行切换,系统启动时会延时等待一段时间,如果这时用户没有按键,U-Boot就默认进入启动 加载模式。
U-BOOT代码采用一种高度模块化的编程方式,可以很方便地在不同的硬件平台上进行移植。U-BOOT下包含多个目录,如图1所示。 其中BOARD目录下存放了所有其支持的目标板子目录,比如BOARD/SMDK2440/就是本文将要用到的目标板;COMMON目录是与体系结构无关 的文件,实现各种命令的C文件;CPU目录存放了其支持的CPU类型, 比如arm920t、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c、start.S; DRIVERS目录存放了各种外设接口的驱动程序,其中就包含本文用到的千兆网络的驱动程序;FS目录存放了一些文件系统,U-BOOT现在支持 cramfs、fat、fdos、jffs2和registerfs;net目录存放的是与网络有关的代码,BOOTP协议、TFTP协议、RARP协议 和NFS文件系统的实现;INCLUDE目录存放了一些相关头文件,还有对各种硬件平台支持的汇编文件、系统的配置文件和对文件系统支持的文件。



图1? U-BOOT目录

硬件平台
本文使用的硬件平台是基于S3C2440A的开发板和基于非PCI千兆以太网控制芯片AX88180的嵌入式网卡,如图2所示。 S3C2440A是ARM920T 核的16/32 位RISC嵌入式微处理器,运行频率高达500MHz,开发板上有64M NAND闪存、64M SDRAM;网卡由MAC芯片AX88180、PHY芯片88E1111、RJ45等电路组成;S3C2440A目标板与网卡之间采用目标板32位扩展总 线相连接,在产品设计时也可以将这两部分设计在同一块板上。

驱动程序
在U-BOOT中嵌入千兆网络功能需要设计千兆网卡驱动程序,并在U-BOOT中进行移植,在相应的硬件平台上实现通过千兆网口下 载等功能。网卡驱动程序主要由初始化程序eth_init(bd_t*bd)、关闭网络设备程序eth_halt(void)、发送数据包程序 eth_send(volatilevoid* packet,intlength)、接收数据包程序inteth_rx(void)等组成。初始化程序的工作主要是配置和初始化硬件,在初始化程序里可 以完成对网络控制芯片AX88180和PHY芯片的配置,比如将接口设置为1000Mbps、全双工模式等。数据发送就是将上层协议打包好的数据放在发送 数据缓冲区,然后由网卡发送到网络上;数据接收就是在网卡接收到网络传来的数据包产生中断后,从缓冲区将数据取出交给上层协议程序进行解包处理。中断服务 程序处理网卡发送数据包后、接收到数据包后产生的中断以及PHY产生的中断等。



图2 硬件平台结构框图


网卡初始化程序如下:
int eth_init (bd_t * bd)
{
...
memset (&axlocal, 0, sizeof(AX88180_PRIVATE));
RESET_MAC;
DISABLE_INTERRUPT;
WRITE_MACREG(CMD, WAKEMOD);
tmp16 = bd->bi_enetaddr[1];
macid0_val = (tmp16 << 8) | bd->bi_enetaddr[0];
tmp16 = bd->bi_enetaddr[3];
macid1_val = (tmp16 << 8) | bd->bi_enetaddr[2];
tmp16 = bd->bi_enetaddr[5];
macid2_val = (tmp16 << 8) | bd->bi_enetaddr[4];
WRITE_MACREG(MACID0, macid0_val);
WRITE_MACREG(MACID1, macid1_val);
WRITE_MACREG(MACID2, macid2_val);
ax88180_PHY_initial();
ax88180_meida_config();
WRITE_MACREG(RXFILTER, DEFAULT_RXFILTER);
INIT_TXRX_VARIABLES;
READ_MACREG(ISR, tmp_regval);
PRINTK(INIT_MSG, "ax88180: The interrupt status = 0x%08lx\n", tmp_regval);
if (tmp_regval)?WRITE_MACREG(ISR, tmp_regval);
WRITE_MACREG(CMD, RXEN | TXEN | WAKEMOD);
return 0;}

驱动移植
驱动移植是在基于S3C2440A硬件平台的U-BOOT中添加驱动程序代码和相关配置,具体如下:
1. 在drivers/目录中添加网口设备驱动程序ax88180.c和ax88180.h。
2. 在lib_arm/board.c中相应位置(参考CS8900)添加如下代码:
#ifdef CONFIG_DRIVER_AX88180
extern void ax88180_get_ enetaddr (uchar * addr);
#endif
#ifdef CONFIG_DRIVER_AX88180
ax88180_get_enetaddr (gd->bd->bi_enetaddr);
#endif
3. 在include/configs/smdk2440.h中相应位置(参考CS8900)添加如下代码:
#define CONFIG_DRIVER_AX88180?1
#define AX88180_BASE???0x08000000
4. 最后在drivers/Makefile中加入ax88180.o,重新编译生成U-BOOT即可。

结语
U-BOOT广泛应用在嵌入式系统中,本文阐述的方法可以使U-BOOT功能更强大、使用更方便,文中介绍的硬件平台给嵌入式系统千兆 网络功能的设计提供了一定的指导。本设计虽然基于S3C2440A平台,对其它类似的系统也有很好的借鉴作用,本文介绍的方法已经在产品中得到应用,效果 良好。 ■

参考文献
1. 钱峰. U-Boot在S3C44B0上的移植[J].微计算机信息.2006年第9-2期:P119-121
2. 聂强,孙贺. linux_mig_ release.pdf. http://www.hhcn.com/chinese/files
3. Allan Chou. ax88180.c.ASIX Electronics Corporation.2006

Read More...

U-Boot中SMDK2410的NAND Flash驱动。

本来不应该先写这个的,呵呵,但是我这个人记忆力很差,说不定过几天我就忘了移植过程中的代码是哪里弄来的了。
 
首先庆祝一下,我学生生涯所有的考试都结束了,哈哈哈。不过希望不要补考……听说我们的研究生教学院长赵学增老师的课很变态,120个抓50个……上帝保佑我啊。
 
开始吧。标准的SMDK2410板不支持NAND Flash,启动的时候是这样的:
 
U-Boot 1.1.2 (May 28 2006 - 08:20:50)
U-Boot code: 33F80000 -> 33F99A14  BSS: -> 33F9DB0C
RAM Configuration:
Bank #0: 30000000 64 MB
Flash:  1 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
 
NAND支持的多一行(NAND 64MB):
 
U-Boot 1.1.2 (May 28 2006 - 08:36:42)
U-Boot code: 33F80000 -> 33F99A14  BSS: -> 33F9DB0C
RAM Configuration:
Bank #0: 30000000 64 MB
Flash:  1 MB
NAND:  64 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
 
怎么实现这种支持呢?U-Boot真是功能强大的Bootloader,在/inclued/configs/smdk2410.h中有这么一段
 
/***********************************************************
 * Command definition
 ***********************************************************/
#define CONFIG_COMMANDS \
   (CONFIG_CMD_DFL  | \
   CFG_CMD_CACHE  | \
   CFG_CMD_NAND  | \
   /*CFG_CMD_EEPROM |*/ \
   /*CFG_CMD_I2C  |*/ \
   /*CFG_CMD_USB  |*/ \
   CFG_CMD_REGINFO  | \
   CFG_CMD_DATE  | \
   CFG_CMD_ELF)
/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 
需 要说明一下CONFIG_CMD_DFL,定义的是默认指令,包括bdinfo、bootd、coninfo、saveenv、flinfo、 erase、protect、iminfo、imls、itest、loadb、loads、md、mm、nm、mw、cp、cmp、crc、base、 loop、loopw、mtest、sleep、bootp、tftpboot、rarpboot、run等常用指令,这些指令我以后会结合使用做适当的 说明。关于指令的宏定义说明可以看看U-Boot的README里面的Monitor Functions。这就是对编译成功后的U-Boot支持的命令的定义,SMDK2410默认的smdk2401.h中,红色字部分是注释掉的。但是要 支持NAND Flash远没有去掉一个注释这么简单。
 
我们可以试试单纯把这个注释去掉是什么结果,老步骤:
 
make distclean
make smdk2410_config
make
……一堆编译信息飘过……
 
出 错了,位置指向cmd_nand.c这个文件,好几处错误。原因是SMDK2410的配置里根本就没有对NAND Flash支持的宏定义和函数。怎么办?自己写么?好在U-Boot里有另外一个可以让我们借鉴的配置VCMA9。在Source Navigator里搜索一下vcma,看看vcma9.h和vcma9.c,可以从中摘取出一段宏定义和一些函数声明。网上有人的做法是将其放在 smdk2410.h和smdk2410.c中,但是白痴的cross-2.95.3和cross-3.2都不能认到cmd_nand.c中已经在 smdk2410.h和smdk2410.c中定义的宏所指的函数,就算是加上extern的也不行。也许你没有看懂刚才这句话,解释一下,例如 cmd_nand.c中有这样一段
 
 if(ale_wait)
  NAND_WAIT_READY(nand); /* do the worst case 25us wait */
 else
  udelay(10);
 
其中NAND_WAIT_READY(nand),在smdk2410.h中定义为
 
#define NAND_WAIT_READY(nand) NF_WaitRB()
 
而NF_WaitRB()在smdk2410.c中定义为
 
static inline void NF_WaitRB(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 while (!(nand->NFSTAT & (1<<0)));
}
 
这个编译器死活说NF_WaitRB()未定义,就算是我在cmd_nand.c中加上这样一句也不起作用
 
extern void NF_WaitRB(void)
 
也许是我C学的不好,搞不清楚多个文件共同编译的时候static inline的引用关系,不管它,我把这些宏中定义的函数的申明放在了cmd_nand.c中,为了不太无耻,我在前面加上了针对SMDK2410的选择性编译。(请注意,下面这些代码拷贝到cmd_nand.c中的适当位置,cmd_nand.c中有许多选择性编译的宏,注意放的位置,不要被忽略掉了)
 
/*-----------------------------------------------------------------------
 * NAND flash basic functions
 * Added by Lu Xianzi 2006.5.27
 * Copied from board/mpl/vcma9/vcma9.h & vcma9.c
 */
#if (CONFIG_SMDK2410)
#include <s3c2410.h>
typedef enum {
 NFCE_LOW,
 NFCE_HIGH
} NFCE_STATE;
static inline void NF_Conf(u16 conf)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 nand->NFCONF = conf;
}
static inline void NF_Cmd(u8 cmd)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 nand->NFCMD = cmd;
}
static inline void NF_CmdW(u8 cmd)
{
 NF_Cmd(cmd);
 udelay(1);
}
static inline void NF_Addr(u8 addr)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 nand->NFADDR = addr;
}
static inline void NF_SetCE(NFCE_STATE s)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 switch (s) {
  case NFCE_LOW:
   nand->NFCONF &= ~(1<<11);
   break;
  case NFCE_HIGH:
   nand->NFCONF |= (1<<11);
   break;
 }
}
static inline void NF_WaitRB(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 while (!(nand->NFSTAT & (1<<0)));
}
static inline void NF_Write(u8 data)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 nand->NFDATA = data;
}
static inline u8 NF_Read(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 return(nand->NFDATA);
}
static inline void NF_Init_ECC(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 nand->NFCONF |= (1<<12);
}
static inline u32 NF_Read_ECC(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 return(nand->NFECC);
}
extern ulong nand_probe(ulong physadr);
static inline void NF_Reset(void)
{
    int i;
    NF_SetCE(NFCE_LOW);
    NF_Cmd(0xFF);  /* reset command */
    for(i = 0; i < 10; i++); /* tWB = 100ns. */
    NF_WaitRB();  /* wait 200~500us; */
    NF_SetCE(NFCE_HIGH);
}
static inline void NF_Init(void)
{
#if 0 /* a little bit too optimistic */
#define TACLS   0
#define TWRPH0  3
#define TWRPH1  0
#else
#define TACLS   0
#define TWRPH0  4
#define TWRPH1  2
#endif
    NF_Conf((1<<15)|(0<<14)|(0<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0));
    /*nand->NFCONF = (1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0); */
    /* 1  1    1     1,   1      xxx,  r xxx,   r xxx */
    /* En 512B 4step ECCR nFCE=H tACLS   tWRPH0   tWRPH1 */
    NF_Reset();
}
void nand_init(void)
{
 S3C2410_NAND * const nand = S3C2410_GetBase_NAND();
 NF_Init();
#ifdef DEBUG
 printf("NAND flash probing at 0x%.8lX\n", (ulong)nand);
#endif
 printf ("%4lu MB\n", nand_probe((ulong)nand) >> 20);
}
#endif /* (CONFIG_SMDK2410) */
 
然后把下面这些宏定义放在smdk2410.h中
 
/*-----------------------------------------------------------------------
 * NAND flash settings
 * Added by Lu Xianzi 2006.5.27
 * Copied from include/conifgs/vcma9.h
 */
#if (CONFIG_COMMANDS & CFG_CMD_NAND)
#define CFG_MAX_NAND_DEVICE 1 /* Max number of NAND devices  */
#define SECTORSIZE 512
#define ADDR_COLUMN 1
#define ADDR_PAGE 2
#define ADDR_COLUMN_PAGE 3
#define NAND_ChipID_UNKNOWN  0x00
#define NAND_MAX_FLOORS 1
#define NAND_MAX_CHIPS 1
#define NAND_WAIT_READY(nand) NF_WaitRB()
#define NAND_DISABLE_CE(nand) NF_SetCE(NFCE_HIGH)
#define NAND_ENABLE_CE(nand) NF_SetCE(NFCE_LOW)

#define WRITE_NAND_COMMAND(d, adr) NF_Cmd(d)
#define WRITE_NAND_COMMANDW(d, adr) NF_CmdW(d)
#define WRITE_NAND_ADDRESS(d, adr) NF_Addr(d)
#define WRITE_NAND(d, adr)  NF_Write(d)
#define READ_NAND(adr)   NF_Read()
/* the following functions are NOP's because S3C24X0 handles this in hardware */
#define NAND_CTL_CLRALE(nandptr)
#define NAND_CTL_SETALE(nandptr)
#define NAND_CTL_CLRCLE(nandptr)
#define NAND_CTL_SETCLE(nandptr)
/* #define CONFIG_MTD_NAND_VERIFY_WRITE 1 */
/* This definition above is commented by Lu Xianzi. 2006.05.28
   Because there's no definition of a macro called __mem_pci,
   there will be a link error.
 */

#define CONFIG_MTD_NAND_ECC_JFFS2 1
#endif /* CONFIG_COMMANDS & CFG_CMD_NAND */
 
注 意这段宏定义中与vcma9.h中不同的是我标记红色的部分,网上的一些移植说明没有解决这个问题,导致最后的链接无法通过。事实上,我这样做取消了 cmd_nand.c中对NAND Flash的写校验和ECC校验。__mem_pci是一个什么东西我也不知道,在U-Boot目录下搜索包含“__mem_pci”字串的文件也没有找 到,除了使用它的/include/asm/io.h。顺便说一下,这个麻烦是从cmd_nand.c中的nand_write_page函数中 readb(nand->IO_ADDR)这个宏开始的,你可以用Source Navigator查找一下引用,最后就指向没有__mem_pci宏的这个问题。希望有高手看到这篇文章,并给我指出解决的办法,呵呵。
 
做完这些修改,就再来一次老步骤
 
make distclean
make smdk2410_config
make
………………
 
生 成了U-Boot.bin。NAND Flash的驱动到此完成,好不好使呢?试试看。上次我们已经在板子里烧写进了U-Boot,是一个可以支持串口传输的U-Boot,要是现在还用 sjf2410往里烧U-Boot.bin就太冤大头了。可以利用串口进行传输,操作步骤如下:
使用超级终端,建立一个连接:文件〉新建连接;名称随便,图表随便,确定;连接时使用选择你的开发板所接的COM口;端口设置中,每秒位数选115200,数据位选8,奇偶校验选无,停止位选1,数据流控制选“无”。打开开发板的电源,出现以下提示:
 
U-Boot 1.1.2 (May 28 2006 - 08:20:50)
U-Boot code: 33F80000 -> 33F99A14  BSS: -> 33F9DB0C
RAM Configuration:
Bank #0: 30000000 64 MB
Flash:  1 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
LXZROB # loadb
## Ready for binary (kermit) download to 0x33000000 at 115200 bps...
 
loadb 这个指令以kermit协议从串口下载二进制文件到开发板的内存中,默认下载到0x33000000。当然你可以改在别的地址,例如:loadb 30000000就是下载到0x30000000。这时候选择超级终端菜单上:传送〉发送文件,文件名选择编译好的U-Boot.bin,协议选择 Kermit,点发送。可以看到发送进度。
发送结束出现提示:
 
## Total Size      = 0x00019a14 = 104980 Bytes
## Start Addr      = 0x33000000
 
这时可以测试新的修改好不好使:
 
LXZROB # go 33000000
## Starting application at 0x33000000 ...

U-Boot 1.1.2 (May 28 2006 - 08:36:42)
U-Boot code: 33F80000 -> 33F99A14  BSS: -> 33F9DB0C
RAM Configuration:
Bank #0: 30000000 64 MB
Flash:  1 MB
NAND:  64 MB
*** Warning - bad CRC, using default environment
In:    serial
Out:   serial
Err:   serial
LXZROB #
 
go 指令可以直接执行内存地址上的程序,例如刚才下载到0x33000000的新的支持NAND的U-Boot,可以看到出现了“NAND:   64MB”这一项。输入help,你会看到比刚才的U-Boot多了一组指令nand,输入help nand,可以看到更加细节的指令:
 
LXZROB # help nand
nand info  - show available NAND devices
nand device [dev] - show or set current device
nand read[.jffs2[s]]  addr off size
nand write[.jffs2] addr off size - read/write `size' bytes starting
    at offset `off' to/from memory address `addr'
nand erase [clean] [off size] - erase `size' bytes from
    offset `off' (entire device if not specified)
nand bad - show bad blocks
nand read.oob addr off size - read out-of-band data
nand write.oob addr off size - read out-of-band data
 
输入nand info,可以看到:
 
LXZROB # nand info
Device 0: Samsung unknown 64Mb at 0x4e000000 (64 MB, 16 kB sector)
 
说明我们的驱动成功了。也可以试试其他指令。
 
但是现在在NOR Flash中的U-boot还是不支持NAND的,需要重新烧写。U-Boot支持自己烧写自己。
先看看NOR Flash的情况:
 
LXZROB # flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
  Size: 1 MB in 19 Sectors
  Sector Start Addresses:
    00000000 (RO) 00004000 (RO) 00006000 (RO) 00008000 (RO) 00010000 (RO)
    00020000      00030000      00040000      00050000      00060000
    00070000      00080000      00090000      000A0000      000B0000
    000C0000      000D0000      000E0000      000F0000 (RO)
 
一共有19个sector,其中前5个总计128kb的sector有U-Boot程序,是写保护的。要烧写首先要去掉写保护:
 
LXZROB # protect off 0 1ffff
Un-Protected 5 sectors
LXZROB # flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
  Size: 1 MB in 19 Sectors
  Sector Start Addresses:
    00000000      00004000      00006000      00008000      00010000
    00020000      00030000      00040000      00050000      00060000
    00070000      00080000      00090000      000A0000      000B0000
    000C0000      000D0000      000E0000      000F0000 (RO)
 
可以看到写保护已经去掉,擦除:
 
LXZROB # erase 0 1ffff
Erasing sector  0 ... ok.
Erasing sector  1 ... ok.
Erasing sector  2 ... ok.
Erasing sector  3 ... ok.
Erasing sector  4 ... ok.
Erased 5 sectors
 
然后烧写:
 
LXZROB # cp.b 33000000 0 19a14
Copy to Flash... done
 
cp.b 是用来拷贝内存信息的,其格式为cp [.b, .w, .l] source target count,输入这样的指令是因为刚才把程序下载到了0x33000000,NOR Flash的起始地址是0x0,下载的程序长度为0x19a14。重启开发板,U-Boot的烧写就完成了。

Read More...