亦宁 さんのプロフィールPhoneix speedフォトブログリストその他 ![]() | ヘルプ |
|
感谢访问!
Phoneix speedFill with the Sunshine 2009/11/25 zz 协方差矩阵的详细说明年纪大了,啥都记不住了。特别是协方差这种百年不遇的问题。真是不够学术啊。故还是得把这些基本功转载一下,整理一下,记录在这种显眼的位置。也方便以后写论文时候好找,嘿嘿。 变量说明: 设 其中
单随机变量间的协方差: 随机变量 根据已知的样本值可以得到协方差的估计值如下: 可以进一步地简化为:
协方差矩阵:
其中 如果所有样本的均值为一个零向量,则式(5)可以表达成: 补充说明: 1、协方差矩阵中的每一个元素是表示的随机向量X的不同分量之间的协方差,而不是不同样本之间的协方差,如元素Cij就是反映的随机变量Xi, Xj的协方差。 2、协方差是反映的变量之间的二阶统计特性,如果随机向量的不同分量之间的相关性很小,则所得的协方差矩阵几乎是一个对角矩阵。对于一些特殊的应用场合,为了使随机向量的长度较小,可以采用主成分分析的方法,使变换之后的变量的协方差矩阵完全是一个对角矩阵,之后就可以舍弃一些能量较小的分量了(对角线上的元素反映的是方差,也就是交流能量)。特别是在模式识别领域,当模式向量的维数过高时会影响识别系统的泛化性能,经常需要做这样的处理。 3、必须注意的是,这里所得到的式(5)和式(6)给出的只是随机向量协方差矩阵真实值的一个估计(即由所测的样本的值来表示的,随着样本取值的不同会发生变化),故而所得的协方差矩阵是依赖于采样样本的,并且样本的数目越多,样本在总体中的覆盖面越广,则所得的协方差矩阵越可靠。 4、如同协方差和相关系数的关系一样,我们有时为了能够更直观地知道随机向量的不同分量之间的相关性究竟有多大,还会引入相关系数矩阵。 2008/12/22 Django admin的改动这是一个python摘记
if 不干技术||不干Internet||不想了解python,django
please 飘过
else i amgoingto tell u:
这个是关于Python的web框架Django的摘记,原因是这个框架升级后万恶的资本主义撰稿人没有在教程中更新,所以admin模式根本牛头不对马嘴
费了好大劲才搞明白怎么回事,so,er...写在这里,某年某月某日要是哪个可怜的程序员遇到跟我一样的问题,我来拯救你
1.0的Django跟前面版本相比admin的变化真的不是一般的大,开源的东西真的不省心,没有文档害死人啊
据说现在的过程是这样的:(其实也不是据说,而是实际得) 首先在urls.py中需要添加的include: from django.contrib import admin admin.autodiscover() 然后在settings.py中需要添加的 INSTALLED_APPS INSTALLED_APPS的内容中再加上下面这个app: 'django.contrib.admin' 然后需要在添加了admin管理的app的文件夹中添加一个admin.py文件如下: #admin.py from django.contrib import admin from models import Module class ModuleAdmin(admin.ModelAdmin): list_display = ['name','manager','isdpool'] filter_horizontal = ['host'] admin.site.register(Module,ModuleAdmin) 第一行是系统级的import 不变 第二行是引入admin的对象 前面一个models修改为app的名称 后面的Module修改 为app中用来被管理的类
比如app为book,管理的class为Books,上述该写为: from books.models import Book 第三行的ModuleAdmin随便起个名字,可以沿用ModuleAdmin,也可以改为跟app 相关的,比如BookAdmin,后面的admin.ModelAdmin是调用的参数结构,保持不
变
第四行起的class里面的内容可以自己编辑,list_display可以是随便哪个需要 显示的变量
第六行的register的参数:Module是app的名字,ModuleAdmin是在第三行定义的 class ModuleAdmin
比如admin.site.register(Book, BookAdmin) 好了,事实就是这样的,这回可以在127.0.0.1/admin中查看你的管理页面了
2008/09/03 俺又复活了话说今天晚上终于看了篇论文,略有小成的样子。遂闲来看看一些鸡毛们的博,看来大家的日子还都是乐无边啊。于是乎,大呼自己精神生活真是贫瘠啊~~居然都N个月没码过字了。其实是被某人管着了,以免被人骂文艺神经爆发...嘘! 为了向大家表示一下我还活着,还活蹦乱跳的,我决定出来冒个泡。 话说前阵子俺在广州出差,刚回来两天。热切期盼着老板能找我会晤,好汇报工作进展。望穿秋水,可老板就不安抚我骚动的心灵。这不,今天上午早早到实验室,见到老板比我还早,于是危襟正坐,埋头工作。形至近午,老板终于在我座位前停下脚步,“终于来了!^#&Y$*(@&*。。。” 然后发现老板没来检查我的工作,站着嘀咕了一句“那个XXX谁比较熟悉?”(笔者注:XXX是俺家mm,老板唔知) 。。。。。。 没人鸟他,我都没听清楚他说的是什么。。。 然后他转过来问我“那个XXX你熟的吧?”(我靠,我不熟谁熟啊&*@^$#&) “你能找到她的吧?”(废话,老子出差就是伺候她去了。找我mm,你想干吗*^%%$(...) 肚子快笑痛了,然后还得装的很淡定的样子说“恩,找的到的,有什么事啊?” “这个是她的文章的稿费,帮忙给她吧!”说完扬长而去! 话外音:90块稿费,就当你出差补贴了!(这句话怎么这么像mm的口气)
晚上看完论文,想起来C++很重要,决定买本PRIMER,乘现在项目扫尾期啃一啃。科海没找到,灵机一动上TAOBAO,然后遇到一千古极品牛卖家: 。。。。。。 (前面省略N分钟:大致意思是我要买这本书,他开价5块钱,然后告诉我是节选的复印版本。。。我什么时候听说过卖书还有这么卖的???然后我问全本多少钱?) 啃骨头原版复印(20:22:46): (Q#^&*^$@^(*&$& 我狂晕,你复印的卖的比原书还贵我买你的干吗?) lynphoenix(20:25:06):
(然后天真无邪的我就被社会主义大叔教育了。。。) 啃骨头原版复印(20:26:53): 。。。。。。(继续省略大叔几百byte的苦口婆心)
lynphoenix(20:29:39):
(。。。。。。) 我靠,大叔你烦不烦啊。。。怕了你了,我走人! 2008/03/31 无题人生最苦痛的是梦醒了无路可走。这是鲁迅说的。要我说,更痛苦的事情是还没睡就知道无路可走,睡也没的睡,梦都没的做。 燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们之间的信任不再了,还能不能复返呢? 有一句话说出就是祸,有一句话能点得着火。别看好久没有人说破,你猜得透火山的缄默?说不定是突然着了魔,突然青天里一个霹雳爆一声:“.....” 2008/02/03 so, eh, beautyI guess I could be pretty pissed off about what happened to me, but it’s hard to stay mad when there’s so much beauty in the world. Sometimes I feel like I’m seeing it all at once and it’s too much. My heart fills up like a balloon that’s about to burst. And then I remember to relax and stop trying to hold onto it. And then it flows through me like rain and I can’t feel anything but gratitude for every single moment of my stupid little life.
You have no idea what I’m talking about, I’m sure, but don’t worry, you will some day. 2008/01/28 月亮女祭司睡觉前在看玛雅的书,于是就有了这么恢弘的一个梦: 我是部落的大祭司,你是守护金字塔的圣女;为了族人你作出了牺牲,可愚蠢的族人不原谅你,认为是你的不洁带来了灾祸,想叫我处死你,没有人知道我一直深爱着你,包括你。所以他们也不知道为什么大祭司的头顶上有绝顶风暴,那是绝望、责任、震怒和爱的交织,最后我把法力全传到了你身上然后自己跳入了熊熊圣火,而你则成了永恒的月亮女祭司! 2008/01/24 ...Father, i made a same mistake again, something i have predicted already, i just can not avoid but if you told me, Alcohol is something in Ten Commandments, i would swear that i won't touch it anymore however, in this life, we just like moths that is why, i call myself: phoenix 2008/01/23 我一直很坚韧在生日那天,遭受这样一个打击,我只能说人生真的非常戏剧化: stand in the sunshine in the minute, and tore away by the storm in the next. what can i say, i think, that is what makes me a man! 我知道,我一直很坚韧. 今天朋友说"是不是人的意志力很强大,灵魂就会不死"的时候,我开玩笑说我肯定可以的 2007/12/11 一件小事早上从校医院出来,看见前面一位老奶奶,伛偻着腰,拄着拐杖,颤颤巍巍的走着,很慢很慢。我的第一反应是上前搀扶,可走了两步我又犹豫了,犹豫她是否愿意接受我的帮助,不知如何做起。结果是我向老奶奶行了很久的注目礼,老人家觉得奇怪用眼神和善地询问我有什么事,“没事,没事”,扭头进了食堂...... 现在坐下来反省这件小的不能再小的事,居然发现自己性格中优柔寡断的一面。一向觉得自己是做什么事都是不上心的,怎么好意思关键时刻玩怯场?回忆回忆,虽然我有很多脑子大了随便一拍就上的时刻,可也有因为缺乏决断而错失机会的被动。俺再深入剖析一把:准备不充分,注意力不集中,应变不机智。昨天跟寒大哥老爸喝酒时他老人家说了,年轻人要历练风浪...很有道理! 备案于此,以示告诫! 2007/11/22 狂焊电路乱翻书某天,酗酒,居然乱说话 乱说话本身其实并没什么,要命的是之后仿佛电位被下拉,乱七八糟的心情就像灌电流 翌日,梦见阴天,大海,还有心爱的人,让一个设计名字的老人写下我们的名字,我还是那个善良而充满古怪想法的孩子;然后一转身,老人消失,海水中漫出万丈公路和蒙蒙雾气下的红绿灯。原来我是在宫骐峻的漫画里 但醒来时和看过宫骐峻的漫画后一样,美好的想哭。 。。。 综上所述,酒是触发器。烦的我要半夜焊电路,其实没法子,不敢白天焊。相当失败的是电路只能焊不能调,比如一圈芯片全有了少个晶振,其他接口都全了偏偏少个RJ45和串口芯片,真不知道我他妈这次买芯片怎么这么会失败。焊完了一个电路ARM也调不了AVR也调不了。哎~~亏俺还一向自诩做事非常有计划,惭愧惭愧 通常心情差到低的时候我的方法是看些画,我一直觉得艺术家的作品是一种拯救。没办法,文艺青年总是要以文艺的方式解决问题。今天这种时间不但是郁闷到底而且是无聊到底的时候,我就有冲动把看的东西码出来污染大家的视野了。
濒死的野牛 这幅画是旧石器时代欧洲山洞壁画中最震撼的一幅--西班牙的阿尔塔米拉山洞壁画:“濒死的野牛” 看这构图,技法,用色,绝对想象不到它是旧石器时代的产物!然后抛开技巧不谈,更加震撼的是古人的胸怀。 这是一头受伤濒死的牛,从它的肢体语言中我们能读到什么?四肢屈紧抽搐是承受着极大的痛苦,但野牛紧绷的全身和直顶着的牛角彰显的仍是一种力量感,而眼神中我们看到的是什么?生的渴望!这应该是人看到野牛濒死的状态后所触动而画。那么那眼神是谁的呢?是作画人!作画人看野牛濒死于是想到人的生命易逝,野牛尚且求生何况人乎?身体依旧孔武有力,壮志未酬身先死!眼神分明是在说“我不甘心”!这也许是人类第一幅描写死亡感悟的画吧。作者要表达的是什么并不重要,重要的是我们在看画的过程中看到了什么,看到生的渴望,那分明是我们自己的渴望。然而为什么生呢?我还有力拔山兮气盖世啊!人说“英雄怕见白头”,何况将死呢?那挣扎着求活的状态分明是电影“活着”中的生存状态。然项羽呢…对于作画人而言,或许他感受到了自己的生命自己同胞的生命也像野牛一样挣扎,痛苦,求生。求生是种本能,但是不是任何时候都该求生呢?这里的痛苦和求生又是怎样一对矛盾?对于我们而言生的意义又在哪里?这或许是作画人的矛盾,也是我的思考。艺术的意义正在于此,体会艺术家的思考;思考艺术家的问题,至少他们把这个问题揭示给我们了。于是我们去生活,去体验。
垂死的牝狮 上面的野牛不够彻底,同是生与死的话题,这幅“垂死的牝狮”则表达了亚述民族的理解。 这是美索不达米亚文明时期的作品。牝狮给我们的震撼超越了野牛。垂死的牝狮背负了三支刺中要害的箭,它的后肢已经无力支撑身体而平卧在地上了,但它仍然用尽力气支撑着上半身,抬起高昂的头颅,发出生命中最后一次咆哮!同样我们可以体会作画人的心情,亚述人画的雄狮是他们心中的雄狮,他们从雄狮临死前的咆哮中看到了自己对生的渴望,野牛的眼神中透露的是留恋是恐惧,但是亚述人的狮子是伟大的,是英雄的。它的高呼,它的肌肉紧张的状态分明告诉我们的意思是“战斗”!如亚历山大所说“For Honor”,如华莱士所呼“Freedom”。野牛对求生的意义是不清晰的,作画人通过野牛的眼神提出了一个问题“for what”,而在这里,亚述人通过雄狮,表达了自己对生与死的理解,诠释了生命,诠释了理想。
希腊精神 1、赌 -- “阿喀琉斯和埃阿斯玩骰子” 陶瓶上标明绘制者叫欧克塞基,是阿堤卡有名的瓶绘艺术家。瓶上描绘的是:古希腊英雄阿喀琉斯和另一位英雄埃阿斯,率领12艘战船在去特洛伊的路上突遇暴风雨,值得停船靠岸休息,休息期间两人玩掷骰子的游戏的情景。图中左侧为阿喀琉斯,右侧为埃阿斯,虽然两位英雄看起来正在忙着玩游戏娱乐,但手中的长矛说明他们随时做着出发战斗的准备。 这个故事的主题是掷色子,也就是“赌”。在那个年代“赌”是很体现男人品质的一件事情,它和决斗的精神是一样的,公平,勇敢,光明磊落,还有智慧。不论是生活中还是战场上,矛盾总是存在着,双方争执不下时怎么办?赌!这是一个对双方都公平的解决方案,不论是提出还是接受都显示了男人的胸怀;愿意通过这样的方式来解决矛盾,愿意承担输的结果,这是勇敢;通过光明正大的方式而不是私下勾心斗角这是正直;在赌博中靠自己的智慧去取得胜利这是智慧。勇者无惧,智者无惑,这便是赌的精神。 2、悲剧 -- 拉奥孔 “拉奥孔”雕塑是希腊悲剧在雕塑中最壮丽的反映。拉奥孔是特洛伊城阿波罗神庙的祭司。他在特洛伊战争中警告同胞千万不要中希腊人设下的木马计谋,因此得罪了希腊保护神雅典娜。雅典娜为了惩罚拉奥孔,立即派两条巨蟒从田奈多斯岛直奔特洛伊,首先咬死了拉奥孔的两个儿子,然后又缠绕着拉奥孔,用毒液浸透他的肉体。这一群雕表现的就是这一悲剧情景。它坚决地告诉我们什么叫命运。一边是你的同胞,一边是你的家族骨肉,你必须作出选择。神的意志摆在那里,看你怎么办。这时拉奥孔的伟大就显现出来了,或者说这是希腊人的伟大—知其不可为而为之。
后印象主义 -- 凡高 再来点后印象主义。我不会画画,但是当对生活最有体验的时候,我总是想用绘画的形式把自己的理解记录下来,文字太苍白,照片太写实,绘画干好,不仅有感动,还有热情。 说到热情,从后印象主义这里开始尤其沉重。之前的画家许多是宫廷画师,许多是为生存而画画;他们的画大多有主题,比如崇高,宗教,民主等等等等 但是凡高和高更的口号是“我要画画” 凡高最让人感动的就是他的热情,他从小的理想就是做牧师,可是当上了牧师以后却因为太认真而被鄙视;他爱上一个妓女,爱到把自己的耳朵割给了人家;他开枪自杀,结果一下死不掉静静地在床上躺了3天才断气。他的自画像,眼神是直楞楞的,再加上刚才我引述的事迹大家肯定会觉得他智商有问题,至少我当时是这么觉得的。可是看他的画,我不得不说,智商低也不妨碍人家对生活的真诚。
想象一下上面这副作品的场景,当我们看到这样的场景时是怎样的感觉,就明白为什么他要画这样一副作品了。 太阳是金黄色的,是凡高最喜欢的向日葵的色调,颜色的对比让人觉得温暖,厚重 劳动者是幸福的,他们的生活简单而充实,日出而作日落而歇,简单的就像画一样。生命就这样被填满 可是劳动不是幸福的,资本主义社会的劳动是异化,于是劳动就成了两极分化的起点
再看他的鞋。广大劳动人民要劳动,总离不开一双鞋。凡高画无数的鞋,都是破旧的。仿佛这就是他生命的意义。那样的热情,那样的探索,当然他也拼命体验,可是往往却是看到的多,感动的多,体验的少。但他依旧热爱,当现实和意想严重不符,最后他的星空就变成这个样子了: 我们可以理解为,这是他感受到的疯狂世界,作为一个单纯的连牧师都做不了的人,他的世界是干净的,善良的。越来越多的压迫、欺诈则把夜空挤压的有些抽象,魔怪化。作为一个画家,他用这样的方式表达自己对生活本质的追求。
再这样吧,留些下次用。改天心情再不好了再贴点文艺复兴。 P.S. 突然想起来,有人说过找到工作了一定帮我焊电路板的。正好撞上!正对不起!哈哈! 2007/11/17 换个主题 粉饰太平换个金黄金黄的很土很土的主题,用来标榜我还是热爱生活的。
最近总觉得生活过的该被诅咒,每天觉得压抑,期盼,还不知盼的是什么。
换个属于VAN GOGH的色调,体会他的善良,他的执念,和他安静的离开 2007/11/15 我好想好想飞逃离这个疯狂世界 已经好久没有到此一游了。这完全得益于某同志恩威并重的感化,把我敏感的文艺青年的神经牢牢地锁了起来。而在这之前要是有人说能用阳光填满我的阴霾,我一定当它是笑话一场... 现在,俺是个务实的民工... 不过俺还是什么都害怕,比如今天中午的一件很小很小的事又让我心里文艺的调子开始晃荡啊晃荡。哎~归根到底,就算再冰雪聪明也不会想的到的。我的本质就是这样了。民工也不是好学的,不是衣服穿的破点就可以扮演的 只好开开柴可夫斯基,我还是觉得他的第六交响曲最演绎我的本质,高唱,低回,斗争,破灭,光明,希望... 而谁又能体会他的心胸和地位的矛盾所带来的对生命的理解呢?... 突然看到,一辈子的影子就这么划过了,我骨子里那躁动和不安分又该怎么宣泄? Anyway,我是一个乐观的悲观主义者。所以牢骚发完之后,我还得继续看很牛B的linux中断... 2007/09/18 女足世界杯phoenix经常自诩自己玩世不恭而轻狂的外表下有一颗平和善良容易感动的心
phoenix很贪玩,又经常自诩这样的人生才不虚度,虽然他总觉得人生是陀shit 然后就有了今天看家门口的女足世界杯的故事 临近黄龙体育中心听到的鼎沸人声让phoenix心生澎湃,进入灯光下的球场看台的感觉甚至如置梦中,phoenix牙痒痒地对身边的同学说 NND 让我下去踢两脚多好~~~ 诚然,这是一场特殊的比赛:德国vs日本,有日本参加的比赛从来不能不特殊;这是一个特殊的日子-918前夜;这是一个特殊的群体:中国80后的年轻人普遍亲美反日。但是,phoenix还是要说但是。 总的来说这只是一场乏味的比赛 抛开速度节奏上的差异不谈,所谓的上届冠军德国队的技战术水平还是比不上浙江大学男足校队。她们传承了他们男子国家队的同样风格:身体强悍,技术粗糙,技战术素养差。她们的进攻通常是前场两三个人靠身体撞出一条血路,或者是中场压迫对方出错,总之没有一个在中前场能运用个人技术控制局面组织进攻的人!堂堂的上届世界足球小姐除了在一个角球混战中攻入一球外完全淹没在来回的抢球丢球中。。。 日本队也是一样,一应他们男足的特点:身体单薄,技术好,中场强锋线弱。通常都是在在禁区前20~10米处组织进攻,然后一个直传或下底,单薄的单前锋淹没在对方牛高马大的两个中后卫中间。。。 结果是2:0,上半场德国靠一个角球取得领先,下半场快结束时凭一点球锁定胜局。 但phoenix郁闷的不是比赛的乏味,而是球迷啊球迷,你们能不能... 镜头1:日本队出场,漫天谩骂 镜头2:奏日本国歌,震天嘘声 镜头3:日本队拿球,全场喑呜声 镜头4:日本队一队员被德国队门将冲撞倒地,全场欢声雷动 ...... 何等的民族仇恨...
而phoenix看到的是日本女足的姑娘们在被德国进球后顶着全场的嘘声更加积极更加出色地组织进攻,多么令人尊敬的女孩子!你说她们和日本右翼的政客有什么关系?为什么要她们来担当?!
phoenix想起了自己唯一一个认识的日本人--一个腼腆、谦逊的小伙子,在球场上有着一流的技术与视野而总是给自己的队友们以支持 phoenix还想起了去日本交流过的同学说的一句“我们有多仇视日本人,他们的普通民众就有多么喜爱我们” 还想到某届世界杯的主题“足球让战争走开”,与鲁迅的“论fire play应缓行”...呵呵,真有意思! phoenix曾经对朋友说,自己最大的问题在于总是不能容忍某些事,彼时朋友说她总是太能容忍某些事,phoenix说,您是在说对口相声哪。然而phoenix觉得,更多的人是在盲目地不容忍不宽容,而当这样的仇恨泯灭了仇恨者对美的欣赏和尊重,甚至泯灭了仇恨者自身应有的气度与美德,这是最令人悲哀的。所谓“五色令人目盲,五音令人耳聋” 镜头 last:比赛最后阶段结果以成定局,一名日本女球员为救一个边线球,飞身出边线铲球,终于听到场内响起稀稀落落的掌声,phoenix动容 ! 2007/09/13 忘了来时的路林子里的花又开了 熟悉的味道 已经不记得是多久以前曾经铭烂于心的 连混杂着的心情都不知从何提起 原来自己已经走了这么久 忘了来时的路 每天夜里梦到高更:从哪里来?来干什么?到哪里去? 我只能忐忑,没有根地期盼着 甚至不知道期盼的是什么 是金戈 是红颜 是戈多 2007/09/05 嵌入式QT-3开发环境建立昨天安装了QT2的版本,使用的极其不习惯,今天一咬牙,安装了一个QT3!真是折腾啊~~ 安装QTE-3.1.2和QT-3.1.2:
1、 安装QT-X11-3.1.2: 解压缩到/usr/local中,设置路径: QTDIR=/usr/local/qt-3.1.2 PATH=$QTDIR/bin:$PATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 然后配置,编译: ./configure –no-xft make 然后编译qfvb工具并拷到bin目录下: cd $QTEDIR/tools/qvfb qmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/
2、 安装QTE-3.1.2: 同样地QTE-3.1.2这个包要安装成host和target两个版本: qt-embedded-host是用来编译在PC上运行的程序的 qt-embedded-target是用来编译在qvfb和9200上运行的程序的 安装qt-embedded-host 和QTE2的编译差不多,设置好目录路径, cd $QTEDIR export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft -qvfb -depths 4,8,16,32 make 安装qt-embedded-target 和上面不同的在于configure的参数,要加上 –embedded arm –no-qvfb
3、 编译QT程序: 程序用designer写好以后,在上位机运行的话用qmake直接编译: qmake -o Makefile qvfb.pro make 在上位机的qfvb和下位机运行的编译方式是一样的: qmake -o Makefile qvfb.pro 完了以后将makefile里面的编译器链接器修改一下,gcc g++ 都用arm-linux-开头的代替 另一种方法是qmake的时候直接加上参数 -embedded arm qmake -embedded arm -o Makefile qvfb.pro 然后再make
在QFVB上运行时: 先运行QFVB:qfvb &sleep 10 再运行程序,加后缀名 –qws 作为服务器模式运行 在下位机运行时: 将QT-3.1.2的库文件(/qt-3.1.2/lib整个目录)拷贝到下位机,然后设置好QTDIR的路径,运行时记得加上-qws
现在还存在的问题: 1、 在QFVB和9200上运行时不能显示中文 2、 解决输入设备的问题 3、 程序运行时一定要加-qws: 如果不加则显示QSocket::writeBlock: Socket is not open然后不能运行; 如果加了则在超级终端下不能正常退出,需要用telnet登陆才能退出 4、 需要添加动画显示和键盘,串口的支持使QT写的界面能和应用程序代码相连接
2007/09/04 9200的QT开发环境的建立做Liunx下的开发,起步是最难的;开源的好处是不花钱,可是天下没有免费的午餐,不花钱就不能责怪人家写的代码混乱,版本参差不齐,N多BUG…而这些都实际上增加了开发的难度。所以开发之前,安装一个可靠好用的开发环境是相当重要的。安装工具包时经常有这样的感受,按照网上的步骤一步步做下来,结果突然进行到某一个地方就挂在那里了!然后就想杀人!这两天一直埋头于QT,前几天编写了一个小DEMO,在linux下编译通过了然后想让它在9200上运行,unforturnately我的9200上的QT/Embedded版本只有2.3.7而RH上的QT-Designer的版本是3.1.0,如果编译9200的QT程序的话需要QT/Embedded向下兼容QT-Designer。更加unforturnate的是我安装的RH有KDE环境,所以还不能直接卸载QT。一气之下,今天花费了一天时间重装linux,去掉KDE环境和自带QT,然后在网上baidu了好久好久,终于建立起QT开发环境,好不开心! 首先安装编译器 crosschain: 我用的是优龙提供的工具链cross-3.3.2.tar.bz2,这个好象在sumsung的网站上也有的下,好象和2440、2410等用的是一样代码包,用来编译linux2.6的内核,不知道我的推断对不对。 在linux系统的/usr/local/下建立arm文件夹,将工具包解压到此: tar jxvf cross-3.3.2.tar.bz2 编辑/etc/bashrc文件,在最后加上一行export PATH=/usr/local/arm/3.3.2/bin:$PATH 至此arm-linux编译工具安装完成,已经可以编译9200下用的linux2.6内核了!
搭建Qt/Embedded 平台 需要以下几步: 1、在上位机安装tmake-1.11,qt-X11-2.3.2,qt-embedded-2.3.7(for host) 2、在上位机安装qt-embedded-2.3.7(for target) 3、在下位机安装qtopia
首先解压代码包: tar xfz tmake-1.11.tar.gz tar xfz qt-x11-2.3.2.tar.gz tar xfz qt-embedded-2.3.7-free.tar.gz 最后这个包解压两次,两个文件夹分别命名qt-2.3.7-host和qt-2.3.7-target 在安装之前设置一下目录路径: export TMAKEDIR=$PWD/tmake-1.11 export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.7-host
安装tmake-1.1:其实是设置编译器tmake的路径 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export PATH=$TMAKEDIR/bin:$PATH
安装Qt/X11 2.3.2 cd qt-2.3.2 export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH make clean ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/ cd .. 需要指出的是:和YL9200的说明不同的是,configure的时候必须加上参数-no-xft,否则报错缺少freestyle.h等头文件,加这个参数表示不编译xft字体库 这样就可以使用uic来生成界面的cpp文件了。 然后还要编译一个qvfb工具,用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。这个工具在qt-2.3.2中,不过我们得要给它编译出来: cd $QTEDIR/tools/qvfb make clean tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/
安装Qt/Embedded 2.3.7 tar xfz qt-embedded-2.3.7.tar.gz cd qt-2.3.7 export QTDIR=$ QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure –qconfig local–qvfb -depths 4,8,16,32 make sub-src cd ..
–qconfig local这个参数是说明编译时用自带的一个配置文件qconfig-local,需要先将其copy到qt-2.3.7/src/tools/下,或者configure时用这句也成:./configure -no-xft -qvfb -depths 4,8,16,32
这个配置文件是YL9200光盘自带的,如果没有也很简单,就如下一小段而已:
/********************************************************************** ** qconfig-local **********************************************************************/ #ifndef QT_H #endif // QT_H // Note that disabling more features will produce a libqte that is not // compatible with other libqte builds. #ifndef QT_DLL #define QT_DLL // Internal #endif
#define QT_QWS_IPAQ // Platforms where mouse cursor is never required. #if defined(QT_QWS_IPAQ) || defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_SL5XXX) # define QT_NO_QWS_CURSOR # define QT_NO_QWS_MOUSE_AUTO #endif
如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。 在Virtual framebuffer 上运行: export QTDIR=$QTEDIR export PATH=$QTEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/examples/launcher qvfb -width 640 -height 480 & sleep 10 ./launcher –qws 以上是使QT在上位机编译的工具,要使QT开发的界面能在9200上跑,我们还需要再编译一次Qt/Embedded 2.3.7(for target),这也就是为什么qt-embedded-2.3.7-free.tar.gz要解压两次了。 交叉编译平台:安装qt-2.3.7-target export QT2DIR=$PWD/qt-2.3.2 export QTEDIR=$PWD/qt-2.3.7-target cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH make clean ./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32 make 这步完成后,我们会在/$QTEDIR/lib/目录下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 这四个文件,我们可以使用file 命令来查看这个库文件是否是我们需要的在开发板上跑的库。 file libqte.so.2.3.7 libqte.so.2.3.7: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped 我在最后一步make的时候,最后的examples里面的代码没有编译通过,但是libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 这四个文件已经生成了,人家的demo写的不好不管它,反正我也编译成功了! 有了这个库以后我们把它拷贝到我们的开发板中相应的库目录下面:/usr/lib 直接用GFTP呗,这有何难!一试问题又出现,在cramfs文件系统中/usr/lib是只读的文件夹,事实上文件系统里只有/var文件夹是可写的,所以直接烧进去呢是行不通滴,咱们得曲线救国-重新编译根文件系统!……Oh, My God! 这就像回我家那小山城的铁路一样,眼看着城门口的山头就在几里之外,铁路却要缠绵蜿蜒几小时~~
2、烧写根文件系统
先找到原来的根文件系统myroot.cramfs,将其拷贝到任意目录下,在在该目录下建立两个文件:比如chang 和guo,(这个是人家光盘提供的名字,我想了很久也没想通为什么叫这么土的名字) 将myroot.cramfs 挂接到chang 目录 mount myroot.cramfs chang -o loop 进入chang目录并将chang 目录下的内容压缩 tar -cvf /chang 的上一级目录的绝对路径/1.tar ./ 这样将在chang 的上一级目录产生一个1.tar 的包,将包解压到guo 目录下,再卸载挂接 umount chang 然后将1.tar拷到guo目录下再将打包的根文件系统的里的内容解压 经过上面的步骤就可以将自己的驱动和应用程序添加到cramfs 根文件系统中了 这里我将上面编译出来的libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.7 四个文件添加到/usr/lib,再制作cramfs 根文件系统: 先将mkcramfs 文件拷贝到guo 所在的目录,在这个目录下运行命令: mkcramfs guo myroot1.cramfs OK!编译成功!下来再将它烧写到flash中替换掉原来的根文件系统
进入BIOS后用netload 命令启动TFTP 来传输根文件系统,然后用tftp将文件上传: 用批处理命令写是这样的: tftp -i 192.168.0.100 put myroot1.cramfs 接着,用命令nfprog 将根文件系统烧写到NANDFLASH分区,选择分区4,烧写完就可以启动linux了 先用setbp命令设置内核传递参数: root=/dev/mtdblock7 load_ramdisk=0 console=ttyS0,115200 mem=64m devfs=mount 然后用senv保存设置。然后运行mrun就可以跑linux 了。也可以用命令bootkey 1 1 来设置linux的自启动,当然之后要记得senv
3、编译运行QT程序
终于等到激动人心的这一刻可以看看俺可爱的QT小界面了。不过现实总是无数次地打击我们的热情,教育我们冷静+忍耐。这不,还需要使用qt-embedded-2.3.7-target的工具重新编译一边。在此之前还得先修改tmake 配置文件tmake-1.1.1/lib/qws/linux-arm-g++/tmake.conf: 将其中“TMAKE_LINK= arm-linux-gcc” “TMAKE_LINK_SHLIB= arm-linux-gcc” 修改为:“TMAKE_LINK= arm-linux-g++” “TMAKE_LINK_SHLIB= arm-linux-g++” 然后设置编译器路径编译,比如编译/examples/progressbar下的工程: export TMAKEPATH= $TMAKEDIR/lib/qws/linux-arm-g++ export QTDIR=$QTEDIR tmake –o makefile progressbar.pro make 如果没出现错误的话就可以在当前目录下找到progressbar这个可执行文件,它就是在我们将要在开发板上运行的文件。至此上位机的工作结束,只要配置好下位机就可以运行了。
下位机的安装实质上是将需要拷贝到开发板上的文件整理到一个单独的文件夹里面,然后通过上面介绍的mkcramfs制作根文件系统,包括库文件,qt-x11-2.3.2,qt-embedded-2.3.2,QTOPIA。今天偷个懒,因为开发板上的程序在板子到手时已经安装好了,就先将就现成的吧^_^ 用ftp将原先编译好的progressbar 执行文件下载到9200上,执行!大功告成,界面出现!
后记:这就是耗费了我整整一天的QT安装之旅,本人比较没天分搞东西不是这里出错就是那里出错。今天一天能搞出来已经算相当顺利了。为了防止下次再出错所以把过程整理成文,也供广大朋友参考指正。 2007/08/04 Morni y~ alanti y~年轻的时候,我们无处宣泄激情、痛苦、愤怒、麻木,盲目地以为什么什么是全部
某日某地遇到遥远的讯号,来的没有一点朕兆,终于明白什么叫“一切有为法,如梦幻泡影,如雾又如电,应作如是观”
现在的我就被一个巨大的矛盾包围着,但处在矛盾中心就仿佛也无风雨也无晴,至于不时多被人鄙视两下什么敏感忧郁那是常有的事
尽管鄙视吧,我把Gun N' Roses开到最响,就像把油门放满
无法逃避的时候最怕时差 它终于在最黑暗的时候又出现了 每天精贫力尽半夜还睁个大眼睛 可每天早上还晕头转向的时候想到无法逃避的问题又不得不爬下高高的床...
但是这一切,我甚至连希望它早点结束的权利都没有;能做的只有肆意挥霍,把自己搞的很累,以期待时差可以早日调整回来
2007/07/20 有余涅磐早晨七点至八点之间,那隔光效果极佳的寝室,那个严肃而悲哀的问题不期地再次闯入我的脑子的时候,我觉得我这一天的好心情又完了...
一个从我懂事以来记忆最深刻对我的性格影响灾难性的问题,20年来每次都这样的不期而至。我躺在床上茫然地望着它,相熟已久的朋友,积怨已深的仇人,直有种鬼压床的惧怕
我相信有人生来是要承受无常之苦的,可我一直不相信我会被选中--我既也没有聪明到那个程度也没有特殊的视力或者境遇,甚至我这么怀疑的人对皈依这个命题都难以想象。
皈依--如果哪天软弱真的征服了我,我会考虑一下吧。关于我对宗教的态度,有人说过一句很搞的话:“他哪信啥宗教啊?他是信善”。信善信恶只是心;而我需要的是灵魂的指引。
然后问题更尖锐了,尼采说上帝死了,弗罗伊德发现上帝没有存在过,萨特要我们自己去找寻生命的意义,怎么听都觉得他们在隔靴搔痒,他们在造势,貌似就是因为自己没找到答案然后为了呼唤起一大群人帮他们一起拷问终极关怀的问题而抛出的命题。是的,我这个卑鄙小人就是这么想的,他们提出问题又不解决,自己都解决不了还拿出来祸害我这么一低智商动物,我最郁闷的事情就是老是要为一些决定不了的事情改变不了的事情想了也没有用的事情老是去伤神;而那些很有用很实际很求是端正态度可以解决的事情老是被我踢在一边。但愿哪天我生出一个孩子来千万不要像我这样,否则他要是跟我一样跑过来问我“爸爸,爸爸,你说宇宙的边界在哪里呀?宇宙从什么时候开始的呀?”的话...我真的要咯屁了!我的童年就是这么一路咯屁过来的。
寝室的隔光效果让我每天都有在极夜的感觉,总是做梦一个接一个事情一个接一个地方的历险,今天被追杀明天被谋杀后天还要跟野兽搏斗,这让我老觉得有异象,可是生活却每天太平无灾。最叫我郁闷的是梦里时不时会有同一个人出现,要么救我要么杀我要么与我一起跟老虎打架。这让我百思不得其解。如果人家在我心中是一好人那至少不会梦到被人家干掉吧...
哎,混乱的生活,没有信仰的年代。远离颠倒梦想,究竟涅磐。三世诸佛,依般若波罗蜜多故,得阿褥多罗三藐三菩提。 |
||||||||||||||
|
|