tag 标签: 软件外包

相关博文
  • 热度 29
    2014-7-9 19:44
    2132 次阅读|
    0 个评论
     GDB 调试文档                       作者:下家山 前言:···· 1 一:what is GDB·· 1 二:从哪里可以获取···· 1 三:make ready·· 1 四:configure·· 2 五:debug hello example·· 2 六:run gdbserver·· 3 七:run client·· 3 八:碰到的问题···· 4 九:结束语···· 5   前言:      因GDB这部分我做得很不理想(不能debug module,也不能debug kernel),所以心得和调试经验就比较少。 一:what is GDB      GDB-即GNU-Project-Debugger; 二:从哪里可以获取 我用的是gdb-6.4,官方下载地址:http://ftp.gnu.org/gnu/gdb/ 官方相关文档:http://sourceware.org/gdb/current/onlinedocs/gdb_toc.html 三:make ready      因为我的环境是:      Host:一台装有ubuntu的PC(192.168.110.77)      Target:LYTs3c2410开发板(192.168.110.9)      Host上的目录结构为:           root@pc-ubuntu:/home/cgm/gdb/                 (总目录)                                  gdb-6.4               (即解压后的源码)                                  build/                 (build目录)                                      client/             (gdb-6.4 build相关信息)                                      server/             (gdbserver build相关信息)                                  gdb_client_install/    (gdb-6.4 make install 安放目录)                                  gdb_server_install/  (gdbserver make install 安放目录) 四:configure Configure client root@pc-ubuntu#cd /home/cgm/gdb/build/client   #/home/cgm/gdb/gdb-6.4/configure --target=arm-linux –prefix=/home/cgm/gdb/gdb_client_install/ #make #make install Configure GDBServer #cd /home/cgm/gdb/build/server #CC=arm-linux-gcc /home/cgm/gdb/gdb-6.4/gdbserver/configure –host=arm-linux –prefix =\ Home/cgm/gdb/gdb_server_install/ #make #make install 五:debug hello example      准备hello.c文件      如:      /*Hello.c*/ #include int a=9; int main(void) {        char *hello="hello!\n";        unsigned short i;        for(i=a;i16;i++)        {               printf("%s",hello);        }        return 0; } #arm-linux-gcc –g hello.c –o hello 将会得到名为hello的可执行文件 六:run gdbserver copy gdbserver 和hello到target nfs 目录下 #cp / Home/cgm/gdb/gdb_server_install/bin/gdbserver  home/cgm/Linux/root_nfs/ #cp /home/cgm/gdb/hello/hello  /home/cgm/Linux/root_nfs/ 通过NFS方式加载kernel zImage #ls类容如下: #./gdbserver 192.168.110.77:1234 hello 现象如下: 这样gdbserver就处于listen状态,等待client的链接. 七:run client #cd /home/cgm/gdb/gdb_client_install/bin/ #./arm-linux-gdb /home/cgm/Linux/root_nfs/hello现象如下 #target remote 192.168.110.9:1234 将会看到 在target端则可以看到 接下来就可以在client端输入各种gdb的命令了 如: #list 结果如下: 还有break,info all-registers,info locals,print a(a为变量)等命令。 (gdb)break 11  (即在11行处设置断点,程序运行到此处则停下) (gdb)info all-register (显示左右register值) (gdb)info locals(显示所有局部变量的值) (gdb)print a (a即为hello.c里面的一个全局变量,此命令即显示当前a的值) 八:碰到的问题 问题一: # ./gdbserver 192.168.110.77:2345 hello ./gdbserver: error while loading shared libraries: libthread_db.so.1: cannot open shared object file: No such file or directory 到相关的toolchain (我用的是arm-3.4.1)里面找到需要的库,考到root_nfs的lib下面即可。 问题二: Run命令不能执行 在host上,run命令不能执行,必须用C。具体原因我还不知道。 九:结束语 调试可加载模块(.ko)还没有实现,哪位实现了,可否与我联系,本人一定请教。        2008-6-13   下家山     写于上海.松江               Email:ximenpiaoxue4016@sina.com           
  • 热度 56
    2012-11-25 16:51
    4679 次阅读|
    32 个评论
      今天偶然翻到我原来工作的盘,发现一个很好的文档,现在不是流行“云”么,前几天见了个朋友,说到他们的wifi module可以集成tcp/ip协议栈,很方便连到云端,呵呵,想起自己刚毕业时一天到晚看到的诺基亚白皮书里WAP协议中的很多参考图),就把外网画成一朵云的样子(大笑想起当年如日中天的NOKIA,今天也有没落的一天,真是感叹三十年河东,三十年河西,一个公司的决策层如果不能高瞻远瞩,就离没落越来越近了,google有“云电视”,中国很多公司在做“云存储”!其实,很多IT者也不知道“云”到底什么概念,与天上的云有什么关系!              我一般不喜欢转载别人的东西,希望搞原创(魔鬼搞原创真的很累,而且别人转载也不注明出处和作者,就像这篇讲云的文档一样,我原来从同事那里考过来的时候就没有看到出处,我今天想注明都不可能,),但是,这篇云的文章写的诙谐幽默,在此向作者致敬!!!强大        下家山转载(各位找到作者出处的请补个贴,谢谢!)   云里雾里的云计算 【1】   有一次去开会,台上的人在讲云计算。我问身边的听众,“听懂了吗?感觉如何?” 听众答,“云里雾里的,感觉特神秘。” 我说,“这说明讲员讲得好。有没有注意到寺庙里的气氛也很神秘?不神秘,就没有崇拜。不崇拜,你怎么肯掏钱买香火?”   【1】云计算要解决什么问题? 1997年,Google的两位创始人,Larry Page和Sergey Brin,找Andy Bechtolsheim募集投资。 Andy问,“你们打算做什么?” Larry和Sergey答,“打算把互联网上所有网页都下载,然后建一个搜索引擎。” Andy说,"把互联网上所有网页统统下载?!需要多大空间?   几个Giga不行吧,几个Tera也不行吧,几个Peta,几个Zetta?。。。嗯,我看几个Googol也许才能撑得住。知道Googol吗?就是10的100次方,就是一个1后面拖100个0!" 估计是Andy觉得这个项目不太靠谱,所以给的钱不多,只有1百万美元。只有这么一点钱,如果去买高端的存储系统,显然是不够的。走投无路的情况下,Larry和Sergey决定用PC之类便宜的机器,组建一个机器集群。先凑合着用,等以后数据量增加以后,再购买更多的PCs,扩大集群的容量。 这个故事的真实性,有待考证。但是从中可以看到Google集群,也就是Google云计算的核心,要解决的四个问题。 1. 大规模的存储空间,用于存储海量的数据。 2. 随着业务的发展,新的数据源源不断地增加,存储空间需要相应扩大。用术语讲,这叫可扩展性,scalability。 3. 系统的硬件设备必须便宜,通常使用大宗产品(commodity),譬如PC,或者价格便宜,中等性能的Dell server。 4. 便宜的硬件设备,经常死机。所以在设计这个集群的时候,必须保证不能因为个别机器死机,导致整个系统的崩溃。也就是系统的稳定性要好,reliability。   【2】从Google集群到云计算,云计算的商业模式 起初Google集群是供内部使用的系统。Google为什么要开放这个系统,包装成云计算平台,给外界使用呢? 这要从Google的商业模式说起。Google的绝大多数收入来自于广告,其它产品与服务的收入十分有限。其它产品包括Google盒子,这是给企业内部网用的搜索引擎。把Google盒子安装到企业内部网,企业员工就可以搜索企业内部的文档,包括可以公开的文档,也包括仅供企业内部查阅的资料。虽然技术很新颖,但是卖得并不好。据ZDNet的报道 ,2008年度,Google盒子的收益,占Google总利润的份额,不到2%。       Google search appliance, 俗称Google盒子。 Courtesy http://mytwentyfive.com/blog/wp-content/uploads/byme/Google%20Search%20Appliances.jpg 单一的收入来源,抗风险的能力差。譬如经济危机一来,各个企业的广告预算缩减,势必影响到Google的利润。怎么办?挖掘自身的优势,发现更多卖点,搞多种经营。 Google的技术优势在哪里?有人说,Google的搜索结果精确,所以PageRanking算法是其精髓。其实,算法容易模仿复制,即使几年前PageRanking是Google的独家秘籍,但是今日各大搜索引擎,都有类似算法。 让Google独步天下的是它的集群。2006年,Google集群的规模 是45万台机器。两年过去了,有人推测现在的规模又翻了一番。由于Google从不公布准确数字,所以大家只能靠Google给硬件厂商下的订单推测。 推测虽然不准确,但是即便是10万台机器的规模,在历史上也是从无古人的,在当代也是独一无二的。而且,更重要的,是这个超大规模的集群系统已经经历了10年的实际运行,在实践中被证明,它是可靠的,是可扩展的,每台机器的价格也是低廉的。完全符合上一节列举的四个要求。   但是如何依靠这个独门神器挣钱呢?思路有两条。   1. 做hosting,数据托管。其它企业不用建自己的数据中心了,把数据存在Google的集群里得了,每个月交点托管费。 2. 不少Google的应用服务很有人气,譬如Gmail,Gtalk,Reader,Online docs,Picasa,Google earth还有YouTube等等。这些服务对于个人用户而言,完全是免费的。但是Google从来没有说给企业用户使用,也是免费的。譬如某家商店,开了一个网站,网站上需要贴很多照片,还要给个地图给顾客引路。这个商店不需要自己动手建照片存储中心,也不需要开发技术难度更高的地图软件,只要调用 Google提供的相关服务就好。商店建网站是为了赢利,所以Google当然要向商店收钱。 第二个思路还有个副产品,那就是给Google创造更高的流量。流量越大,说明观众越多。对于广告商来说,哪里观众多,就愿意在哪里投放广告。所以,如果第二个思路能给Google带来更高流量,那么会吸引更多的广告,给Google带来更多的广告收入。 Google的高管们一合计,觉得有钱途。于是乎,大张旗鼓地制造舆论,educate the market。 造舆论,讲究的是措辞的简练,气势的磅礴。这个新的服务叫什么? 用工程师的语言,准确地定义,应当是“超大规模的,可扩展的,低成本但是高可靠性的服务器集群系统”。Google市场部的人一听,头摇得像拨浪鼓。不行不行,既不简练,也没有气势。 研究来研究去,于是乎,“云计算cloud computing” 这个概念粉墨登场了。   【3】Google云计算的矛头指向谁? 有一次听一位IT业长者指点江山。长者说,“Google像一个阳光少年,一路顺风顺雨,张张扬扬。让人羡慕,招人喜欢。而微软像一个稳健的中年人,一路风吹雨打,过五关斩六将,毁誉参半。对于它的支持者而言,它是令人敬重的领袖,对于它的竞争者而言,它是令人敬重的对手,无论如何,微软是令人敬重的。” 问及电脑的killer applications,长者说了三个,1. Email,2. Office产品系列,包括Word,Excel和PPT等,3. Web。Email和Web都是泛称,不特指某家公司的产品,但是Office系列是微软公司的产品。长者这样的表述,足见他对微软的推崇。 很少有人不知道微软,但是很少有人很了解微软。随便问两个问题,1. 微软哪一年成立的,2. 微软在哪个城市成立的,有多少人答得上来? 微软是在1975年4月,于新墨西哥州的Albuquerque市成立的,后来搬到了华盛顿州的西雅图市郊。从那时到2008年6月30日,Bill Gates掌舵了33年。然后把CEO的宝座让给了Steve Ballmer,自己则专心致志去散钱搞慈善去了。 Bill Gates舍得捐出自己绝大部分家产,这个心胸让所有地球人叹服。但是Bill为了保证他的基金会平稳运转,自己退休的同时,让微软一员老将,Jeff Raikes跟着他离开微软,出任基金会的CEO。Jeff Raikes离职,对于微软而言,是不可估量的损失。为什么这么讲?   微软有三个产品系列, 1. 大家熟悉的XBox游戏机,是微软the Entertainment and Devices Division的拳头产品。这个部门是微软从单纯的软件公司,扩张到家电行业的触角。虽然XBox的成功毋庸置疑,但是它能不能给微软带来丰厚的利润,是摆在这个部门,尤其是其掌门人,Robbie Bach面前的巨大挑战。 2. The Platforms and Services Division,去年7月份被一分为二。一个专注于改善Windows操作系统,另一个负责在线服务。原来的掌门人,Kevin Johnson,挥挥衣袖离开微软,去Juniper Networks出任CEO。 新的两位掌门人中,有一位是我们中国人,毕业于复旦大学的陆奇。从复旦毕业后,陆奇留学美国CMU,攻读博士学位。博士学位拿到后,经历了短暂的动荡,1998年陆奇加盟Yahoo。他从工程师干起,扎扎实实,一路升到副总裁。2009年1月,陆奇学长离开Yahoo,出任微软Online Services Group的president。他的职责是,领导微软对抗Google。 2009年,争夺互联网霸主的大戏正式开演。     陆奇博士   Courtesy http://news.cnet.com/i/bto/20080619/qi_lu_mugshot_cred_yahoo_sm_300x422.jpg 3. 对于Windows操作系统的评价,好坏参半。但是对于Microsoft Office系列产品,业界基本上交口称赞。负责Office部门的原掌门人,就是刚才提到的Jeff Raikes。           Jeff Raikes Courtesy http://i2.sinaimg.cn/IT/it/2008-01-11/U58P2T1D1967790F13DT20080111134704.jpg 2009年上演互联网争霸赛,微软与Google双方的战略意图相当明显。 1. 微软以陆奇为主帅,强攻Google的核心业务,网络搜索。 2. Google砸重金推广云计算,挑战微软的拳头产品,Outlook email系统,和Office产品系列。 攻防战的关键,在于寻找对方的软肋。   Microsoft Outlook vs Google Gmail Microsoft outlook email系统的软肋,在于它的后台系统不够稳定,容量也不容易扩展。对于用户而言,经常会遇到Outlook服务器联系不上,以及存储空间不够的麻烦。 看准这两点,Google把Gmail系统的号召力定位在,1. 稳定性,2. 无限的存储空间。Google之所以敢于这么叫阵,本钱就在于云计算平台。 当然微软也不会示弱,它们反制的着力点在于保密性。 譬如有一家企业叫foobar,Google的销售人员游说到,“别用Outlook了吧,那玩意儿经常掉线,而且隔三岔五地骚扰你说,存储空间没有了,请立刻删除不必要的emails。你的emails都很重要,怎么能删呢?用我们的gmail吧。”  Foobar公司的IT主管说,“我们公司的邮箱地址是@foobar.com,换成@gmail.com,不仅不方便,而且也有损于我们公司技术实力的形象。” Google的销售人员说,“不用换邮箱地址,表面上看仍然是@foobar.com,用户也可以继续使用Outlook桌面工具,但是后台服务器被悄悄地换成了Gmail的云计算平台。” Foobar公司的IT主管心思有点动摇。 这时候,微软的销售人员上门,说到,“听说你们想把email后台系统换成gmail?这可需要一点勇气。你们把公司所以emails,存放在Google的平台上,万一Googler与服你们的emails,贵公司的商业机密,。。啊,哈哈。” 所以,为Google进言,欲挑战微软outlook,必先解决gmail的保密性。也就是其它公司的emails虽然存放在Google的云计算平台,但是Google能够提供足够的技术保证,即便是Googler有意与服,他们也看不到。   Microsoft Office vs Google Docs Microsoft office 产品的软肋,在于所有文件存放在电脑本地。 譬如我在办公室写了一个设计草稿,通过email把文本发给一个同事审阅。晚上回家后,查看email,收到同事回复,说他做了一些文字上的改正,修订版本放在email的附件中,同时建议多加几个插图。我加了几个插图后,文件尺寸变得很大,email发了很久,还是没有顺利发出。于是我把文件存在U盘上,第二天上班后,拿给同事看,然后进一步修改。 Google的销售人员游说到,“你这样左一个文本,右一个文本,不仅不容易找,而且修改过的内容很容易遗漏。用Google Docs,就可以省掉所有这些麻烦。文本放在Google云计算平台上,无论你是在办公室里,还是在家里,你都可以对同一份文本进行修改。而且你可以与你的同事共享这个文本,他也可以对同一份文本进行修改。” 我问,“万一我不同意同事的修改怎么办?” Google的销售人员回答,“没关系,就像wiki一样,所有修改都有记录。如果需要,你可以恢复旧版本。还有,如果你需要查找几年前你写的另一份文件,你不必记住名字,只要一搜索就可以从故纸堆里找出来。” 于是我心旌动摇,准备建议领导把公司的设计文档全部放到Google Docs里去。这时候,微软的销售人员上门了。“听说你要建议把公司所有机密设计文件,转移到Google Docs中去?不怕Googler偷看呀?” 我说,“Google已经提供了解决方案,给我们所有文件加了密,密钥掌握在我们手里。即便Googler想偷看,他们也看不到。” 微软的销售人员说,“这样就好,安全第一。另外,你们的设计文档格式很简单吗?示意图怎么画,Google Docs有类似于微软Visio那样的工具吗?还有,如果你要比较两份不同的文件有什么差异,Google Docs有没有微软Word那样‘比较与合并’ 等等功能?” 微软反制的着力点在于,Google Docs的所有操作都在浏览器里完成,所有功能都通过Ja分隔vaScript实现。受制于Ja分隔vaScript的限制,Google Docs在功能上,不仅目前赶不上Microsoft Office,而且预计在相当长的未来,也不可能与之抗衡。   【4】云计算大战,Google出招   两军对垒,通常双方阵线连绵数十公里。在发动进攻的时候,很少出现全线推进的情况。相反,进攻往往出现在有限几个突击口上。集结强大兵力,在几个突击口上猛烈打击,期望在敌方阵线撕开缺口,然后向敌方纵深挺进,分割敌人阵线,再逐个合围,各个击破。   巴巴罗萨战役 Operation Barbarossa Courtesy http://upload.wikimedia.org/wikipedia/commons/3/34/Operation_Barbarossa.png 大公司之间竞争也有类似特点,双方都有很多产品与服务,而且功能类似,这就像战争中两军对峙的阵线。当一个公司向对手发动竞争攻势的时候,往往选择少数几个产品,大做广告和其它市场推销活动,以期迅速扩大在相关市场的占有率。这类似于在战争中,选择突破口,集结兵力,发动冲击,企图撕开敌军阵线。 譬如Google Docs,虽说它上线已有相当时日,但是从没有见到Google大规模宣传这个服务。所以Google Docs与Microsoft Office,是对峙的阵线,而不是发动进攻的突击口。 Google在云计算战役中,选择的突破口是什么产品与服务呢?答案,Google gadgets。   Google gadgets Courtesy http://www.elanso.com/U/Db3/b3a49166ba7dcceb2221664c2e6181f1/128317955143437500.gif Google gadgets简化了建网站的工作。每个网页可以视作多个元素集成,譬如上面显示的网页包含6个元素,从左上到右下分别是天气,时钟,日历,YouTube视频,生活小窍门,以及搜索。网页元素,portlet,这个概念早在1999年就已经出现。Google gadgets是portlets的一种实现方式,与其它实现方式相比,Google gadgets的优势是使用方便。 譬如某人想建一个网站,在网站的首页的下方,想插入一个搜索框。他不用担心如何去实现隐藏在页面背后的搜索引擎,他要做的,仅仅是在网页的HTML里,插入几行 Ja分隔vaScript。这几行Ja分隔vaScript,不仅在页面上显示了一个搜索框,而且更重要的是把这个网页与Google的云计算平台联系在一起。每当用户输入搜索请求时,这段Ja分隔vaScript就把用户的请求,转发给Google搜索引擎,然后接收Google搜索到的结果,并显示在网页上。 Google gadgets的意义在于,不再像以往的产品那样,在电脑本地获取服务和内容。Google gadgets的服务和内容,来自于Google云计算平台。譬如以往的时钟,显示的时间是由电脑自己演算出来的。如果系统设置错误,时钟就有可能出错。但是Google gadget的时钟,它的时间不是电脑本地演算的,而是从Google云计算平台索取的。只要Google云计算平台不出错,只要网络链接正常,即便电脑本身的设置出了问题,Google gadget时钟也照样准确。   Google gadgets不仅可以给建网站的人提供便利,基于同样原理,Google又推出了Google desktop gadgets。它给千千万万普通的电脑使用者,带来多样化的,时尚的服务。       Google desktop gadgets Courtesy http://vishnus.name/blog/files/vishnu_yahoowidgetmemoryuse.jpg   有人说,Google gadgets让电脑弱智。因为一旦Google gadgets大行其道,电脑就无需强大的CPU和存储空间,它所需要的无非是浏览器,接收用户的请求,转发给Google云计算平台,云计算平台提供内容与服务,然后浏览器接收这些来自云计算平台的内容与服务结果,并且把它们显示给用户。   其实,企图让电脑弱智的,不仅仅是Google云 计算,早在1996年,Oracle总裁Larry Ellison就提出过网络电脑(Network computer)的构想。网络电脑的功能,仅限于浏览器,而内容与服务来自于网络服务器端。与Google云计算平台不同的是,Larry的构想是,网络服务器端最好是Oracle的数据库以及Oracle的应用服务器。     十多年过去了,Larry的构想没有成为现实,原因有三,   1. Network computer的卖点是便宜,因为与传统PC相比,NC无需昂贵的CPU,内存和硬盘。但是近十年来,PC的价格迅速下跌,NC的卖点失去了吸引力。   2. Larry Ellison设想的,以Oracle Database为核心的网络服务器,没有提供很好的可扩展性,也没有提供大量的有吸引力的应用。   3. 网络带宽的发展,没有超过PC计算能力的发展。   十年后的今日,以Google云计算平台为代表的网络服务器集群,比Oracle Database有了长足的改进。不仅可扩展性更好,而且Google提供了很多能吸引人的服务,譬如搜索,视频(YouTube),地图等等。   同时,虽然网络带宽的发展没有超越PC计算能力的发展,但是至少在很多地区,网络带宽不再是制约网络服务发展的瓶颈。   Network computer失败的三条原因中,两条发生了变化,所以,Google拾起老概念,换上新包装,向微软发起攻势。其战略目标,无非是弱化PC本地计算能力的重要性,增强对Google云计算平台的依赖性。   下一步Google gadgets的发展方向是什么?   请注意,目前绝大多数gadgets都是单向使用Google云计算平台所提供的内容与服务,而缺少促进用户上传新的内容和新的服务的gadgets。   所以,不妨大胆预测一下,Google下一步将非常热衷推出像论坛(forum),维基网页(wikipage)这样的gadgets。通过它们,促进用户给Google云计算平台上传用户生成的数据。   进一步,Google将投入巨大资源,发展AppEngine。AppEngine的用处是方便用户开发新的服务逻辑,并且在云计算平台上运行这些新的服务。但是AppEngine的开发,势必遇到很多技术上的困难。详细分析,我们留给下一篇来讨论。   【5】是云计算,还是云存储?   Gadgets的目标是方便大家建网站。但是单靠gadgets,建网站的工作还是不够方便。   通常网站有三个组成部分,1. 网页,2. 业务逻辑, 3. 数据存储。如果说网页相当于商店,那么业务逻辑相当于车间,而数据存储相当于仓库。商店,车间和仓库三者中,技术含量最高的,当属车间。   因为文件太大,无法让各位看官即刻饱眼福!见谅!各位下附件   吧!各位有查到作者出处,补个贴吧!
  • 热度 31
    2012-10-8 21:11
    4562 次阅读|
    7 个评论
    最近收到一位初学者的问题,因为比较典型,而且我也做了比较长的回复,所以,贴在这里与大家共勉!   问题:   因为是学计算机的,所以尽管对嵌入式很感兴趣却止步在操作系统和硬件中间的一道坎上。我们对电子的东西一窍不通,甚至都没亲自做过一个连接串口的设备控制器的驱动。   恳请老师给做做启蒙帮忙开窍。我举个例子。假如我现在在淘宝或者电子市场买到一片线阵CMOS,我还能买到一个运行Linux的开发板比如Mini2440,然后我想做的事是自己拼一台扫描仪。那么怎么就能让这个开发板上的系统来驱动CMOS,让它运行。这中间要做什么,CMOS输出的信号是不是还要经过什么处理,最后又以什么样的形式到达串口或者并口或者其他什么接口,然后这个硬件设备又如何注册自己到Linux,Linux又如何通过驱动程序控制设备。比如我现在让它动,给它一个命令,步进电机就能按我要的速度带动这个CMOS运动。   操作系统只告诉编程人员调用系统函数,调用块设备字符设备的读取函数或者写入函数,但写了东西时候怎么进到设备里面?是不是有通用的设备控制器,针对某一种总线买来就能用,而外围设备又怎么搭配这样的设备控制器?CMOS出来的电信号又是怎么安排流入总线进入存储设备等等这些。我甚至都不知道设备控制器还要什么外围辅助的电源吗?还要什么别的控制吗?时序又是怎么确定的,频率多大是哪里决定的等等等等。 所以希望在这里能一步一步学。恳请各位给予指导、启蒙。我想除了这个CMOS扫描仪的例子我也举不出来更好的例子了,希望能有人解答问题。 谢谢!!! 我的回答:   我也是计算机专业毕业的,在嵌入式这个领域,学计算机的其实占有很大的优势,因为他们对OS的理解比电子信息,自动化的要好,当然在底层芯片的工作原理上,却不占优势,但,整个嵌入式领域,OS却是最深奥的!其实,你考虑的很全面和深刻了,如果还在学生阶段,若能尽快动手做些东西,那么你今后应该可以在研发这条路上走得很好!你的这些问题,我没有时间一一作答,下面我举一个简单的通过I2C总线如何读写EEPROM的,例子,希望对你有帮助! 要实现一个这样的功能,首先,你要看你这个要控制的设备的datasheet,搞清楚他的从设备地址,子设备地址,(如果从来没有接触过I2C总线,那么你要研究研究),然后就开始要写驱动了,写驱动当然要熟悉linux驱动架构,linux驱动主要分模块驱动和内核驱动,(通常大家所说的网络设备,字符设备,块设备是说的设备的分类,想必你可以理解),我们这里讲内核驱动,这种驱动在内核起来后会在文件系统dev下面生成一个设备文件,这个设备文件就是应用程序与内核(或者说驱动)沟通的一个纽带,那么怎么实现的呢! 在驱动代码里面,首先要配置I2C总线接口,然后映射虚拟地址,然后设置时钟,这个时钟是CPU这边I2C控制器(master)的时钟,不是你要驱动的那个EEPROM(slave)的时钟,然后就是注册设备文件描述符,建立设备文件了; 好,这个设备文件描述符,是个很大的结构体,其中有大家比较熟悉的函数如:open,write,read,ioctrl等函数,那么这些函数就相当于windows的那套API函数,是给应用程序调用的。这里当然要写一个open函数,一个close函数,还要写一个write,read函数,(具体怎么写,你去参考其他代码) 驱动是为应用服务的, 在应用程序这边,我们就可以调用系统函数open,write,read,close! linux操作系统把我们要控制的设备抽象成了一类对象(文件),所以叫设备文件,既然是文件,对应用程序来说就透明了,应用程序不用去关心驱动是怎么写的,他只要知道这些接口函数该怎么调用就行了,而且象通用的open,write,read函数都是象访问一个文本文件一样,没有什么区别!!!   由这个问题想到的:   我一口气回答完了这个问题,而且写了那么多,但我总觉得还有些东西没有告诉这些初学者!现在其实已经到了中午12:21,但是,这就就像写作文,灵感来了,想一气呵成,所以继续写完吧,也了却了一桩心思!我很热爱研发工作(我曾因用arm7控制image sensor拍出天花板图片而欣喜若狂,想出去表达这种欣喜,晚上10点多,打个的士却不知去哪里玩,最后去网吧打游戏),我在研发之中找到了自信,找到了生命的意义,人一旦有了自信,工作中的,生活中的问题都会有信心去解决,(呵呵,老板听到这样的心声应该在窃喜,因为只有这样的工程师才能做出真正的产品,才会不那么跟他计较待遇,但话又说回来,这样的工程师老板会出高薪强这要)   我做嵌入式9年研发,2年教学,我也从对研发工作的热爱但又不知该如何入手走过来,嵌入式确实涉及面很广,硬件软件(当然我这里说的是底层,就是做driver或BSP,firmware这些职位的,上层应用的严格讲不叫嵌入式工程师),硬件要看懂原理图,IC datasheet,软件要熟悉相关总线协议,呵呵不要被驱动,协议这些字眼吓到。(驱动,就是让某个硬件设备动起来,就是设置里面相关register,裸奔时代其实就是一种驱动,只是大家不那么叫而已,协议,就象看间谍剧里面的地下党接头暗号,简单的很简单,负责的当然很复杂)!   那么嵌入式该如何学呢!现在的很多老师,书籍,培训机构,一谈到驱动,就是虚拟地址什么的,在我看来那是故弄玄虚。所以,在我的教学里面,我从来就不是一上手就跟学生讲什么虚拟地址,首先要让他们有个感性认识,那么什么是感性认识,举个例子!声卡驱动,先也不去讲什么驱动,先移植一个mplayer,先听听美妙的音乐是自己开发板上出来,然后有了这个兴趣,有了这个乐趣之后再去看内核代码,应用程序!而且,这里还有个误区就是,一些初学者,一上手就要自己写驱动,可以说这是不可能的事情,所以,各位如果真想学好嵌入式linux,还是先多看看里面的驱动是怎么写的,只有熟悉了现有的linux驱动架构,你才可以写出自己的驱动!而且,不要贪多,什么驱动都想学,其实先找个比较容易的切入点,把某一种驱动确实搞清楚后,再去拓展也不迟!   裸奔也叫嵌入式哦,因为嵌入式一般都会跑OS,所以,我这里也是跟Linux一起说的!                          2012-9-12   下家山     写于上海。松江                                       本文是我个人意见, 有什么问题可以给我邮件ximenpiaoxue4016@sina.com或加我群198204885
  • 热度 21
    2012-8-9 16:17
    1627 次阅读|
    0 个评论
    晦涩的理论如果仅仅是纯粹的理论只会让你更加难以理解,但如果能与实验或实例结合调试,把这些晦涩的东西的本质还原出来,那么你将会领悟到那些设计者(这些人很多都是科学家)们的睿智,慢慢的,你的领悟能力,或者说理解能力,或者说探索未知的能力将会提高到一个新的层面)——实验才是硬道理。 作者:下家山(索漫科技培训教材 转载请注明)     http://www.xiajiashan.com 一:对前面问题的解答 3.8思考问题:在上述过程中,为什么SPSR 的值一值是nzcvqift_User????? 因为,我们程序一开始运行的状态是SVC(管理模式),而其备份模式是user mode。 3.9思考问题:当设置系统模式的时候,为什么SPSR显示Unavailable????? 因为,在用户模式和系统模式,就没有SPSR这个寄存器。 3.a思考问题:上述过程中,为什么没有设置用户模式????    这个问题,就是这个补充文档的内容,我们一起来探索。 作者:下家山(索漫科技培训教材 转载请注明)     http://www.xiajiashan.com   二:当我们代码从汇编到C后,是什么模式   三:当irq中断发生后,PSR是什么状态 四:当退出IRQ异常中断后,PSR是什么状态   ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城    上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 五:我们把user模式设置语句打开   作者:下家山(索漫科技培训教材 转载请注明)     http://www.xiajiashan.com     会出现什么问题??? 中断不会发生???                    2012-6-19                                    写于上海松江 作者:下家山(索漫科技培训教材 转载请注明)     http://www.xiajiashan.com  
  • 热度 28
    2012-8-6 16:44
    2188 次阅读|
    0 个评论
    LPC1114 系统时钟原理( 作者:下家山(请尊重原创,转载请注明)    http://www.xiajiashan.com   ) 六:主时钟六路输出 主时钟有六路输出,这六路又归纳为四类: 第一类:给系统时钟分频器 第二类:有四路,分别给SSP0外设时钟分频器(SSP0_PCLK)                        UART外设时钟分频器(UART_PCLK)                        SSP1外设时钟分频器(SSP1_PCLK)                        SYSTICK定时器时钟分频器(SYSTICK_timer) 第三类:给看门狗时钟分频器(WDT_PCLK) 第四类:给CLKOUT引脚时钟分频器(CLKOUT pin) 6.1 系统时钟           这里的系统时钟,包括给CPU内核(AHB,APB,Cortex-M0/3 FCLK, HCLK、SysCon 和PMU),ROM,RAM,FLASH;及所有外设如:I2C,GPIO,timer,UART,AD,SPI等共19个。 那么cortex系统是怎么来设计这些时钟系统的呢? 首先,Cortex给这19种时钟的每个时钟设计了一个开关,那么,我们怎么操作这个开关呢?在lpc1114中是通过AHB时钟控制寄存器AHBCLKCTRL来操作的。                       那么,系统时钟从哪里来呢?由图,我们很容易知道,是从主时钟通过“系统时钟分频器”得到。但是,为什么要分频呢?给AHB,APB外设时钟有的不能太快,比如I2C,所以要分频,大家好理解,但是给cortex的核心频率(FCLK,HCLK等)是越快越好啊,为什么还要经过“系统时钟分频器”来分频呢? 我想是为了睡眠状态,低功耗状态,待机状态等需要吧!!!在这个问题上我希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!! 6.2外设时钟   这里的外设时钟,指 分别给SSP0外设时钟分频器(SSP0_PCLK)                   UART外设时钟分频器(UART_PCLK)                   SSP1外设时钟分频器(SSP1_PCLK)                   SYSTICK定时器时钟分频器(SYSTICK_timer) 这些外设时钟的输入时钟都来自于主时钟,因为,主时钟很高,有些外设接收不了这么高的时钟,所以要分频! 这里有个疑问,为什么I2C,A/D这些外设没有独立外设时钟分频器呢?(希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!!) 为什么UART有16位分频因子还要设计外设时钟分频器呢?(希望有人加入更深入的研究与讨论,如果哪位有做过相关研究,请补充!!!) ======================================================================================= By 下家山 Q群 75303301        上海松江文汇路928号258室    松江大学城  8/6/2012   上海索漫科技  http://www.xiajiashan.com  专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训        6.3 看门狗时钟   看门狗时钟有三个来源, IRC振荡器; 看门狗振荡器; 主时钟; 具体选择哪个,由WDT 时钟源选择寄存器(WDTCLKSEL)决定!   看门狗时钟源选择后,还要经过一个分频器,当然你可以选择1分频(就是不分频)。 6.4 CLKOUT pin       首先,要搞清楚,什么是CLKOUT pin。CLKOUT pin,就是时钟输出引脚,或者说,在这个引脚上(PIO0_1)引脚上有象晶振一样的波形输出,这个有什么用呢?这个功能太好了,当你要接摄像头,或者视频转换类的芯片,这些芯片的输入频率有时候要根据应用变化,那么我们就可以接到这个引脚,也就是说,我们这个cpu,lpc1114可以提供一个晶振源给外设。 CLKOUT pin的时钟源有四个,分别是: IRC振荡器; 系统振荡器; 看门狗振荡器; 主时钟; 具体选择哪个,由CLKOUT 时钟源选择寄存器(CLKOUTCLKSEL)决定。   选择时钟源后,CLKOUT pin的分频器就不用介绍了吧!!! 索漫赠言: 不要被这些错综复杂的关系搞糊涂,觉得很麻烦就不去理清楚,其实当你试着去理清晰的时候,你会发现很有意思!整个过程也增加了自己探索未知的兴趣!!! 当我把这篇文章写完时,Cortex的时钟系统已经非常清晰,而且已经觉得非常简单!!!   2012-6-19                                    写于上海松江 作者:下家山(请尊重原创, 转载请注明)  http://www.xiajiashan.com,有什么问题可与我联系:ximenpiaoxue4016@sina.com