伟良's profile天堂难寻PhotosBlogListsMore Tools Help

2008^_^2009

伟良 王

Occupation
Location
Interests
my heart will go on and on.
Photo 1 of 15
Lists

天堂难寻

用心品味,生活本来有滋有味。
October 08

国庆,真好

又是国庆节了,一年了,真的该写点东西了。大学的时候还有一个本子,记录了自己感情的点点滴滴。最近这一年,居然没写,真是悲哀。现在补上还来得及,我想回忆会带我重游这幸福温馨的一年,值得我去珍藏的一年光景。
物是人非事事也休了。回到了那个叫做中国海洋大学的地方,走在熟悉的海大校园里,难免会有惆怅,以前手拉手的走过,现在只有一个人掏着裤兜走,好像在刻意隐藏着什么。有人对我说:你怎么回来了,真惊了。有人对我说:你彪啦。有人对我说:你不应该回来。同学的问候各种各样,总而言之,我回国的确太快,快得我自己都来不及反应。太武断?太潇洒?还是不负责任!
从国庆那天开始到现在,7天了吧。我一直在反思自己的所作所为,一年以来的所作所为,想了好多。老姑告诉我说:爱情里没有谁对谁错。这七天我也在想,真是这个样子吗?我现在想,觉得有道理而已,要说对,谈不上,错的话,其实找自己的错误算是找对了。一年以来,我在忙些什么?出国。她也在忙着出国,而且也在帮我忙着。忙着,就忽略了我们之间最起码的感情,那种可以相互交流彼此内心世界的机会。是啊,一年多了,没有一次静下心来与她畅谈,谈论最近发生的事情,谈论最近哪里做的不好,有什么地方需要改正,谈论将来有什么打算,谈论一些有趣的事情。没有一次,对于两个谈了一年的恋人来说,真的好可悲。我们少了心灵上的交流,可以说是交心吧。一起做过的事情的确不少,赏明月,散步,看电影,学习,赏樱花...太多太多,在这些故事之后再多一点交流,多一点呵护就好了,然而,晚点了。人总是这样,在想以前如果怎样会有多好,我自嘲一下,挫折会让我慢慢长大吧,再忙再累,不要忘了替对方想一下,好好照顾她,呵护她,自己生活的也会很幸福快乐。
在英国的日子里,虽然时间很短,我也想了许多,最后我决定离开。我想我留在这里,作为好朋友,我们可以一起做饭,互相照顾,这也是一种幸福,彼此都可以安然的去生活。学习当中遇到问题,也可以互相帮助解决。毕竟两个人共同去解决一个问题总比一个人解决问题来的容易一些。更何况,为了今天,我们共同准备了一年,不光是我们,是我们两家人,我一走未免太不值得了,太轻率了。我留在这里,可以感受英国的生活,文化,我也可以跟同学一起学习,可以用心去做一些事情去感动她。但是我在这里不会快乐,我为我这一年来的所做所为而感到内疚,感到惭愧。扪心自问,真的,这样好的女孩子,我却没有去全心全意疼爱她。可以给自己找理由,太忙,有事情,不需要疼爱。现在想想,有些东西其实是没有原因的,她可以为了维护我的尊严去跟父母辩论,她可以为了我去把他爸爸的新手机要来...她为了我做的实在是太多太多。不管做了什么,我根本就没有理由去找她的错误,是自己忽略了她的内心感受,没有跟她保持心灵的沟通。我们在英国住的很近,应该说是一年来住的最近的时候,我们的心也走到了最远。
我是个好孩子,但不是一个好的男朋友。男朋友应该时时刻刻替女朋友想的,就像女朋友总是在替自己想一样。男朋友应该想的更多一些,多一些问候,关怀,也要让女朋友多一些成就感,感受到在自己内心的价值和地位,没有她真的世界太冷了,我要做的,痛定思痛,好好对待未来。
我回国了,我带着对自己的遗憾回国了。我这一年的准备没有白费,但是我这一年的心白费了,因为这一年以来我一直在忽略另一颗一直在操劳着的心,我让她失望了,对不起,所以我不要在英国,我在英国感到自己内心在受责备。回来彻底反省一下自己吧,不要在迷途陷得太深。爱到最后是宽容,我没有宽容,有的是对未来的渴望,渴望自己会成长起来,懂得去爱一个人,懂得去珍惜一个人,懂得去追求一个人,全靠自己的力量去拼搏。
爱一个人是幸福的,想念一个人也是幸福的。从校园到实验室,从被子到杯子,从手机到电脑,从短信到录音到照片,从中国到英国。
自觉是一个不善于表达的人,还是用微笑来面对这一切吧,内心的感受写出来会好一些,对自己的过去,现在和未来也有一个交代。2008国庆,我们在一起了,2009国庆我们也在一起,只是很快分开了。2010国庆我想明白了怎样去爱一个人,我会长大的,我们会在哪里?国庆,我很期待,国庆,国家长大一岁,我也会,要成长一岁。国庆,真好。
今天的歌曲是:爱的代价
May 04

有时候

     有时候,我应该写点,或是在博客里,让我们一同品味,或是在周记本上,留给自己的回忆。
   今天五四,青年节,魏导组织爬山。山不在高,有仙则名;水不在深,有龙则灵,二者结合,曰二龙山。以前我并没有听说过世间还有此山,google之,在哈尔滨,加青岛限制之,原来就在海边。
  出发吧,说浩浩荡荡一点都不过分,八辆轿车30多人一起上路,真是出乎小人的意料,原来在车队里的感觉就是这样的嘛。20分钟的车程,来到龙山脚下。下车,落地,请换鞋,我们要走山路了。哦,原来还有路可以走的,想起一句话:车到山前必有路。
  原来已经封山,无奈地很。没关系,人到山下必有道,不到山顶,谁说罢休。自然,我们要自己给自己开路上山了,开道之难,难于hello world,怎堪一个勇字了得(想起了王学勇,老同学好)。我们就是从树林当中,在没有路的情况下,在无人指引的条件下,翻越了一颗又一颗的小石头,才来到山顶的。山高,风不大,可见度很好,海很蓝,天很灰
(想到s.h.e)。现在感觉还好,有山,二龙山周围都是山,我很纳闷,山顶上的那么一块大石头,跟刻有中国海洋大学的那块石头差不多大是怎么就自己在山顶上的呢,有人说是风化的,顿时我明白了,原来金字塔也是风化而来的;有水,昨天刚下过雨,山上还有小溪流下,纯真的崂山泉水,有人打了一瓶,结果这么纯的一瓶水,就因为不知道是什么原因,所以大家都没人喝,无奈,当洗脚水吧。听着潺潺的溪水,听到了姬神;有草,新绿,比较适合放牛,我当时就是这样想的,她的奶水肯定比伊利纯牛奶还伊,比蒙牛奶还蒙;有木,这片树林大都是松树,高的很,可见护林防火护防的很不错,郁郁葱葱,雨雨风风,花花夜夜,年年暮暮朝朝,这是生命力的象征;还有仙,在哪里,就在这儿。这个时候我很快乐,高山流水遇知音,在哪里?高山流水觅知音。偶尔有清脆的鸟叫,想起了bandari音乐的清纯。站在山顶的感觉,爽!
  快12点了,下山吃饭。喝酒的时候我就觉得现在市场上缺一种饮料:跟啤酒一个颜色,有泡泡的饮料。有机会可以一试。喝酒还是老规矩,敬来敬去,现在的我还有点接受不了,为什么。真罗嗦。
  下午,打牌,不好意思,我跟魏导干起来了,还好,没有重伤,因为我火力不够猛。
  现在,我在写,听着梁咏琪的《有时候》(点击下载),让我想起了许多的有时候,不过不是那么清晰了都,有照片可参照的,我也都看了。还是那句话,用心品味,生活本来有滋有味。所以我想把今天的经历写下,用有时候来品味我的太多的有时候。
  有时候交谈变得空洞,沉默却像沟通;
  有时候孤独可以寂寞,也可以是自由;
  能安慰自己的人比较容易快乐。
April 15

[转]一个计算机高手的成长

2008-01-29 22:58
      每看一次这篇文章,除了佩服就是感动。 
      这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能 够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向,所以把我的经历写出来与大家共勉,希望能给刚入行的朋友们一点点帮助。一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了。
      大一开学前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着了,其实当已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前学完了PASCAL,那时既没有计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30多页,我的C语言、C++、VC都是在这样的条件下入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的Win3.1,我的那点DOS知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。
大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是P166MMX,我安装一个Windows NT4.0需要一个通宵,编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之后它才寿终正寝。
      大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所,实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
  刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做CMM。这些我听过很多,但是很多事情到国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。话说远一些,国内软件开发行业有一个怪圈,很多人觉得VC > Delphi > VB,真是很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话,只能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。至于有人认为C++ > C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工作。你的设计体现了你的技术层次。这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
      写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第一次流泪,我心里很难受也很感动。由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多知识,而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由于代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务器的软件,并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP/IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些开发工具的约束,我终于看到了另外一片天空。我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件知识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍,并打算离开通信行业,进入IC设计相关领域。
April 07

linuxrc

kernel启动后,执行/root_china/linuxrc脚本文件,接下来执行/root_china/usr/etc/rc.local脚本文件。这两个文
件我以前没去管是什么意思,起到什么作用,直到今天。
/root_china/linuxrc:
#!/bin/sh
echo "mount /etc as ramfs"
/bin/mont -n -t ramfs ramfs /etc  //将/etc目录mount成可写的ramfs文件系统
/bin/cp -a /mnt/etc/* /etc        //将/mnt/etc目录下的文件拷贝到/etc目录下
echo "re-create the /etc/mtab entries"
#re-create the /etc/mtab entries
/bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/2 /  //将/dev/mtdblock/2 mount成根文件系统
/bin/mount -f -t ramfs ramfs /etc
exec /sbin/init      //执行脚本档 /usr/etc/rc.local
1. /bin/mount -n -t ramfs ramfs /etc
这句话的作用加载一个ramfs作为/etc目录。这样/etc就是一个可写目录。看这个脚本,得出根文件系统是一个
cramfs(只读可压缩文件系统),而/etc作为系统运行配置文件的存放地点,可能会写一些运行状态在这里,linuxrc第一件事情就是将一个ramfs mount到/etc只读目录中,使得/etc/目录可写,指定参数-n的目的是告诉mount不要写/etc/mtab(这个文件存放当前系统mount了的所有文件系统)。因为现在/etc/目录还是只读,所以这次mount不要写这个文件,否则会失败。ramfs在哪里?在 /etc/fstab文件中应该有ramfs一项,mount会去找这项,如果没有,mount会失败。后面就执行不下去。
2. /bin/cp -a /mnt/etc/* /etc
/etc成为可写目录后,将所有/mnt/etc中的配置文件拷贝到/etc/中,这说明ramfs可能是一个空的ramfs,没有配置文件,或者配置文件比较老。 同时也说明这个系统是一个只读系统,每次系统运行中写入的配置不会保留。
将以前mount的那些信息重新写到/etc/mtab中,命令就是下面这些。
3. /bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /
/bin/mount -f -t ramfs ramfs /etc
这些命令只是将这些mount信息写到/etc/mtab中,不会实际去mount这些block device,说明你的根文件系统依然是以前的那个/dev/bon/2
4. exec /sbin/init
执行根文件系统中的init执行程序,使其成为1号进程。shell正式运行。

<转>Nor Flash上建立一个uClinux的Cramfs根文件系统的一般步骤

文件系统是操作系统中用来管理用户文件的内核软件层。文件可能存在于磁盘、网络或者是一些虚拟的文件。文件系统包括根文件系统和建立于内存设备之上文件系统。根文件系统是uClinux系统的核心部分,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读写结果的区域。由于嵌入式设备中Flash资源很紧张,如何有效地使用有限的存储空间是嵌入式开发者必须考虑的,合适的文件系统格式是解决这一问题的关键所在。本文讨论了只读压缩CramFS文件系统的特点,并详细的说明了Nor Flash上建立一个uClinux的Cramfs根文件系统的一般步骤。
采用的是宿主机+目标板的开发模式。在开发的时候,将Boot Loader烧入AM29LV160DB的1-5扇区;将Linux内核映象文件zImage烧入6-17扇区;将CramFS文件系统映象文件烧入18 -35扇区。
CramFS(Compressed Rom File System)是Linux Torvalds在Transmeta任职时,所参与开发的文件系统。它是针对Linux内核2.4之后的版本所设计的一种新型只读文件系统,采用了 zlib 压缩,压缩比一般可以达到1:2,但仍可以作到高效的随机读取,Linux系统中,通常把不需要经常修改的目录压缩存放,并在系统引导的时候再将压缩文件解开。因为Cramfs不会影响系统的读取文件的速度,而且是一个高度压缩的文件系统。因此非常广泛应用于嵌入式系统中。
在嵌入式的环境之下,内存和外存资源都需要节约使用。如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先要把Flash上的映像文件解压缩到内存中,构造起RAMDISK环境,才可以开始运行程序。但是它也有很致命的弱点。在正常情况下,同样的代码不仅在Flash中占据了空间(以压缩后的形式存在),而且还在内存中占用了更大的空间(以解压缩之后的形式存在),这违背了嵌入式环境下尽量节省资源的要求。
使用CramFS文件系统就是一种解决这个问题的方式。CramFS是一个压缩格式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。CramFS中的解压缩以及解压缩之后的内存中数据存放位置都是由CramFS文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便,又节省了存储空间。
一个完整的cramfs文件系统通常包含以下几个目录:
/linuxrc 启动脚本文件,由Boot Loader核心命令行确定init=/linuxrc,加载/etc目录为ramfs,(cramfs为只读文件系统),拷贝/mnt/etc到 /etc,配置文件目录重新加载根文件系统和/etc文件系统,执行init进程。
/bin 引导启动所需的命令或用户可能用的命令。
/sbin 系统管理员服务程序,其中最重要的是供内核初始化之后执行的/sbin/init进程,系统启动时由init解释并运行/etc/inittab, inittab将指导int去调用一个系统初始化程序/etc/init.d/rcS。
/etc 特定机器的配置文件以及用户数据存放目录,其中的所有内容是在内核运行后,由linuxrc 从/mnt/etc拷贝得到的。
/lib 文件系统上的程序所需的动态库。
/dev 驱动程序存放目录,可以在这里存放自己编写的驱动程序。
/usr 用于存放用户程序和配置文件的目录,可以根据需要进行设置。目录下的/usr/etc/rc.local执行本地所需要的初始化,如安装核心模块,进行网络,运行应用程序,启动图形界面等。/etc/modules.conf在系统运行期间自动加载模块。
/mnt 用于设备安装的目录。/mnt/etc/init.d/rcS完成各个文件系统的Mount,执行/usr/etc/rc.local;通过rcS可以调动dhcp程序配置网络。rcS执行完以后,就会打开Shell。
/proc 系统状态文件目录, 目录中的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。尽管 /proc 中的文件是虚拟的,但它们仍可以使用任何文件编辑器或像'more', 'less'或 'cat'这样的程序来查看。
Cramfs文件系统的移植过程
文件系统是紧跟uCLinux内核放置,由内核加载,主要存放用户应用程序和配置信息。CramFS文件系统的基本组成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、链接库、图形界面程序和用户应用程序等。本节将介绍移植CramFS文件系统的具体操作方法。
想要在系统中提供CramFS的能力,我们必须要在编辑uCliunx内核时把支持CramFS的选项加入。尽管uCLinux可以以模块的形式加载各种类型的设备驱动上,但我们选择直接把设备驱动及CramFS文件系统静态地编译进内核中。
在Memory Technology Devices (MTD)选项中进行配置:
Memory Technology Device (MTD) support[Y/m/n/?] Y 内存技术设备支持
MTD partitioning support [Y/m/n/?] Y 支持MTD分区
Direct char device access to MTD devices[Y/m/n/?] Y MTD字符设备直接访问
Caching block device access to MTD devices[Y/m/n/?] Y MTD块设备缓冲访问
在File Systems选项中进行配置:
Compressed ROM file system support [Y/m/n/?] Y ROM文件系统的支持
完成上述修改并编译后,完成uCliunx内核对CramFS文件系统的支持。
4.2、 拷贝需要加入的其他文件和链接库
(1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发的。Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的vi编辑器,系统不可或缺的/sbin/init程序,以及其他诸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等。而所有这一切功能却只有区区1M左右的大小,Busybox已经成为构建嵌入式Linux文件系统的必备软件。
首先我们从官方网站(
http://www.busybox.org/)上下载BusyBox 的版本1.0.0。
#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig
下面是需要编译进busybox的功能选项,其他的可以根据需要自选。
Build Options
[*] Build BusyBox as a static binary (no shared libs)
这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必需要其他库文件才能运行,在单个linux内核不能使他正常工作。
[*] Do you want to build BusyBox with a Cross Compiler
选择你自己定义的交叉编译环境。
Installation Options
[*] don’t use /usr
这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖系统原有的命令。选择这个选项后,make install后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接。
其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。编译BusyBox,如果能成功编译 BusyBox,就将编译好的busybox 复制到CramFS文件系统的/bin 目录下,然后创建常用命令的建立快捷方式。建立快捷方式很简单,只要建一个符号链接,比方ln -s /bin/busybox /bin/ls,那么,执行/bin/ls的时候,busybox 就会执行ls的功能,也会按照ls的方式处理命令行参数。
(2)、拷贝一些管理员控制程序到/sbin目录下,最重要的就是要包含一个init命令,可以使用busybox提供的系统工具。比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。
(3)、拷贝应用程序运行时所需要的库到/lib,库文件可以从PC机上的交叉编译工具安装目录下拷贝,如libc-2.2.2.so、libcryt- 2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,为部分相应库建立快捷方式,提供一些应用程序按快捷方式名称调用。值得注意的是C库要采用C库的版本glibc, glibc位于/lib/libc.so.6。
利用mkcramfs工具生成cramfs压缩文件系统
一般情况下都要把已经规划好的目录结构转换成一个映象文件,创建Cramfs文件系统需要mkcramfs工具,mkcramfs能把相应的Cramfs 目录树压缩成为单一的映象文件,这个映象文件就是我们需要移植的文件系统。Mkcramfs的命令格式为:
Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName OutFile
#mkcramfs root cramfs.Img
用以上的命令就可以生成我们需要的cramfs文件系统映象文件,我们可以发现原本为2.36Mbytes大小的目录内容,被压缩成一个 1.08Mbytes的CramFS文件系统映象文件, 通过vivi或测试程序将其写入Flash中就可以验证是否移植成功。

嵌入式Linux文件系统及其存储机制分析

      嵌入式系统与通用PC机不同,一般没有硬盘这样的存储设备而是使用Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置,本文重点:嵌入式系统中常用的存储设备及其管理机制及常用的基于FLASH的文件系统类型。
      1.嵌入式系统存储设备及其管理机制分析
      构建适用于嵌入式系统的Linux文件系统,必然会涉及到两个关键点,一是文件系统类型的选择,它关系到文件系统的读写性能、尺寸大小;另一个就是根文件系统内容的选择,它关系到根文件系统所能提供的功能及尺寸大小。嵌入式设备中使用的存储器是像Flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置。Flash是目前嵌入式系统中广泛采用的主流存储器,它的主要特点是按整体/扇区擦除和按字节编程,具有低功耗、高密度、小体积等优点。目前,Flash分为NOR, NAND两种类型。NOR型闪存可以直接读取芯片内储存的数据,因而速度比较快,但是价格较高。NOR型芯片,地址线与数据线分开,所以 NOR型芯片可以像SRAM一样连在数据线上,对NOR芯片可以“字”为基本单位操作,因此传输效率很高,应用程序可以直接在Flash内运行,不必再把代码读到系统RAM中运行。它与SRAM的最大不同在于写操作需要经过擦除和写入两个过程。NAND型闪存芯片共用地址线与数据线,内部数据以块为单位进行存储,直接将NAND芯片做启动芯片比较难。NAND闪存是连续存储介质,适合放大文件。擦除NOR器件时是以64-128KB的块进行的,执行一个写入/擦除操作的时间为5s;擦除NAND器件是以8- 32KB的块进行的,执行相同的操作最多只需要4ms。NAND Rash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。NOR flash占据了容量为1—16MB闪存市场的大部分,而NAND flash只是用在8—128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储。寿命(耐用性),在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8 倍,每个NAND存储器块在给定的时间内的删除次数要少一些。所有嵌入式系统的启动都至少需要使用某种形式的永久性存储设备,它们需要合适的驱动程序,当前在嵌入式Linux中有三种常用的块驱动程序可以选择。
      ● Blkmem驱动层:Blkmem驱动是为uclinux专门设计的,也是最早的一种块驱动程序之一,现在仍然有很多嵌入式Linux操作系统选用它作为块驱动程,尤其是在uClinux中。它相对来说是最简单的,而且只支持建立在NOR型Flash和RAM中的根文件系统。使用Blkmem 驱动,建立Flash分区配置比较困难,这种驱动程序为Flash提供了一些基本擦除/写操作。
      ● RAMdisk驱动层:RAMdisk驱动层通常应用在标准Linux中无盘工作站的启动,对Flash存储器并不提供任何的直接支持, RAM disk就是在开机时,把一部分的内存虚拟成块设备,并且把之前所准备好的档案系统映像解压缩到该RAM disk环境中。当在Flash中放置一个压缩的文件系统,可以将文件系统解压到RAM,使用RAM disk驱动层支持一个保持在RAM中的文件系统。
      ● MTD驱动层:为了尽可能避免针对不同的技术使用不同的工具,以及为不同的的技术提供共同的能力,Linux内核纳入了MTD子系统 (memory Technology Device)。它提供了一致且统一的接口,让底层的MTD芯片驱动程序无缝地与较高层接口组合在一起。JFFS2, Cramfs, YAFFS等文件系统都可以被安装成MTD块设备。MTD驱动也可以为那些支持CFI接口的NOR型Flash提供支持。虽然MTD可以建立在RAM上,但它是专为基于Flash的设备而设计的。MTD包含特定Flash芯片的驱动程序,开发者要选择适合自己系统的Flash芯片驱动。Flash芯片驱动向上层提供读、写、擦除等基本的操作,MTD对这些操作进行封装后向用户层提供MTD char和MTD block类型的设备。MTD char类型的设备包括/dev/mtd0, /dev/mtdl等,它们提供对Flash原始字符的访问。MTD block类型的设备包括/dev/mtdblock0,/dev/mtdblock1等,MTD block设备是将Flash模拟成块设备,这样可以在这些模拟的块设备上创建像Cramfs, JFFS2等格式的文件系统。MTD驱动层也支持在一块Flash上建立多个Flash分区,每一个分区作为了一个MTD block设备,可以把系统软件和数据等分配到不同的分区上,同时可以在不同的分区采用不用的文件系统格式。这一点非常重要,正是由于这一点才为嵌入式系统多文件系统的建立提供了灵活性。
      2. 基于Flash的文件系统
      鉴于Flash存储介质的读写特点,传统的Linux文件系统己经不适合应用在嵌入式系统中,像Ext2fs文件系统是为像IDE那样的块设备设计的,这些设备的逻辑块是512字节、1024字节等大小,没有提供很好的扇区擦写支持,不支持损耗平衡,没有掉电保护,也没有特别完美的扇区管理,这不太适合于扇区大小因设备类型而划分的闪存设备。基于这样的原因,产生了很多专为Flash设备而设计的文件系统,常见的专用于闪存设备的文件系统如下:
      ● Romfs
传统型的Romfs文件系统是最常使用的一种文件系统,它是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存; 它按顺序存放所有的文件数据,所以这种文件系统格式支持应用程序以XIP方式运行,在系统运行时,可以获得可观的RAM节省空间。uClinux系统通常采用Romfs文件系统。
      ● Cramfs
      Cramfs是Linux的创始人Linus Torvalds开发的一种可压缩只读文件系统在Cramfs文件系统中,每一页被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM 空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时, Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性;但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装别的文件系统里。使用mkcramfs工具可以创建Cramfs映像。
      ● Ramfs/Tmpfs
Ramfs也是Linus Torvalds开发的,Ramfs文件系统把所有的文件都放在RAM里运行,通常是Flash系统用来存储一些临时性或经常要修改的数据,相对于 ramdisk来说,Ramfs的大小可以随着所含文件内容大小变化,不像ramdisk的大小是固定的。Tmpfs是基于内存的文件系统,因为 tmpfs驻留在RAM 中,所以写/读操作发生在RAM 中。tmpfs文件系统大小可随所含文件内容大小变化,使得能够最理想地使用内存;tmpfs驻留在RAM,所以读和写几乎都是瞬时的。tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
      ● JFFS2
JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是一个可读写的、压缩的、日志型文件系统,并提供了崩溃/掉电安全保护,克服了JFFS的一些缺点:使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度;支持数据压缩;提供了“写平衡”支持;支持多种节点类型;提高了对闪存的利用率,降低了内存的消耗。这些特点使JFFS2文件系统成为目前Flash设备上最流行的文件系统格式,它的缺点就是当文件系统已满或接近满时,JFFS2运行会变慢,这主要是因为碎片收集的问题。
      ● YAFFS
YAFFS/YAFFS2是一种和JFFSx类似的闪存文件系统,它是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。和JFFS2相比它减少了一些功能,所以速度更快,而且对内存的占用比较小。此外,YAFFS自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。YAFFS2支持大页面的NAND设备,并且对大页面的NAND设备做了优化。JFFS2在NAND闪存上表现并不稳定,更适合于NOR闪存,所以相对大容量的NAND闪存,YAFFS是更好的选择。
December 31

Talking about 最美的太阳

 

Quote

最美的太阳
    2007年的最后那么一点点,我该留下些什么,虽然又是寒冬中平凡的一天。今天的落日,伴着天空中那片片久违的浮云;落日的余辉,在这被风主宰的冬季尽显他的光芒,没有了中午所感受到的特有的温暖,剩下的只有为2007画上一个火红的句号,最美的太阳。
    仅仅是在这一天的这个时刻,一种高亢的心情在荡漾。从图书馆里走出来,北风挡住了我的去路,来青岛4年多了,从来没有感受到被风吹的滋味是如此的爽快,爽的我更想在这短暂的路上再多呆一会,多希望这风吹走我一切的烦恼,吹走我一切的怨恨和悲伤,带来我的快乐,我的希望,吹奏起我独有的旋律,这样想,显得这所谓的寒风是多么的脆弱,如果它这能办到,那时的我心里只有你了,当然,这多半取决于我自己。
    就在3天之前,一个不是很熟悉的人对我说,生活里应该充满阳光。交往不是很多,对我说这样的话,当时的我不知道如何去应答。过后细想,充满阳光的日子会很灿烂,更重要的会更快乐!
    看过smallville。clark作为一个外星人,有着非凡的能力,速度和力量,当然更多的还在成长当中。这些能力所需要的能量居然是来自于太阳。导演这样安排不知道是否还有其他的意思,我感觉他在向我们传递一些信息:首先,地球上的所有的一切能源归根结底来源于太阳;其次,生活中不应该没有阳光,没了阳光就没了能量,失去了前进的动力,那样便会腐朽。
    我的世界,因为有你才会美,我的天空,因为有你不会黑,给我快乐,给我宽容,我能展翅高飞。

最美的太阳

    2007年的最后那么一点点,我该留下些什么,虽然又是寒冬中平凡的一天。今天的落日,伴着天空中那片片久违的浮云;落日的余辉,在这被风主宰的冬季尽显他的光芒,没有了中午所感受到的特有的温暖,剩下的只有为2007画上一个火红的句号,最美的太阳。
    仅仅是在这一天的这个时刻,一种高亢的心情在荡漾。从图书馆里走出来,北风挡住了我的去路,来青岛4年多了,从来没有感受到被风吹的滋味是如此的爽快,爽的我更想在这短暂的路上再多呆一会,多希望这风吹走我一切的烦恼,吹走我一切的怨恨和悲伤,带来我的快乐,我的希望,吹奏起我独有的旋律,这样想,显得这所谓的寒风是多么的脆弱,如果它这能办到,那时的我心里只有你了,当然,这多半取决于我自己。
    就在3天之前,一个不是很熟悉的人对我说,生活里应该充满阳光。交往不是很多,对我说这样的话,当时的我不知道如何去应答。过后细想,充满阳光的日子会很灿烂,更重要的会更快乐!
    看过smallville。clark作为一个外星人,有着非凡的能力,速度和力量,当然更多的还在成长当中。这些能力所需要的能量居然是来自于太阳。导演这样安排不知道是否还有其他的意思,我感觉他在向我们传递一些信息:首先,地球上的所有的一切能源归根结底来源于太阳;其次,生活中不应该没有阳光,没了阳光就没了能量,失去了前进的动力,那样便会腐朽。
    我的世界,因为有你才会美,我的天空,因为有你不会黑,给我快乐,给我宽容,我能展翅高飞。
November 29

Job Description:

Job Description:


IMS service and application development engineer:

  • Software Development Engineer: software design and coding, software deliverable testing, bug fix etc. 
  • Testing Engineer: testing documents design and writing-up, design the system network architecture to proceed the testing, testing planning and execution, Analyze the symptom to isolate the problem, etc.

Candidate Requirements:

  1. Master in telecommunication, electronic engineering, computer science, etc. Practical knowledge with Unix/Linux.
  2. Java Programming experience.
    • Strong knowledge of Java programming, experience in Java related projects is highly preferred. Familiar with multi-threads, network programming.
    •  Familiar with XML and related communication protocols, such as XMLRPC, SOAP, etc.
    • Strong knowledge of database, experience in MySQL related projects is highly preferred.
  1. Familiar with telecommunication network, data networking, NGN concept. Familiar with some of following areas:
    • Call control, services.
    • VoIP protocols (SIP, Diameter, etc.)
    • 3GPP, 3GPP2, ITU-T, ETSI, IETF standards
  1. Passion in architecture/coding/testing. Insight to design quality product. Insight locate the issue quickly with needed testing methodology (testing equipment/script)
  2. With full innovative mindset. Creative in designing and testing a new product.
  3. Excellent team working spirit and interpersonal communication skills.
  4. Good English skills (understanding, expressing, documenting. Level CET-6 is preferred) 

November 23

a trained animal ,an educated person

There is an expression in the English language:"Jumping through hoops."
In the circus,the animal trainer hold out a hoop,and the animal jump through it.Why does the animal jump through it?To get a reward.An animal that does this trick is called "a trained animal."
For many students,education means jumping through hoops like a trained animal.The hoops are the assignments.The rewards are the grades and credits.For such students,the assignment has no meaning.It is just something they must to do to get a grade.They will be educated.But they are wrong.There is a difference between education and training.
An educated person can think for himself.He can analyze,adapt to new situations,develop new ideas,make judgements,lay plan,and have a vision of the future.But a person who is merely trainedcan only follow his training,like a circus animal,doing exactly what he was taught to do.
Who am I?I am an animal.But I want to go into the future with an independent mind,with the ability to think deeply,analyze,innovate,plan and create.