1、网际网路是资讯连线、虚拟连线,物联网是物物连线或者说装置、终端连线
①网际网路是虚拟互联,用网际网路技术搭建的虚拟平台或社群连线人与人或人与服务
②物联网是物物互联,用联网通讯技术或网际网路技术搭建物与物之间的系统或平台
2、举例:
①网际网路典型:微信、微博、QQ、百度、网游
②物联网典型:车联网(智慧公交、地铁等)、智慧城市、智慧电力等
3、使用技术区别:
①网际网路技术:例如网页、APP、资料库,连线技术主要是网际网路
②物联网技术:例如RF、蓝芽、WIFI、资料库、汇流排技术,连线技术区域网或专用网多一点
网际网路和物联网的区别:生态系统路径和结构完全不同、资料模型大小。
移动网际网路和网际网路的本质是基于手机和PC的线上资讯和内容推送和共享,资讯会消失也会重造,对大资料和云端计算价值有限。
物联网的本质是感知与服务,物联网的资料可交易,对于大资料和云端计算的价值巨大。
网际网路:网际网路是指将两台计算机或者是两台以上的计算机终端、客户端、服务端通过计算机资讯科技的手段互相联络起来的结果,人们可以与远在千里之外的朋友相互发送邮件、共同完成一项工作、共同娱乐。
物联网:通过装置在各类物体上的SIM卡、感测器、二维码等,经过介面与无线网路相连,给物体赋予智慧,可实现人与物体间和物体与物体间的沟通和对话。这种将物体连线起来的网路被称为“物联网”。
资料模型(Data Model)是资料特征的抽象,是资料库管理的教学形式框架。资料库系统中用以提供资讯表示和 *** 作手段的形式构架。资料模型包括资料库资料的结构部分、资料库资料的 *** 作部分和资料库资料的约束条件。
物联网和网际网路发展有一个最本质的不同点是两者
发展的驱动力
不同。互联
网发展的驱动力是
个人
,
因为,
网际网路的开放性和人人参与的理念,
网际网路的生
产者和消费者在很大程度上是重叠的,
极大地激发了以个人为核心的创造力。
而
物联网的驱动力必须是来自
企业
,
因为,
物联网的应用都是针对实物的,
而且涉
及的技术种类比较多,
在把握使用者的需求以及实现应用的多样性方面有一定的难
度。
物联网的实现首先需要改变的是企业的生产管理模式、
物流管理模式、
产品
追溯机制和整体工作效率。
实现物联网的过程,
其实是一个企业真正利用现代科
技技术进行自我突破与创新的过程。
物联网的发展推动了工业化和资讯化的结合。
从某种意义上来说网际网路是物
联网灵感的来源;
反之,
物联网的发展又进一步推动网际网路向一种更为广泛的
“
互
联
”
演进,
、
这样一来,
人们不仅可以和物体
“
对话
”
,
物体和物体之间也能
“
交流
”
。
物联网的应用是虚拟的,
而物联网的应用是针对实物的。
这个差异形成了两者的
应用在
成本
上的差异。
网际网路需要购买伺服器、
处理器以及各种技术,
而物联网
针对实物的成本会稍微小一些。
物联网中系统整合商的重要性比网际网路大得多。因为物联网涉及的技术和行
业太多,行业对系统整合的要求巨大。
1、网际网路:网际网路(英语:inter),又称网际网路,或音译因特网(Inter)、英特网,是网路与网路之间所串连成的庞大网路,这些网路以一组通用的协议相连,形成逻辑上的单一巨大国际网路。通常inter泛指网际网路,而Inter则特指因特网。这种将计算机网路互相联接在一起的方法可称作“网路互联”,在这基础上发展出覆盖全世界的全球性网际网路络称网际网路,即是互相连线一起的网路结构。网际网路并不等同全球资讯网,全球资讯网只是一建基于超文字相互连结而成的全球性系统,且是网际网路所能提供的服务其中之一。
2、物联网:物联网是新一代资讯科技的重要组成部分,也是“资讯化”时代的重要发展阶段。其英文名称是:“Inter of things(IoT)”。顾名思义,物联网就是物物相连的网际网路。这有两层意思:其一,物联网的核心和基础仍然是网际网路,是在网际网路基础上的延伸和扩充套件的网路;其二,其使用者端延伸和扩充套件到了任何物品与物品之间,进行资讯交换和通讯,也就是物物相息。物联网通过智慧感知、识别技术与普适计算等通讯感知技术,广泛应用于网路的融合中,也因此被称为继计算机、网际网路之后世界资讯产业发展的第三次浪潮。物联网是网际网路的应用拓展,与其说物联网是网路,不如说物联网是业务和应用。因此,应用创新是物联网发展的核心,以使用者体验为核心的创新20是物联网发展的灵魂。
活点定义:利用区域性网路或网际网路等通讯技术把感测器、控制器、机器、人员和物等通过新的方式联在一起,形成人与物、物与物相联,实现资讯化、远端管理控制和智慧化的网路。物联网是网际网路的延伸,它包括网际网路及网际网路上所有的资源,相容网际网路所有的应用,但物联网中所有的元素(所有的装置、资源及通讯等)都是个性化和私有化。
3、顾名思义,二者区别主要是在互联主要是建立在人与人之间的,而物联网主要是在智慧硬体物品之间的连结!
从大的范围来讲,没有网际网路,就没有物联网。物联网就是:物与物之间通过网际网路的通讯通道相互协调、控制、分析等。 如:家里的门恶意开启,那么门磁会给家庭闸道器一个开启讯号,家庭闸道器会通过网际网路发到伺服器,伺服器通过3G网或者简讯发到你手机。你手机获得讯息会立刻开启通知你远端检视,你只要一点按钮,那么又从网际网路返回到你家里的视讯监控摄像头,看到家里的状态了
1 物联网,顾名思义是物与物之间的联网。简单的说就是由物品资讯标识、感知、处理、传送4个环节组成的,利用网际网路(包括无线通讯网)的网路资源进行业务资讯的传送。
2 而网际网路其实就是利用通讯装置和线路将地理位置不同的、功能独立的多个计算机系统互连起来,以功能完善的网路软体(即网路通讯协议、资讯交换方式及网路作业系统等)实现网路中资源共享和资讯传递的系统。
网际网路 凡是能彼此通讯的装置组成的网路就叫网际网路
网际网路包含物联网
物联网的核心和基础仍然是网际网路,是在网际网路基础上的延伸和扩充套件的网路
物联网 物品与物品之间,进行资讯交换和通讯
目前的网际网路发展前景挺不错的
相对于人际间交流的网际网路,物联网是物与物之间的网路。当今社会已开始出现许多“物—物”联网的应用:如装有GPS卫星定位系统的运输车辆,以及装有RFID射频识别晶片的集装箱,可以自由通过不停车收费站,在无人化码头自动完成装卸。
网际网路与物联网的区别物联网=网际网路+各类感测器(RFID,条码,温度感测器,溼度感测器,压力感测器,视讯感测器,位移感测器等等)
神州泰岳全称北京神州泰岳软件服务有限公司,成立于2001年,公司是国内领先的综合类软件产品及服务提供商,着力于用信息技术手段,推动行业发展和 社会 进步,提升人们工作和生活品质,自公司成立以来,始终以市场为导向,深耕细作,创新拓展,形成了以“IC T运营管理”、“物联网与通信技术应用”、“手机 游戏 ”、“人工智能与大数据”为核心的相关多元化发展格局。
1、 物联网通信、人工智能/大数据、IC T运营管理、手机 游戏 。
目前公司核心业务板块是:物联网通信、人工智能/大数据、IC T运营管理、手机 游戏 。
2、技术与产品优势。
IC T运营管理领域公司紧密跟踪最前沿的技术发展趋势,深度挖掘客户对IT系统,尤其在线关键业务,IT应用系统的运维管理需求,形成了一系列独特的软件产品和方法论,技术水平,在国内处于领先地位。手机 游戏 领域,公司旗下重要手游研发团队---壳木软件是中国目前为数不多的拥有独立研发世界水准的3D 游戏 引擎能力(可兼容各种层次的移动设备)的一流手机 游戏 研发团队。
3、 人工智能与大数据。
人工智能与大数据是公司基于多年智能生产生活技术、信息化数据及技术积累所形成的创新业务之一。人工智能方面,公司在智能语义分析、智能人机交互、智能机器自学等领域形成了丰富产品,并在行业中得到应用和好评。大数据方面,在技术平台、数据积累、数据分析和价值应用等领域,具备了应用推广能力。
神州泰岳:公司与华为在视频解析与物联网传感技术上合作
公司与华为在视频解析与物联网传感技术上合作,共同推出机场智能围界入侵告警解决方案,通过华为机器视觉的视频算法+公司智慧墙的微波算法,形成智能复合探测,以应对目前传统安防产品在周界安防应用过程中漏告误告的问题,通过两种技术的复合,为机场周界安防提供技术支撑和服务,以满足机场的全天候全范围全流程的技术防范要求。
北京神州泰岳软件股份有限公司成功中标国家电网有限公司“输变电设备物联网节点装置-变电”、“输变电设备物联网传感器-SF6微水”框架协议采购项目。此次神州泰岳成功入围传感设备和通信节点设备框架协议是公司紧跟国家电网公司设备专业数字化转型升级、创新提升取得的重要成绩。
神州泰岳自主研发符合国家电网公司企业标准的接入节点设备和汇聚节点设备、多形态智能传感设备、无线通信模块和专业综合智能软件分析平台在内的物联网多场景解决方案,在变电站、电缆隧道、智能配电房均有深厚技术积累和广泛应用经验,获得用户、合作伙伴、业内专家的一致好评。
无线传感网架构
神州泰岳致力于在电力业务输、变、配领域,为客户提供安全、可靠、智慧的在线监测系统解决方案,提供稳定的数据传输通道和多维度融合的数据服务。此次入围助力神州泰岳在电力业务领域开创新机遇!
此次中标的接入节点设备和汇聚节点设备由神州泰岳自主研发,满足国网企标Q/GDW 12021《输变电设备物联网节点设备无线组网协议》及Q/GDW 12020《输变电设备物联网微功率无线网通信协议》要求,支持各类电力业务场景的无线传感网覆盖及多跳组网通信等业务需求。
接入节点设备UPJR-001 汇聚节点设备UPHJ-001
接入节点设备 可搭载多样化边缘计算应用, 实现业务数据本地消费;破除传统数据“烟囱”,实现业务横向贯通。
SF6气体在线监测APP
设备 健康 多元分析APP
神州泰岳将携手电力行业客户打造“万物互联”的数字化转型样板工程,以数字技术赋能赋智,以精益管理挖潜增效,深度挖掘电力大数据价值,助推电力行业数字化转型升级!
嵌入式方向很多,这是现在最流行的这个方向。由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统
的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家
提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便
,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌
入式的人就是远比WinCE多。在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都
是使用linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用
vxwork,但是就没有听说过使用WinCE的,原因就是开源!当然现在WinCE60听说也开源,不过在成本和资源上
linux已经有了无人能挡的优势。与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。举个例子
,Google近期开发的智能手机 *** 作系统Android其实就是使用linux-2623内核进行改进得到的。
第一,学习基本的裸机编程。
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如
果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开始学ARM的时候是选择ARM7(
主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制
led。学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复
杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了学习裸机的
编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。所谓的理解硬件就是说,理解这个
硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。比如说,s3c2410中有AD转换器,
有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那
么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这
个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗
?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映
射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到
一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?诸如此类都是对
硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这
一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。因为,你的根基没打好。不过先声明一下,本
人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进
行编程的问题我很难回答^_^,自己去研究研究吧。
对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实
验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。
第二,使用linux系统进行一些基本的实验。
在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的
,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按
照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。
在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们
不做重复工作,只提供他们没有的、最有价值的东西给大家。
第三,研究完整的linux系统的的运行过程。
所谓完整的linux系统包括哪些部分呢?
三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。
那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的
执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就
打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。
第四,开始做系统移植。
上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学
会制作这些东西。
当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的源代码,但是这个源代
码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就
叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经
算是一个初出茅庐的高手了。
在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读linux源代码,我不
提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候你觉得你必须去看源代码
时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-
2611内核的书,说得很深,建议先提高自己的C语言编程水平再去看。
至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验
的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,
如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我
相信能给你一点建议,也许有助你解决问题。
这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,
最终运行在板子上。
盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。
第五,研究linux驱动程序的编写。
移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。
Linux的驱动程序可以说是五花八门,linux24和linux26的编写有相当大的区别,就是同为linux26但是
不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程
序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新的版本内核,这样到时学驱动
的编程就有足够的资料了。这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。
第六,研究应用程序的编写。
做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序的开发,而图形应用
程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产
的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。MiniGUI的编程比较相似Windows下的
VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。不过MiniGUI最大的不好就
是没有像qtopia这样的图形 *** 作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的
版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形 *** 作平台,不过由于水平有限这只能是幻想了,
呵呵。完成这一步你基本就学完了嵌入式linux的全部内容了。
还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同
学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提
高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题
都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是
一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你
解决问题。记住,问题是学习的最好机会。另外笔者推荐你可以用嵌视科技qs-pte9AIoT(人工智能物联网)未来发展前景十分广阔。它将使用AI技术实现对设备、数据和应用的连接,从而为企业带来新的发展机遇。AIoT可以帮助企业实现效率的大幅度提升,同时也可以帮助企业减少成本开销。此外,AIoT还能够帮助企业针对不断变化的需要快速作出决定和行动。
韦东山:6000字长文告诉你如何学习嵌入式linux
链接:网页链接
第1章 单片机和Linux的区别
11 有哪些产品使用单片机或Linux
所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。
也许你不服!不是还有ucos、vxwork、wince、IOS吗?下面这个图是关于 *** 作系统的占比,是2016年的,我没找到更新的图,但是很有参考意义:
我们说的单片机不使用 *** 作系统,在上图中没有体现出来。但是使用单片机设备肯定远远超过Linux。很多人也是先学习单片机,从单片机进入电子工程师行业
日常生活中,有哪些产品使用单片机、Linux呢?下面举一些例子:
我们设计一个产品时,是使用单片机还是Linux,取决于成本:硬件成本、软件成本、维护成本、升级成本。而不应该根据个人偏好来选择:我喜欢单片机,所以就排斥使用Linux;我喜欢Linux,就排斥使用单片机。为了有更多的选择,我们需要既懂单片机,又懂Linux。
12 在硬件 *** 作上单片机和Linux是类似的
以点灯为例,
无论是单片机还是Linux,我们要做的事情都一样:
① 看原理图,确定引脚是哪一个,确定它输出什么电平才可以
② 看芯片手册,确定要怎么 *** 作寄存器
③ 写程序
但是,怎么编写程序,单片机和Linux有很大不同。
13 在单片机中点灯、使用LCD
使用单片机开发程序时,我们一上来就写一个main函数,下面是一些简化的代码:
LED程序里面的init_led、led_on、led_off函数是你一个人写的,爱取什么名就取什么名,爱怎么写就怎么写。
LCD程序里的函数也是你写的,完全是自由发挥。
很多单片机项目不是很复杂,2、3个人从上到下统统搞定,里面的函数大多时间是直接去读写寄存器。
很多单片机项目严重依赖于硬件,换一个芯片后怎么办?重写一套代码呗。
在单片机程序里,没有应用程序、驱动程序的概念,很可能一个人包揽了硬件设计、模块调试(或称之为驱动)、功能开发(或称之为应用)的全部活。
14 在Linux中点灯、使用LCD
在Linux中,不允许应用开发人员直接去 *** 作硬件,比如你想点个灯,不好意思,你无法直接访问寄存器;你需要通过驱动程序来访问寄存器。
为什么?有几大原因:
① Linux系统中运行着众多程序,必须保证质量差的程序无法破坏系统:
假设你写的程序比较烂,那我不能让你去随便访问寄存器,把系统搞崩溃了怎么办?你本意是去点灯,但是你看错了寄存器,你把电源关了怎么办?
所以这些 *** 作硬件的活,还是交给信得过的人来做吧:交给驱动工程师,他既懂硬件又懂软件。
② 保证程序的可移植性:
编写应用程序时,大家都使用统一的函数,以后换一个芯片时,应用程序不用变;只需要根据这个接口提供驱动程序就可以了。
③ 团队协作:
。使用Linux系统的项目一般比较大,术业有专攻,一个人不太可能从上到下都全部掌握。比如做人脸识别项目,有擅长做图像处理的,他可不管你要用多少种摄像头,有图像给他就可以。而多种摄像头的硬件 *** 作方法各有不同,这些交给驱动程序工程师。
所以,在Linux中应用程序和驱动程序是分开的。
以LED、LCD程序为例,简化的代码如下:
也许你已经大概猜出来了,应用程序怎么调用驱动程序?通过标准的接口:
①open:
打开驱动程序。
② read/write:
读、写数据。
③ ioctl:
传入各种参数,获得各种参数。
④ mmap:
内存映射,比如映射之后,应用程序可以直接读写LCD的显存。
你看!从这些接口里,我们根本看不到寄存器的 *** 作。底层的程序驱动会根据这些调用,去设置寄存器、 *** 作硬件。
所以,我高大上的应用工程师,干嘛苦哈哈地去看原理图、看在片手册、读写寄存器,搞不好还要去调试硬件BUG。这些脏活、累活就交给驱动工程师吧。客户的需求千变万化,我996时间都不够用了。
切,我上懂软件、下懂硬件的驱动工程师,肯定不能把这么重要的活交给你去做了,把我的系统搞崩溃了怎么办。
开玩笑、开玩笑、开玩笑的,有应用工程师、驱动工程师的优劣之分,大家都是为了做出产品。现在有一个趋势,一个任务从上到下你都需要懂,这就是所谓的全栈工程师。
还是以LED为例,应用程序和驱动程序的协作如下图所示:
在Linux中,“一切皆文件”,要访问某个硬件,也是要打开文件、读写文件。应用程序要根据标准的文件接口:open/read/write/ioctl/mmap等来访问驱动程序。
既然如此,怎么写驱动程序呢?最简单的方法就是:APP要调用open来打开驱动程序,那驱动‘程序里就提供一个xxx_open函数来初始化硬件;APP要调用write来写数据,驱动程序里就提供一个xxx_write函数来接收数据并 *** 作硬件。
用xxx_open、xxx_write来构成一个驱动程序,这就是驱动框架。
怎么实现这些xxx_open、xxx_write函数?我们要做的事情跟单片机是类似的,一样要去看电路图、看芯片手册,然后在这些函数里读写寄存器:这称为硬件 *** 作。
所以,Linux驱动程序= 驱动框架 + 硬件 *** 作。
有单片机基础的人,对硬件 *** 作比较熟悉了,把重点放在驱动框架上就可以。
高能预警:驱动框架可不简单,对于LED来说是简单,但是还有更复杂的驱动程序,它要考虑“通用”,这很要命。
第2章 嵌入式Linux快速入门
这几天在群里跟学员聊天,有一位学员的学习方法很好:先观其广,再究其深。有时候要“不求甚解”,很多时候保持疑问先学下去,这些疑问就自然解决了。
比如课程中涉及汇编知识,如果你要彻底弄清楚,你需要去学习《ARM架构与编程》;当你学完这本书,你的同学搞不好已经可以上手工作了。
21 短期的目标是什么
我们先把学习目标定下来:快速了解嵌入式Linux开发的流程,知道要学什么,具备跟从业者交流的能力。
下面我们用类比和逻辑推导出嵌入式Linux系统的组成,没错,“推导”。
从上图可以知道:
① 组成:
嵌入式Linux系统
= bootloader + linux内核 + 根文件系统(里面含有APP)。
② bootloader:
它的目的是启动内核,去哪等读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。
所以,可以认为 booloader = 裸机集合,它就是一个复杂的单片机程序。
③ Linux内核
Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。所以Linux内核要有这些Flash、SD卡里设备的驱动能力。
不仅如此,Linux内核还有进程调度能力、内存管理等功能。
所以:Linux内核 = 驱动集合 + 进程调度 + 内存管理等。
23 要学习bootloader吗
Bootloader有很多种,常用的叫作u-boot。
在实际工作中,对于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很复杂的,比如为了便于调试,它支持网络功能;有些内核是保存在FAT32分区里,于是它要能解析FAT32分区,读FAT32分区的文件。
花那么多精力去学习u-boot,但是工作中基本用不到,这对初学者很不友善。
所以,对于初学者,我建议:理解u-boot的作用、会使用u-boot的命令,这就可以了。
如果你的工作就是修改、完善bootloader,那么再去研究它吧。
24 要学习Linux内核、要学习驱动程序吗
之前我们说过Linux内核 = 驱动集合 + 进程调度 + 内存管理等,如果要学习Linux内核,从驱动程序入手是一个好办法。
但是人人都要学习Linux内核、人人都要学习Linux驱动吗?显然不是。
作为初学者,懂几个简单的驱动程序,有利于工作交流;理解中断、进程、线程的概念,无论是对驱动开发、应用程序开发,都是很有好处的。
所以对于初学者,建议前期只学习这几个驱动:LED、按键、中断。
① LED驱动程序:
这是最简单的驱动程序。
② 按键驱动程序:
它也比较简单,从它引入“中断”。
③ 中断:
从“中断”它可以引入:休眠-唤醒、进程/线程、POLL机制、异步通知等概念。这些概念无论是对驱动开发,还是对应用开发,都很重要。
所以,对于初学者,我建议必须学习这几个驱动:LED、按键、中断。
入门之后,如果你想从事内核开发、驱动开发,那么可以去钻研几个驱动程序(输入系统、I2C总线、SPI总线等),掌握若干个大型驱动程序后,你对内核的套路就有所了解了,再去研究其他部分(比如进程管理、文件系统)时你会发现套路是如此通用。
摄像头(VL42)、声卡ALSA驱动是Linux中比较复杂的2类驱动,它们是很难的,如果工作与此相关再去研究。
25,要学习Linux应用程序吗?先学一些基础技能
要学,即使以后你只想研究内核,一些基本的应用开发编写能力也是需要的:
① 基本设备的访问,比如LCD、输入设备
② 进程、线程、进程通信、线程同步与互斥
③ 休眠-唤醒、POLL机制、信号
④ 网络编程
①②③部分的知识,跟驱动有密切的关系,它们是相辅相承的。
掌握了基本驱动开发能力、基本应用开发能力之后,在工作中你就可以跟别人友好沟通了,不至于一脸懵逼。
26,应用程序是怎么启动的?要了解一下根文件系统
你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动?
你写的程序,它依赖于哪些库,这些库放到板子上哪个目录?
怎么做一个可升级的系统?即使升级中途断电了,也要保证程序至少还可以运行老的版本?
这些都需要我们了解一下根文件系统。
先了解一下init进程:它要读取配置文件,根据配置文件启动各个APP。
了解了init进程,你就了解了根文件系统的组成,就可以随心所欲裁剪系统,为你的项目制作出最精简的系统。
第3章 学习方法
31,先不要打破砂锅问到底
嵌入式涉及的东西太多太杂了,如果心里没有主线,碰到什么都要去研究个透彻,最终反而忘记自己要学什么了。
嵌入式涉及硬件知识、软件知识,软件里涉及汇编、ARM架构、C语言、Makefile、Shell;又分为bootloader、内核、驱动、基本的APP、GUI。
比如我们会用到Makefile,了解它的基本规则,会用我们提供的Makefile就可以。
不需要深入研究那些make函数,因为在工作中都有现成的Makefile给你使用,不需要自己去编写一套Makefile。何必花上好几天去深入研究它呢?
比如我们会用到bootloader,难道又要花上几个月来深入研究u-boot吗?工作中基本不需要改u-boot,会用那几个命令就可以。
甚至有些学员先去买本shell的书来学习shell命令,何必?我们在视频中用到什么命令,你不懂时再去百度一下这些命令就可以了。
不要脱离初学者的主线:应用基础、驱动基础。有了这2个基础后,你想深入研究某部分时,再去花时间吧。
32,思路要清晰,不怕抄代码
视频里的代码,请你一定要自己去写一次、写多次。为什么我现在写驱动那么熟?我2009年在华清远见上课时,
每次上课我都要给学生写一次那些驱动,十几次下来闭着眼睛都知道内核的套路了。
记不住那些函数?我也记不住,我都是去参考同类的驱动程序,这又不是闭卷考试。
但是要理清楚思路,你写这个程序要完成什么功能、怎么实现这些功能?这个要弄清楚。
有了思路后再写代码,不知道怎么写?没关系,看看视频,看看示例,然后关闭视频看看能否自己写出来。
33,对自己的方向很了解,我只能带你到这里了
我的专长是 *** 作系统,是快速地带领大家掌握一些项目开发的基础知识。
如果你决定深入研究某方面时,我并不能带你多久。你要去看源码,去看这方面的专业书籍。
比如想深入钻研内核的内存管理时,它有页表映射(你需要阅读ARM架构的手册)、SLAB分配器、vmalloc/malloc实现、mmap实现、缺页中断、父进程子进程之间的页面管理等等,内容非常多。有时候连书籍都没有,你需要直接啃代码。
当你想从事某个行业时,就需要深入研究行业相关的知识。
比如CAN总线,它可以写成一本书:CAN协议、CAN报文、Socket CAN、车身网络拓扑结构,CAN应用报文,CAN网络管理报文,CAN诊断报文。
想做物联网网关,需要深入研究MQTT,MQTT协议相对简单,但是MQTT英文原版协议有130多页,中文版有近100页,是一本小书了。
每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。
-☆ END ☆-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)