New

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  21 Posts :: 0 Stories :: 4 Comments :: 0 Trackbacks

2011年12月15日 #

值得一看的一堆语录

昨天在某空间闲逛就转载了这个,结果被疯转!现在,保存到博客上,分享给更多的人。

同时,分享一个《乔布斯在斯坦福演讲》

1、98年 马化腾等一伙凑了50万创办了腾讯 没买房;98年 史玉柱 借了50万搞脑白金 没买房;99年 丁磊用50万创办163.com 没买房;99年 陈天桥炒股赚了50万 创办盛大 没买房;99年 马云等18人凑了50万 注册阿里巴巴 没买房。如果当年他们用这50万买了房,现在估计还在还着银行的贷款吧。

2、年轻的我们必须懂得:1、你不勇敢,没人替你坚强。2、没有伞的孩子必须努力奔跑!3、自己选择的路、跪着也要把它走完。4、不要生气要争气, 不要看破要突破,不要嫉妒要欣赏,不要拖延要积极,不要心动要行动。5、宁愿跑起来被拌倒无数次,也不愿规规矩矩走一辈子。就算跌倒也要豪迈的笑

3、人生三大遗憾:不会选择,不坚持选择,不断地选择;人生三不斗:不与君子斗名,不与小人斗利,不与天地斗巧;人生三修练:看得透想得开,拿得起 放得下,立得正行得稳;人生三大陷阱:大意,轻信,贪婪;人生三大悲哀:遇良师不学,遇良友不交,遇良机不握。人生三大不争:不与领导争锋,不与同事争 宠,不与下级争功

4、一个人,如果你不逼自己一把,你根本不知道自己有多优秀。一个人,想要优秀,你必须要接受挑战;一个人,你想要尽快优秀,就要去寻找挑战。一个人,敢听真话,需要勇气;一个人敢说真话,需要魄力。一个人的知识,通过学习可以得到;一个人的成长,必须通过磨练。

5、【最温暖的八种食物】①早上醒后来的一个煎蛋;②上班出门前塞在包里的一个苹果;③加班深夜回家后的一碗热汤;④睡觉前的一杯牛奶;⑤伏案工作时的一杯热茶;⑥生病卧床时的一碗白粥;⑦喝闷酒的时候一碟小菜;⑧酒醒后的一碗清汤面。《你吃到过几样?》

6、网易CEO丁磊说:“千万不要以为我是抱着一个伟大的理想去创办一个伟大的公司,我从来没有远大的理想,也没有想要成为一个很有钱的人。创办网 易时我只是想做一个小老板,就想有个房子有辆汽车,不用准时上班,可以睡懒觉。 我的梦想也是那么简单。”丁磊的话很实在。但是,现在创业已经不是那么简单了。

7、人脉中需有的十种职业人:1 票贩子、 2旅行社、3律师、4 人才市场/猎头公司、 4 银行、5 当地公务人员/警察 、6 名人、7 保险/金融/理财专家、8 维修人员、9 媒体联络人、10 医生/护士/养生专家。《你认识这十种人吗?用心经营您的人脉关系吧!》

8、【做人的底线】(1) 不做第三者,即使再喜欢(2) 骗我可以,如果被我知道超过两次,请你有多远滚多远(3) 如果你拿我不当回事,我会以同样方式对你(4) 我可以装傻,但别以为我真傻(5) 我可以容忍,但别超过我的底线(6) 我不是没脾气,只是不轻易发脾气(7) 任何真话,我都能接受。

9、15岁觉得游泳难,放弃游泳,到18岁遇到一个你喜欢的人约你去游泳,你只好说“我不会耶”。18岁觉得英文难,放弃英文,28岁出现一个很棒 但要会英文的工作,你只好说“我不会耶”。人生前期越嫌麻烦,越懒得学,后来就越可能错过让你动心的人和事,错过新风景。—蔡康永

10、25岁的英国士兵Barry Delaney穿着鲜亮的绿色吊带短裙和粉红腿套,在同袍好友Kevin Elliott的葬礼上哭的一塌糊涂,他俩是同在阿富汗执行任务的好友.他们之前有一个约定:无论谁先不幸西归,另一个都要穿女装亮相对方的葬礼,为那里 灰暗的悲伤带去一丝亮色,很感人,一诺千金。《伟大的友谊,你有这样的朋友么?》

11、慢慢成熟的标志:1早上无论多困,也会马上起床上班;2喜欢吃家常便饭多于外面的餐馆;3喜欢隐身,网络签名长时间不更改;4喜欢看新闻多于 看八卦;5打电话给朋友的次数少了;6可以让你开心的人或事,越来越少了;7没结果的事情,渐渐就少做了;8低落的时候选择一个人呆着。

12、美国旧金山有一老头查克费尼,穿旧衣服,戴烂手表,住出租屋,挤公交车。他为美国教育捐出了近20亿美金,还希望死前把仅有的40亿美金全部 捐献给社会。在北京有个大富豪陈五喜,开豪车,住华宅,吃大餐,手上戴大钻戒,投资房地产,同时还在民政部门领取低保,8年间共得到10万元的社会救助。 《中美差异》

13、1931年的1月30日是世界现代史上灾难的一天,阿道夫·希特勒被任命为德国总理。他的名言:“消灭一个民族,首先瓦解它的文化;要瓦解它 的文化,首先消灭承载它的语言;要消灭这种语言,首先先从他们的学校里下手。”,当今的中国大学里无论什么专业,英语是必修课,汉语却不是。

14、尼古拉斯.科波拉,他的亲叔叔叫弗朗西斯.科波拉,名满天下的《教父》的导演。这个小伙子后来去好莱坞混,为了以自己的实力打天下,故意改名为尼古拉斯.凯奇。不想沾任何叔叔的光。中美文化的差异就在于此。《我爸是李刚》

15、让你成熟至少5岁的8句话】1、如果你不喜欢现在的工作,要么辞职不干,要么闭嘴不言。2、学会忍受孤独。3、不要像玻璃那样脆弱,做个内心 强大的人。4、管住自己的嘴巴。5、会创造机会。6、若电话老是不响,你该打出去。7、不要草率结婚。8、写出你一生要做的事情,把单子放在皮夹里,经常 拿出来看。

16、今年,年仅26岁的Facebook的创始人马克·扎克伯格,以40 亿美元身价登上2010 福布斯全球最年轻富豪榜榜首。目前已把自己过半财产捐赠给慈善事业。扎克伯格拥有亿万身家,但他至今仍和华裔女友普莉希拉·陈生活在一套租来的住房里,每 天走路或骑自行车上班。

17、澳大利亚老板帕尔默,他说:人每次只能睡一张床,吃一顿饭,驾一辆车,跟一个女人一起,所以我决定分一些给大家。为了感谢员工帮助他将企业扭 亏为盈,他送给员工55辆奔驰,让750名员工出国度假,宴请2000名员工及家属。员工们兴奋的说,这样的老板,令我倾120%力量去工作。《神奇的领 导力,无处不在》

18、1992年一艘从中国出发的货船在太平洋上遭遇强烈风暴,船上一个装满2.9万只塑料玩具鸭的集装箱坠入大海。令人难以置信的是,其中1万多 只玩具鸭组成的“鸭子舰队”在海洋上漂流了14年之后,竟抵达英国海岸。后来,这些鸭子售价激涨百倍。一个人的价值并不在其出身,而在于他谱写什么样的人 生履历。。

19、80后/90后的通病:1、近视;2、月光族;3、喜欢Money;4、从不锻炼身体;5、 一日三餐没有规律;6、路盲,没有方向感;7、搞不清楚自己的血型;8、有一颗狠宅狠宅的心;9、做事情都是三分钟热度;10、经常午夜12点以后才睡 觉。《三条没有你就是神了》

20、母亲一生的六个谎言:1.(童年时)快吃吧,我不饿;2.(少年时,深夜做针线活)快睡吧,我不困;3.(高考路上)快喝吧,我不渴;4. (参加工作,母亲生病时)你赶快去工作吧,我很好;5.(给母亲寄钱)你用,我有钱;6.(买房接她住)城里,我不习惯。愿天下的母亲健康长寿!《到了毕 业的这个时候,更能体会妈妈的良苦用心,好好去爱她!》

21、【永远都不要做的事】1,跟知己上床 2、和情人结婚 3、把同事当成朋友4、到朋友公司打工 5、在上司面前知无不言 6、轻信上司的许诺 7、喜怒哀乐都挂在脸上 8、在人堆里大声讲手机 9、习惯于给自己找借口 10、超车过去,看开着车有着窈窕背影的MM的脸 11、对MM的"字信以为真 12、指望前女友回心转意。

22、【成功者的习惯】1.微笑。2.气质纯朴。3.不向朋友借钱。4.背后说别人好话。5.听到某人说别人坏话时只微笑。6.过去的事不让人全知 道。7. 尊敬不喜欢你的人。9.对事无情,对人有情。10.多做自我批评。11.为别人喝彩。12.感恩。13.学会聆听。14.说话时常用我们开头。15.少说 话。16.喜欢自己。

22、可敬可畏:1.日本电视台用中文进行广播,通知人们地震情况、躲避方式;2.每个家庭都有急救小包,包括药物、手摇式发电收音机;3、9级大 震后东京建筑几乎安然无恙,尤其是人们避难时都井然有序的站在道路两侧尽量不阻碍交通,撤离后无一垃圾。日本是个危机意识、集体主义、纪律性极强的国家!

23、【建立人脉的15个提示】1、学会换位思考;2、学会适应环境;3、学会大方;4、学会低调;5、嘴要甜;6、有礼貌;7、言多必失;8、学 会感恩;9、遵守时间;10、信守诺言;11、学会忍耐;12、有一颗平常心;13、学会赞扬别人;14、待上以敬,待下以宽;15、经常检讨自己。

24、55年前,就读于浙江大学的法国女子丹尼和中国学生袁迪宝相恋,但袁已婚了。1956年,丹尼伤痛中离开了中国。最初还通信,但慢慢就断了来 往。去年初,袁试探着给丹尼写信,竟然回复了。9月,两人重逢第三天在厦门结婚,83岁的丹妮第一次穿上了婚纱。爱,它确实存在。《我相信爱情,你呢?》

25、让你少奋斗10年的工作经验:1不要停留在心灵的舒适区域;2不要把好像、大概、晚些时候、或者、说不定之类的话放在嘴边;3不要拖延工 作;4不要认为理论上可以实施就大功告成了;5不要让别人等你;6不要认为细节不重要;7不要表现得消极;8不要把改善工作能力仅寄托在公司培训上;9不 要推卸责任。

26、人平均一辈子只有7次决定人生走向的机会,两次机会间相隔约7年,大概25岁后开始出现机会,75岁以后就不会有什么机会了。这50年里的7 次机会,第一次不易抓到,因为太年轻,最后一次也不用抓,因为太老,这样只剩5次了,这5次机会里又有两次不小心错过,所以实际上只有3次机会了。——哈 佛的一项调查报告

27、职场情商训练7法:1、把看不顺的人看顺;2、把看不起的人看起;3、把不想做的事做好;4、把想不通的事想通;5、把快骂出的话收回;6、 把咽不下气的咽下;7、把想放纵的心收住;——你不需每时每刻这样做,但这样多做几回,你就会:1、情商高了2、职位升了3、工资涨了4、人爽了。

28、泰勒语录:(1)我拥有一个女人的身体和一个孩子的情感。(2)我只和与我结婚的男人上过床。有多少女人敢这么说?(3)如果有人笨到花 100万美元为我拍张照片,我当然不会笨到拒绝他。(4) 成功是一种了不起的除臭剂。它能带走所有你过去的味道。(5)我不会假装是个平凡的家庭主妇。

29、她原系徐州女排队员,22岁嫁给50岁的cherry获绿卡后离婚、经新男友引荐入读耶鲁大学。96年旅行结识同座的starTV副总,经推 荐在香港实习。97年晚宴她将一杯红酒洒在“传媒大亨”默多克身上,3年后他不顾家人反对而离婚并迎娶她。4年后她以高科技为他生下两个继承数十亿美金的 女儿。她就是邓文迪。《运气总是留给有预谋的人。。》

30、我年轻时曾与我们州最漂亮的女孩约会,但最后没有成功。我听说她后来离过三次婚,如果我们当时真在一起,我都无法想象未来会怎么样。所以,其 实你人生中最重要的决定是跟什么人结婚!在选择伴侣上,如果你错了,将让你损失很多。而且,损失不仅仅是金钱上的。(BY巴菲特:结婚才是人生最大投资)

31、盖茨39岁成世界首富,陈天桥31岁成中国首富,孙中山28岁创办兴中会,王然23岁当局长,孙权19岁据江东,丁俊晖15岁拿世界冠军,邓波儿7岁拿奥斯卡,贝多芬4岁开始作曲,葫芦娃刚出生就打妖怪。你说我们急不急。《我确实着急了!》

32、理查森,男,纽约。从1984年起连续五次投资失败。2007彻底破产,妻离子散,朋友消遁,唯有一条名叫JOOY的狗与其不离不弃,忠伴左 右,陪理查森一同在纽约的风雨街头乞讨。从“JOOY”安详恬静的睡姿中看得出它对主人的无限信任和依靠。有的人,在沧海变成桑田时,表现得还不如一条 狗。《认识的人多了,我就喜欢了狗》

33、≪教父≫经典台词:1、不要让别人知道你的想法。 2、当你说不时,你要使不听上去象是一样好听。 3、让朋友低估你的优点,让敌人高估你的缺点。4、痛苦不象死亡那样无可挽回!5、如果你没有时间和家人在一起,你就永远无法成为真正的男人。 6、永远不要恨你的敌人 ,因为这会影响你的判断力

34、觉得自己做得到和做不到,其实只在一念之间。自己要先看得起自己,别人才会看得起你。一切伟大的行动和思想,都有一个微不足道的开始。有理想 在的地方,地狱就是天堂;有希望在的地方,痛苦也成欢乐。乐观者在困难中看到机会;悲观者在机会中看到苦难。理想的路总是为有信心的人预备着。--﹣李嘉 诚。

35、女名叫安-德纳姆,生在美国堪萨斯。18岁的安在异族通婚非法的年代嫁给了一个非洲黑人留学生。后来,安和丈夫离婚成了单身母亲,她靠食品优 惠券生活,是美国医保系统受害者,在重病时恳求保险公司赔付。然而她的孩子,图片里装扮成海盗的小孩,日后成了美利坚合众国第44任总统,巴拉克-奥巴 马。《不要因为出身而看不起任何人!》

36、阿米尔汗,8岁时出演一部轰动印度的电影,是公认的童星,长大后却一心打网球并获得过网球冠军。21岁爱上邻居家女孩,由于宗教原因两人决定 私奔,现在过着幸福美满的生活。他是演员/制片人/导演。81届奥斯卡最佳影片《贫民窟的百万富翁》就是他担当的制片,2009年一部《三个白痴》震惊全 球,他45岁。《你相信坚持的力量么?》

37、陈佩斯,因为央视出版他的小品而不给钱,较真打官司,遂被彻底封杀。此后陈消失,陈夫妇上山种树,脸朝黄土背朝天,两年获利30万。陈佩斯哭 了,还想再演戏,可依旧被封杀,就砸30万改演话剧,第一部舞台喜剧《托儿》,在全国各地连续演出达120场,票房近4000万元,创造了当今话剧界无法 超越的神话。《我就想说一句话:是金子在哪都发光。。。》

38、她,37岁,癌症晚期。他,42岁,为筹钱给她治病,盗窃一辆电动自行车而入狱,刑期4年。2010年11月12日,他两人在监狱里举行了简 单的婚礼,但这场童话般的婚礼,却让在场的数百位嘉宾感动得潸然泪下。偷辆电动车刑期4年,李刚儿子撞死人才3年。无语!一条人命还不如架电动单车。《生 活在这个让人苦恼的社会。。。》

39、天下只有两种人。比如一串葡萄到手,一种人挑最好的先吃,另一种人把最好的留到最后吃。照例第一种人应该乐观,因为他每吃一颗都是吃剩的葡萄 里最好的;第二种人应该悲观,因为他每吃一颗都是吃剩的葡萄里最坏的。不过事实却适得其反,缘故是第二种人还有希望,第一种人只有回忆。——钱钟书。《你 是哪种人?》

40、他出身于书香门第,父亲是大学教授。他为爱妻,20年来从不上CCAV;他是个好爸爸;他顾家,厌恶应酬,滴酒不沾;他才华横溢,琴棋书画样 样精通,学生时是体育全能,探戈高手;他饱读诗书,季羡林赞他可胜任北大的研究生导师,曾与钱钟书是忘年之交,他说他只是个戏子。他就是陈道明。一个很给 力的男人。

41、旧上海黑社会老大杜月笙的经典语录:1、做人有三碗面最难吃:人面、场面、情面。2、头等人,有本事没脾气;二等人,有本事有脾气;末等人, 没本事大脾气。3、人可以不识字,但不能不识人。4、钱财用的完,交情吃不光。所以别人存钱,我存交情。存钱再多不过金山银海,交情用起来好比天地难量。

42、成功根本没有秘诀,如果有的话,就只 有两个:第一个是坚持到底,永不放弃;第二个就是当你想放弃的时候,请回过头来再照着第一个秘诀去做。——丘吉尔

43、他,21岁,生意失败。22岁,州议员落选。24岁,生意再败。26岁,爱侣去世。27岁,一度精神崩溃。36岁,众议员落选。45岁,参议 员落选。47岁,提名副总统落选。49岁时,参议员落选。52岁,当选美国第十六任总统。他叫林肯,坚信上帝的延迟,并不是上帝的拒绝,最终成就不凡。

44、善良的苏格兰农夫从粪池救出一个小男孩,男孩的绅士父亲酬谢,农夫拒。绅士说:让我们签个协议,我带走你的孩子,给他最好的教育,农夫允。农 夫的孩子后来发明了青霉素,获得诺贝尔奖。数年后,绅士的儿子得了肺炎,青霉素治好了他。这两个孩子分别是弗莱明和丘吉尔。 《冥冥之中,自有天意》

posted @ 2011-12-15 13:36 H.C 阅读(352) | 评论 (0)编辑 收藏

2011年12月5日 #

最简单的方法就是下载一个buildtoolchain.tar.gz安装就行了,有时候就是想自己亲身体验一下安装定制过程,Linux的乐趣也在这点。从网上搜集了些资料,以备日后查阅。    
如何为嵌入式开发建立交叉编译环境


 


  
 
< language=java type=text/java script>      
 
 


 
梁元恩 , 软件工程师


2005 年 9 月

        在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。

随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。

在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交 叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc 几个部分组成。有时出于减小 libc 库大小的考虑,你也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。

下面我们将以建立针对arm的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要作一些对应的改动。我的开发环境是,宿主机 i386-redhat-7.2,目标机 arm。

这个过程如下

1. 下载源文件、补丁和建立编译的目录

2. 建立内核头文件

3. 建立二进制工具(binutils)

4. 建立初始编译器(bootstrap gcc)

5. 建立c库(glibc)

6. 建立全套编译器(full gcc)

下载源文件、补丁和建立编译的目录

1. 选定软件版本号

选择软件版本号时,先看看glibc源代码中的INSTALL文件。那里列举了该版本的glibc编译时所需的binutils 和gcc的版本号。例如在 glibc-2.2.3/INSTALL 文件中推荐 gcc 用 2.95以上,binutils 用 2.10.1 以上版本。

我选的各个软件的版本是:

linux-2.4.21+rmk2
binutils-2.10.1
gcc-2.95.3
glibc-2.2.3
glibc-linuxthreads-2.2.3

如果你选的glibc的版本号低于2.2,你还要下载一个叫glibc-crypt的文件,例如glibc-crypt-2.1.tar.gz。 Linux 内核你可以从www.kernel.org 或它的镜像下载。

Binutils、gcc和glibc你可以从FSF的FTP站点ftp://ftp.gun.org/gnu/ 或它的镜像去下载。在编译glibc时,要用到 Linux 内核中的 include 目录的内核头文件。如果你发现有变量没有定义而导致编译失败,你就改变你的内核版本号。例如我开始用linux-2.4.25+vrs2,编译 glibc-2.2.3 时报 BUS_ISA 没定义,后来发现在 2.4.23 开始它的名字被改为 CTL_BUS_ISA。如果你没有完全的把握保证你改的内核改完全了,就不要动内核,而是把你的 Linux 内核的版本号降低或升高,来适应 glibc。

Gcc 的版本号,推荐用 gcc-2.95 以上的。太老的版本编译可能会出问题。Gcc-2.95.3 是一个比较稳定的版本,也是内核开发人员推荐用的一个 gcc 版本。

如果你发现无法编译过去,有可能是你选用的软件中有的加入了一些新的特性而其他所选软件不支持的原因,就相应降低该软件的版本号。例如我开始用 gcc-3.3.2,发现编译不过,报 as、ld 等版本太老,我就把 gcc 降为 2.95.3。太新的版本大多没经过大量的测试,建议不要选用。


 
 

2. 建立工作目录

首先,我们建立几个用来工作的目录:

在你的用户目录,我用的是用户liang,因此用户目录为 /home/liang,先建立一个项目目录embedded。

$pwd 
/home/liang
$mkdir embedded
 


再在这个项目目录 embedded 下建立三个目录 build-tools、kernel 和 tools。

build-tools-用来存放你下载的 binutils、gcc 和 glibc 的源代码和用来编译这些源代码的目录。

kernel-用来存放你的内核源代码和内核补丁。

tools-用来存放编译好的交叉编译工具和库文件。

$cd embedded
$mkdir  build-tools kernel tools
 


执行完后目录结构如下:

$ls embedded
build-tools kernel tools
 


3. 输出和环境变量

我们输出如下的环境变量方便我们编译。

$export PRJROOT=/home/liang/embedded
$export TARGET=arm-linux
$export PREFIX=$PRJROOT/tools
$export TARGET_PREFIX=$PREFIX/$TARGET
$export PATH=$PREFIX/bin:$PATH
 


如果你不惯用环境变量的,你可以直接用绝对或相对路径。我如果不用环境变量,一般都用绝对路径,相对路径有时会失败。环境变量也可以定义在.bashrc文件中,这样当你logout或换了控制台时,就不用老是export这些变量了。

体系结构和你的TAEGET变量的对应如下表


 

你可以在通过glibc下的config.sub脚本来知道,你的TARGET变量是否被支持,例如:

$./config.sub  arm-linux
arm-unknown-linux-gnu
 


在我的环境中,config.sub 在 glibc-2.2.3/scripts 目录下。

网上还有一些 HOWTO 可以参考,ARM 体系结构的《The GNU Toolchain for ARM Target HOWTO》,PowerPC 体系结构的《Linux for PowerPC Embedded Systems HOWTO》等。对TARGET的选取可能有帮助。

4. 建立编译目录

为了把源码和编译时生成的文件分开,一般的编译工作不在的源码目录中,要另建一个目录来专门用于编译。用以下的命令来建立编译你下载的binutils、gcc和glibc的源代码的目录。

$cd $PRJROOT/build-tools
$mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch
 


build-binutils-编译binutils的目录
build-boot-gcc-编译gcc 启动部分的目录
build-glibc-编译glibc的目录
build-gcc-编译gcc 全部的目录
gcc-patch-放gcc的补丁的目录

gcc-2.95.3 的补丁有 gcc-2.95.3-2.patch、gcc-2.95.3-no-fixinc.patch 和gcc-2.95.3-returntype-fix.patch,可以从 http://www.linuxfromscratch.org/ 下载到这些补丁。

再将你下载的 binutils-2.10.1、gcc-2.95.3、glibc-2.2.3 和 glibc-linuxthreads-2.2.3 的源代码放入 build-tools 目录中

看一下你的 build-tools 目录,有以下内容:

$ls
binutils-2.10.1.tar.bz2     build-gcc   gcc-patch
build-binutls            build-glibc          glibc-2.2.3.tar.gz
build-boot-gcc           gcc-2.95.3.tar.gz glibc-linuxthreads-2.2.3.tar.gz
 


 
 

建立内核头文件

把你从 www.kernel.org 下载的内核源代码放入 $PRJROOT /kernel 目录

进入你的 kernel 目录:

$cd $PRJROOT /kernel
 


解开内核源代码

$tar -xzvf linux-2.4.21.tar.gz
 


$tar -xjvf linux-2.4.21.tar.bz2
 


小于 2.4.19 的内核版本解开会生成一个 linux 目录,没带版本号,就将其改名。

$mv linux linux-2.4.x
 


给 Linux 内核打上你的补丁

$cd linux-2.4.21
$patch -p1 < ../patch-2.4.21-rmk2
 


编译内核生成头文件

$make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig

你也可以用 config 和 xconfig 来代替 menuconfig,但这样用可能会没有设置某些配置文件选项和没有生成下面编译所需的头文件。推荐大家用 make menuconfig,这也是内核开发人员用的最多的配置方法。配置完退出并保存,检查一下的内核目录中的 include/linux/version.h 和 include/linux/autoconf.h 文件是不是生成了,这是编译 glibc 是要用到的,version.h 和 autoconf.h 文件的存在,也说明了你生成了正确的头文件。

还要建立几个正确的链接

$cd include
$ln -s asm-arm asm
$cd asm
$ln -s arch-epxa arch
$ln -s proc-armv proc
 


接下来为你的交叉编译环境建立你的内核头文件的链接

$mkdir -p $TARGET_PREFIX/include
$ln -s $PRJROOT/kernel/linux-2.4.21/include/linux  $TARGET_PREFIX/include/linux
$in -s $PRJROOT/kernel/linux-2.4.21/include/asm-arm  $TARGET_PREFIX/include/asm
 


也可以把 Linux 内核头文件拷贝过来用

$mkdir -p $TARGET_PREFIX/include
$cp -r $PRJROOT/kernel/linux-2.4.21/include/linux  $TARGET_PREFIX/include
$cp -r $PRJROOT/kernel/linux-2.4.21/include/asm-arm  $TARGET_PREFIX/include  
 


 
 

建立二进制工具(binutils)

binutils是一些二进制工具的集合,其中包含了我们常用到的as和ld。

首先,我们解压我们下载的binutils源文件。

$cd $PRJROOT/build-tools
$tar -xvjf binutils-2.10.1.tar.bz2
 


然后进入build-binutils目录配置和编译binutils。

$cd build-binutils
$../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX
 


--target 选项是指出我们生成的是 arm-linux 的工具,--prefix 是指出我们可执行文件安装的位置。

会出现很多 check,最后产生 Makefile 文件。

有了 Makefile 后,我们来编译并安装 binutils,命令很简单。

$make
$make install
 


看一下我们 $PREFIX/bin 下的生成的文件

$ls $PREFIX/bin
arm-linux-addr2line arm-linux-gasp arm-linux-objdump  arm-linux-strings
arm-linux-ar   arm-linux-ld  arm-linux-ranlib  arm-linux-strip
arm-linux-as   arm-linux-nm  arm-linux-readelf 
arm-linux-c++filt  arm-linux-objcopy arm-linux-size
 


我们来解释一下上面生成的可执行文件都是用来干什么的

add2line - 将你要找的地址转成文件和行号,它要使用 debug 信息。

Ar-产生、修改和解开一个存档文件

As-gnu 的汇编器

C++filt-C++ 和 java 中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c++filt 就是实现这种反向的转化,根据标号得到函数名。

Gasp-gnu 汇编器预编译器。

Ld-gnu 的连接器

Nm-列出目标文件的符号和对应的地址

Objcopy-将某种格式的目标文件转化成另外格式的目标文件

Objdump-显示目标文件的信息

Ranlib-为一个存档文件产生一个索引,并将这个索引存入存档文件中

Readelf-显示 elf 格式的目标文件的信息

Size-显示目标文件各个节的大小和目标文件的大小

Strings-打印出目标文件中可以打印的字符串,有个默认的长度,为4

Strip-剥掉目标文件的所有的符号信息


 
 

建立初始编译器(bootstrap gcc)

首先进入 build-tools 目录,将下载 gcc 源代码解压

$cd $PRJROOT/build-tools
$tar -xvzf  gcc-2.95.3.tar.gz
 


然后进入 gcc-2.95.3 目录给 gcc 打上补丁

$cd gcc-2.95.3
$patch -p1< ../gcc-patch/gcc-2.95.3.-2.patch
$patch -p1< ../gcc-patch/gcc-2.95.3.-no-fixinc.patch
$patch -p1< ../gcc-patch/gcc-2.95.3-returntype-fix.patch
echo timestamp > gcc/cstamp-h.in
 


在我们编译并安装 gcc 前,我们先要改一个文件 $PRJROOT/gcc/config/arm/t-linux,把
TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC
这一行改为
TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h

你如果没定义 -Dinhibit,编译时将会报如下的错误

http://www.cnblogs.com/gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such file or directory
http://www.cnblogs.com/gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such file or directory
make[3]: *** [libgcc2.a] Error 1
make[2]: *** [stmp-multilib-sub] Error 2
make[1]: *** [stmp-multilib] Error 1
make: *** [all-gcc] Error 2
 


如果没有定义 -D__gthr_posix_h,编译时会报如下的错误

In file included from gthr-default.h:1,
                 from http://www.cnblogs.com/gcc-2.95.3/gcc/gthr.h:98,
                 from http://www.cnblogs.com/gcc-2.95.3/gcc/libgcc2.c:3034:
http://www.cnblogs.com/gcc-2.95.3/gcc/gthr-posix.h:37: pthread.h: No such file or directory
make[3]: *** [libgcc2.a] Error 1
make[2]: *** [stmp-multilib-sub] Error 2
make[1]: *** [stmp-multilib] Error 1
make: *** [all-gcc] Error 2
 


还有一种与-Dinhibit同等效果的方法,那就是在你配置configure时多加一个参数-with-newlib,这个选项不会迫使我们必须使用newlib。我们编译了bootstrap-gcc后,仍然可以选择任何c库。

接着就是配置boostrap gcc, 后面要用bootstrap gcc 来编译 glibc 库。

$cd ..; cd build-boot-gcc
$../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX \
>--without-headers  --enable-languages=c --disable-threads
 


这条命令中的 -target、--prefix 和配置 binutils 的含义是相同的,--without-headers 就是指不需要头文件,因为是交叉编译工具,不需要本机上的头文件。-enable-languages=c是指我们的 boot-gcc 只支持 c 语言。--disable-threads 是去掉 thread 功能,这个功能需要 glibc 的支持。

接着我们编译并安装 boot-gcc

$make all-gcc
$make install-gcc
 


我们来看看 $PREFIX/bin 里面多了哪些东西

$ls $PREFIX/bin
 


你会发现多了 arm-linux-gcc 、arm-linux-unprotoize、cpp 和 gcov 几个文件。

Gcc-gnu 的 C 语言编译器

Unprotoize-将 ANSI C 的源码转化为 K&R C 的形式,去掉函数原型中的参数类型。

Cpp-gnu的 C 的预编译器

Gcov-gcc 的辅助测试工具,可以用它来分析和优程序。

使用 gcc3.2 以及 gcc3.2 以上版本时,配置 boot-gcc 不能使用 --without-headers 选项,而需要使用 glibc 的头文件。


 
 

建立 c 库(glibc)

首先解压 glibc-2.2.3.tar.gz 和 glibc-linuxthreads-2.2.3.tar.gz 源代码

$cd $PRJROOT/build-tools
$tar -xvzf glibc-2.2.3.tar.gz
$tar -xzvf glibc-linuxthreads-2.2.3.tar.gz --directory=glibc-2.2.3
 


然后进入 build-glibc 目录配置 glibc

$cd build-glibc
$CC=arm-linux-gcc ../glibc-2.2.3/configure --host=$TARGET --prefix="/usr"
--enable-add-ons --with-headers=$TARGET_PREFIX/include
 


CC=arm-linux-gcc 是把 CC 变量设成你刚编译完的boostrap gcc,用它来编译你的glibc。--enable-add-ons是告诉glibc用 linuxthreads 包,在上面我们已经将它放入了 glibc 源码目录中,这个选项等价于 -enable-add-ons=linuxthreads。--with-headers 告诉 glibc 我们的linux 内核头文件的目录位置。

配置完后就可以编译和安装 glibc

$make
$make install_root=$TARGET_PREFIX prefix="" install
 


然后你还要修改 libc.so 文件


GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a)

改为
GROUP ( libc.so.6 libc_nonshared.a)

这样连接程序 ld 就会在 libc.so 所在的目录查找它需要的库,因为你的机子的/lib目录可能已经装了一个相同名字的库,一个为编译可以在你的宿主机上运行的程序的库,而不是用于交叉编译的。


 
 

建立全套编译器(full gcc)

在建立boot-gcc 的时候,我们只支持了C。到这里,我们就要建立全套编译器,来支持C和C++。

$cd $PRJROOT/build-tools/build-gcc
$../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++
 


--enable-languages=c,c++ 告诉 full gcc 支持 c 和 c++ 语言。

然后编译和安装你的 full gcc

$make all
$make install
 


我们再来看看 $PREFIX/bin 里面多了哪些东西

$ls $PREFIX/bin
 


你会发现多了 arm-linux-g++ 、arm-linux-protoize 和 arm-linux-c++ 几个文件。

G++-gnu的 c++ 编译器。

Protoize-与Unprotoize相反,将K&R C的源码转化为ANSI C的形式,函数原型中加入参数类型。

C++-gnu 的 c++ 编译器。

到这里你的交叉编译工具就算做完了,简单验证一下你的交叉编译工具。

用它来编译一个很简单的程序 helloworld.c

#i nclude

int main(void)
{
 printf("hello world\n");
 return 0;
}

$arm-linux-gcc helloworld.c -o helloworld
$file helloworld
helloworld: ELF 32-bit LSB executable, ARM, version 1,
dynamically linked (uses shared libs), not stripped
 


上面的输出说明你编译了一个能在 arm 体系结构下运行的 helloworld,证明你的编译工具做成功了。
posted @ 2011-12-05 09:14 H.C 阅读(477) | 评论 (0)编辑 收藏

2011年11月24日 #

弹出警告窗口
        String tf1=this.jTextField1.getText();
String tf2
=this.jTextField2.getText();
if(!(tf1.equals("")||tf1.charAt(0)== ' '||(int)tf1.charAt(0)==10||tf2.equals("")||tf2.charAt(0)== ' '||(int)tf2.charAt(0)==10)){
//如果用户名,密码输入不为空,执行操作
}
else
JOptionPane.showMessageDialog(
null, "输入为空! ","警告 ",JOptionPane.WARNING_MESSAGE);//若输入为空或第一个字符为空格或者回车,则弹出警告窗口
posted @ 2011-11-24 17:55 H.C 阅读(242) | 评论 (1)编辑 收藏

2011年11月23日 #


import java.util.*;
import java.text.SimpleDateFormat;

public class test{
    Date date = new Date();
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(df.format(date));
    date.getTime()   //返回从1970-1-1 零时到现在的毫秒数
   
    df.parse("2011-11-23")  //将字符串转换为Date类型
    df.format(date)         //将Date类型转换为字符串类型

    date.getTime()  < date1.getTime()   //比较两个日期的大小

    (date.getTime() - date1.getTime())/(1000*60*60*24)  // 两个日期相差的天数

posted @ 2011-11-23 20:34 H.C 阅读(195) | 评论 (0)编辑 收藏

2011年11月15日 #

grub的安装

grub> root (hd0,0)    //指定现在根目录,后面的操作都是在这个分区里进行的。
                        //grub以发现磁盘的顺序命名hd0是第一块磁盘,hd1是第二块磁盘。第一分区为0,第二分区为1。hd0,0是第一块磁盘的第一分区。
grub>setup(hd0)       //把grub的stage1写入第一块磁盘的MBR,也可以用Install具体看HELP。在/boot/grub文件夹里有stage1 ,stage2文件。

grub配置

grub启动菜单由menu.lst配置

default 0    //默认启动第一个
timeout     //等待时间

title        ubutun8.04    //菜单中显示的标题
root       (hd0,0)      //同上
kernel      /boot/vmlinuz   root= /dev/sda0  ro quiet   //同下

直接从GRUB命令行启动系统

grub>root(hd0,0)      //同上
grub>kernel  /boot/vmlinuz.2.6.24-29  root=/dev/sda0 ro quiet   //要load的内核位置。root是启动后真文件系统的根目录。ro 挂载为只读模式。quiet 安静模式,不回显。
grub>initrd   /boot/initrd.2.6.24-29     //ramfs文件系统的压缩文件,这个可以自己制作。
grub>boot           //启动

这是自己写的笔记,只作参考。如有不对敬请斧正。
posted @ 2011-11-15 21:00 H.C 阅读(242) | 评论 (0)编辑 收藏

2011年11月14日 #

.切换到kdm和gdm的方法是:
sudo dpkg-reconfigure gdm
sudo dpkg-reconfigure kdm

1.假如需要切换到GNOME:

#switchdesk gnome

2.假如需要切换到KDE:

#switchdesk kde

删除kubuntu开机画面
sudo apt-get --purge plymouth-theme-kubuntu-logo

posted @ 2011-11-14 19:38 H.C 阅读(280) | 评论 (0)编辑 收藏

yEd Graph Editor
posted @ 2011-11-14 10:42 H.C 阅读(319) | 评论 (0)编辑 收藏

2011年11月12日 #

~/.config/user-dirs.dirs
posted @ 2011-11-12 17:09 H.C 阅读(278) | 评论 (0)编辑 收藏

I. 配置系统环境
执行 sudo vi /var/lib/locales/supported.d/zh
加入以下配置参数
zh_CN.GB18030 GB18030 (最新汉字编码字符集,向下兼容GBK,GB2312)
zh_CN.GBK GBK (汉字扩展编码,向下兼容GB2312, 并包含BIG5全部汉字)
zh_CN.GB2312 GB2312 (简化汉字编码字符集, 最近有客户要我们改进GB2312,太看得起我们了,我只能说:"NO!")
zh_CN.GB18031 GB18031 (数字键盘汉字编码输入,面向手持设备,我的Nokia3120从来就是发短信,接听电话,无法和PC通讯,就不用这个了。maybe用Google Android SDK的大侠们需要这个)
zh_HK.BIG5 BIG5 (繁体)
zh_TW.BIG5 BIG5 (繁体)
然后执行 sudo locale-gen 
提示以下信息,成功了
zh_CN.GB18030... done
zh_CN.GBK... done



e.g. vi
执行 sudo vi /etc/vim/vimrc 
加入以下配置参数
let &termencoding=&encoding
set fileencodings=utf-8,gb18030,gbk,gb2312,big5


最好是将系统的默认编码设置为 GBK, 这样和 Windows 下面的开发环境最接近. 设置的方法应该不止一种, 我采用的是编辑 /etc/environment, 改成这个样子:
  LANGUAGE="zh_CN:zh:en_US:en"
GST_ID3_TAG_ENCODING=GBK
LANG=zh_CN.GBK
LC_CTYLE=zh_CN.GBK


posted @ 2011-11-12 10:03 H.C 阅读(1898) | 评论 (1)编辑 收藏

2011年11月11日 #

反短斜线
使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
命令:
find . -mtime -1 -type f -print
用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`


流程控制

"if" 表达式 如果条件为真则执行then后面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等

case ... in
...) do something here ;;
esac
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac

select var in ... ; do
break
done

#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"

while ...; do
....
done

for var in ....; do
....
done

for var in ....; do
....
done

下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
这里出现个特殊的变量$*,该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.

特殊变量

$#参数个数
$*所有参数
posted @ 2011-11-11 10:06 H.C 阅读(233) | 评论 (0)编辑 收藏