IPv6有哪些优点?

IPv6有哪些优点?,第1张

与IPv4相较,IPv6除拥有海量IP地址(号称可以为全世界的每一粒沙子编上一个地址)以外,还具有以下几点优势:
1) IPv6地址分配遵循“聚类”原则,减小了路由器中路由表的长度,路由器转发数据包速度也得到提升,从而提高了网络的整体吞吐量。
2) IPv6协议独立于传输介质,默许集成IPSec安全功能,且终端之间无需进行地址转换,在网络安全性方面更胜一筹。
3) IPv6引入自动配置及重配置技术,可自动增删更新配置IP地址等信息,实现了即插即用。
4) IPv6增加了增强的组播支持及对流控制,赋予网络上多媒体应用长足发展的机会,为服务质量(QoS, Quality of Service)控制提供了良好的网络平台。


目录


1、网络协议


其实协议在我们生活中也能找到相应的影子。


举个例子,有 2 个男生准备追求同一个妹子,妹子来自河南,讲河南话,还会点普通话;一个男生来自胡建,讲闽南语,也会点普通话;另一个男生来自广东,只讲粤语;

协议一致,沟通自如

语言不通,无法沟通

你们猜猜?最后谁牵手成功了?答案肯定是来自胡建的那位,双方可以通过 普通话 进行沟通,表达内容都能理解。而来自广东的帅哥只会讲粤语,不会普通话,妹子表示听不懂,就无法进行沟通下了。


每个人的成长环境不同,所讲的语言、认知、理解能力也就不同。为了使来自五湖四海的朋友能沟通自如,就需要大家协商,认识某一个语言或规则,彼此能互相理解,这个语言就是普通话。


通过这个例子,大家可以这样理解:


把普通话比作“协议”、把聊天比作“通信”,把说话的内容比作“数据”。


相信这样类比,大家就知道,协议是什么了?


简单地说,就是程序员指定一些标准,使不同的通信设备能彼此正确理解、正确解析通信的内容。我们都知道计算机世界里是二进制,要么 1,要么 0,那为啥可以表达丰富多彩的内容呢?


也是因为协议,不同字段,不同组合,可以解析不同意思,这就依然协议,让协议来正确处理。


例如,我们使用手机连 WiFi 来刷抖音,使用的是 80211(WLAN)协议,通过这个协议接入网络。如果你所连的 WIFI 是不需要手动设置 IP 地址,是通过自动获取的,就使用到了 DHCP 协议,这样你的手机算上接入了 局域网, 如果你局域网内有台 NAS 服务器,存放了某些不可描述的视频资源,你就可以访问观看了,但这时你可能无法访问互联网资源,例如,你还想刷会抖音,看看妹子扭一扭,结果出现如下画面:


出现这种画面,说明无法使用 互联网, 可能是无线路由器没有设置好相关协议,比如: NAT、PPPoE 协议(上网账号或密码设置错误了),只有设置正确了,就可以通过运营商(ISP)提供的线路把局域网接入到互联网中,实现手机可以访问互联网上的资源(服务器)。玩微信撩妹子、刷抖音看妹子。

网络协议示意图


延伸阅读

1、局域网:最显著的特点就是范围有限,行政可控的区域可以是一所高校、一个餐厅、一个园区、一栋办公楼或一个家庭的私有网络。

2、城域网:原本是介意局域网和广域网之间,实际工作中很少再刻意去区分城域网和广域网了,所以这边不再介绍。

3、广域网:简单说就是负责把多个局域网连接起来,它的传输距离长距离传输,广域网的搭建一般是由运营商来。

4、互联网:把全世界上提供资源共享的 IT 设备所在网络连接起来,接入了互联网就可以随时随地访问这些资源了。

5、物联网:把所有具有联网功能的物体都接入互联网就形成了物联网。如空调联网,就可以远程控制空调; 汽车 联网,就可以远程获取行程数据。


总结一下吧!我们可以把电脑、手机等 IT 设备比喻做来自五湖四海的人们,大家都通过多种语言(网络协议)实现沟通(通信)。所有人要一起交流,就用普通话,大家都能理解。所有胡建人在一起,就用闽南语进行沟通,彼此也能理解。这么的方言,就好比计算机网络世界里也有这么多协议,只是不同协议用在不同地方。


好奇的同学,可能就会问,那网络协议是由谁来规定呢?这就需要提到一个组织,ISO。这个组织制定了一个国际标准 ,叫做 OSI 参考模型,如下,很多厂商都会参考这个制定网络协议。

OSI 参考模型图


2、OSI 参考模型


既然是模型,就好比模范一样,大家都要向它学习,以它为原型,展开学习研究。前面我们也提到了一些协议,这么多协议如果不进行归纳,分层,大家学习起来是不是感觉很凌乱?


所以 OSI 参考模型就是将这样复杂的协议整理并进行分层,分为易于理解的 7 层,并定义每一层的 服务 内容,协议的具体内容是 规则 。上下层之间通过 接口 进行交互,同一层之间通过 协议 进行交互。相信很多网络工程师在今后工作中遇到问题,讨论协议问题还会用到这个模型展开讨论。所以说,对于计算机网络初学者来说,学习了解 OSI 参考模型就是通往成功的第一步。

OSI 参考模型分层功能


7应用层


为应用程序提供服务并规定应用程序中通信相关的细节,OSI 的最高层。包括文件传输、Email、远程登录等协议。程序员接触这一层比较多。

应用层示例图

6表示层


主要负责数据格式的转换,为上下层能够处理的格式。如编码、加密、解密等。

表示层示例图


5会话层


即负责建立、管理和终止通信连接(数据流动的逻辑通路),数据分片、重组等传输的管理。

会话层示例图

4传输层


保证可靠传输,不需要再路由器上处理,只需再通信双方节点上进行处理,如处理差错控制和流量控制。

传输层示例图


3网络层

主要负责寻址和路由选择,将数据包传输到目的地。

网络层示例图


2数据链路层

负责物理层面上互连、节点之间的通信传输,将0 、 1 序列比特流划分为具有意义的数据帧传输给对端。这一层有点类似网络层,网络层也是基于目的地址来传输,不同是:网络层是将数据包负责在整个网络转发,而数据链路层仅是在网段内转发,所以大家抓包会发现,源目 MAC 地址每经过一个二层网段,都会变化。

数据链路层示例图


1物理层

负责 0、1 比特流(0、1 序列)与电压高低电平、光的闪灭之间的互相转换,为数据链路层提供物理连接。

物理层示例图



OSI 为啥最后没有得到运用呢?其实最主要的原因,是 OSI 模型出现的比 tcp/ip 出现的时间晚,在 OSI 开始使用前,TCP/IP 已经被广泛的应用了。如果要换成 OSI 模型也不太现实。其次是 OSI 是专家们讨论,最后形成的,由于没有实践,导致该协议实现起来很复杂,很多厂商不愿意用 OSI,与此相比,TCP/IP 协议比较简单,实现起来也比较容易,它是从公司中产生的,更符合市场的要求。综合各种因素,最终 OSI 没有被广泛的应用。


下面我们来看看 TCP/IP 与 OSI 分层之间的对应关系及相应的协议:

4应用层


从上图,可以知道 TCP/IP 四层模型,把应用层、表示层、会话层集成再一起了,该层的协议有:>要参加2020年浙江省高校计算机等级考试的小伙伴们注意了,环球青藤小编整理分享了2020年浙江省高校计算机三级网络及安全技术考试大纲,小伙伴们快来看看吧,希望以下内容对大家接下来的考试有所帮助,更多计算机等级考试信息敬请关注环球青藤计算机二级频道。
2020年浙江省高校计算机三级网络及安全技术考试大纲
考试目标
学生通过计算机网络及安全技术的学习和实践,掌握计算机网络的基本知识、基本原理、常用协议、基本的管理配置及实践 *** 作方法,掌握网络及安全的基本原理和应用技术,具备分析和解决网络工程问题的能力,具有基本的网络信息安全管理与实践应用能力。
基本要求
1、掌握计算机网络基础知识。
2、掌握局域网的基本工作原理及组网技术。
3、熟练掌握互联网TCP/IP体系及各层典型网络协议。
4、基本掌握常见的互联网应用协议与服务。
5、掌握常用网络服务的应用与配置,掌握网络安全、系统安全和应用安全的基本知识和实践技能。
6、掌握计算机网络信息安全的基本理论与方法及常用的安全防护技术。
7、理解物联网、云计算、5G网络、区块链等网络新技术。
考试内容
一、计算机网络体系结构
1、计算机网络的产生和发展
2、计算机网络基本概念
计算机网络的定义,分类,计算机网络的主要功能及应用。
3、计算机网络的组成
网络边缘部分和网络核心部分,网络的传输介质,分组交换技术。
4、网络体系结构与网络协议
网络体系结构,网络协议,ISO/OSI参考模型,TCP/IP网络模型。
二、网络信息安全概况
1、信息安全基础
(1)信息安全基本属性
机密性、完整性、可用性、可控性、不可抵赖性(不可否认性)
(2)信息安全基本模型
信息保障模型PDR与P2DR,信息安全保障技术框架IATF,信息技术安全评估CC准则,信息系统安全等级保护模型。
(3)信息安全基本法规
国外法规,国内的网络安全法、密码法、网络安全等级保护制度。
2、密码应用基础
(1)密码算法
古典密码、现代密码;加密模式、分组密码、流加密;公钥密码、哈希函数、数字信封。
(2)密码分析
古典密码破译,中间相遇攻击,中间人攻击,唯密文攻击,已知明文攻击,已知密文攻击,选择明文攻击,选择密文攻击。
(3)密码应用
数字签名,访问控制与授权,身份认证。
(4)密钥管理
对称密钥管理,非对称密钥管理(PKI)。
(5)密码协议概述
3、网络安全技术
实体硬件安全,软件系统安全,网络安全防护和反病毒技术研究(入侵检测、防火墙、审计、恢复等),数据信息安全,安全产品。
三、局域网技术及安全
1、局域网基本概念
局域网的定义、特点,局域网的分类与标准。
2、以太网组网技术
共享以太网:载波侦听多路访问/冲突检测,以太网帧格式,集线器组网;
交换局域网:交换机组网;
虚拟局域网:定义、特点及配置。
3、无线局域网技术
无线局域网组成,载波侦听多路访问/冲突避免,WiFi;
无线个人区域网: 蓝牙、ZigBee、超带宽UWB。
4、局域网安全
Sniffer抓包分析,ARP攻击,WiFi密码破解,WiFi劫持, 。
四、互联网协议及安全
1、Internet的构成
Internet组成, Internet基本服务及工作原理。
2、IP协议
IP协议概述,IP服务,IP地址,掩码,IP报文,差错与差错控制报文。
3、路由与路由选择
路由表,路由转发,静态路由选择,动态路由选择包括RIP路由协议、OSPF路由协议,广播路由,多播路由。
4、IPv6协议
IPv6组成结构,IPv6地址类型,IPv6协议,IPv6/IPv4双协议栈技术,隧道技术。
5、NAT地址解析协议
NAT概念,NAT实现方式,NAT工作原理,NAT配置方式。
6、TCP协议与UDP协议
端对端通信,TCP协议,UDP协议。
7、网络协议安全攻击
ARP欺骗,IP泪滴攻击,TCP会话劫持,SYN Flood洪水攻击,UDP泛洪攻击,DoS拒绝服务攻击和DDoS分布式拒绝服务攻击。
8、安全协议
IPSec,SSL协议。
五、互联网应用及安全
1、应用进程通信模型
C/S模型概念与结构,P2P模型概念与结构,其他应用进程通信模型。
2、域名系统
DNS协议概述,层次域名空间,域名服务器,域名解析过程。
3、远程登录服务
Telnet协议概述,远程登陆服务过程,Telnet传输格式。
4、电子邮件服务
电子邮件格式,电子邮件服务协议包括SMTP、POP3、IMAP。
5、Web服务
Web服务概述, >

modbus本身就是一个通信协议,可以百度查一下其协议定义,可以基于串口,也可以基于网口;基于串口的有RTU、网口的有TCP。测试软件有格西烽火软件、Modbus Slave等软件。

流程路径:ip_rcv() --> ip_rcv_finish() --> ip_local_deliver() --> ip_local_deliver_finish()
解封侧一定是ip报文的目的端,ip_rcv_finish中查到的路由肯定是本机路由(RTCF_LOCAL),调用 ip_local_deliver 处理。
下面是贴的网上的一张。

ip_local_deliver_finish中 根据上次协议类型,调用对应的处理函数。inet_protos 中挂载了各类协议的 *** 作集,对于AH或者ESP来说,是xfrm4_rcv,对于ipsec nat-t情况下,是udp协议的处理函数udp_rcv,内部才是封装的ipsec报文(AH或者ESP)。

xfrm4_rcv --> xfrm4_rcv_spi --> xfrm4_rcv_encap --> xfrm_input
最终调用 xfrm_input 做收包解封装流程。
1、创建SKB的安全路径;
2、解析报文,获取daddr、spi,加上协议类型(esp、ah等),就可以查询到SA了,这些是SA的key,下面列出了一组linux ipsec的state(sa)和policy,方便一眼就能看到关键信息;
3、调用SA对应协议类型的input函数,解包,并返回更上层的协议类型,type可为esp,ah,ipcomp等。对应的处理函数esp_input、ah_input等;
4、解码完成后,再根据ipsec的模式做解封处理,常用的有隧道模式和传输模式。对应xfrm4_mode_tunnel_input 和 xfrm4_transport_inout,处理都比较简单,隧道模式去掉外层头,传输模式只是设置一些skb的数据。
5、协议类型可以多层封装,如ESP+AH,所以需要再次解析内存协议,如果还是AH、ESP、COMP,则解析新的spi,返回2,查询新的SA处理报文。
6、经过上面流程处理,漏出了用户数据报文(IP报文),根据ipsec模式:

流程路径如下图,这里以转发流程为例,本机发送的包主要流程类似。
转发流程:

ip_forward 函数中调用xfrm4_route_forward,这个函数:
1、解析用户报文,查找对应的Ipsec policy(__xfrm_policy_lookup);
2、再根据policy的模版tmpl查找对应最优的SA(xfrm_tmpl_resolve),模版的内容以及和SA的对应关系见上面贴出的ip xfrm命令显示;
3、最后根据SA生成安全路由,挂载再skb的dst上; 一条用户流可以声明多个安全策略(policy),所以会对应多个SA,每个SA处理会生成一个安全路由项struct dst_entry结构(xfrm_resolve_and_create_bundle),这些安全路由项通过 child 指针链接为一个链表,其成员 output挂载了不同安全协议的处理函数,这样就可以对数据包进行连续的处理,比如先压缩,再ESP封装,再AH封装。
安全路由链的最后一个路由项一定是普通IP路由项,因为最终报文都得走普通路由转发出去,如果是隧道模式,在tunnel output封装完完成ip头后还会再查一次路由挂载到安全路由链的最后一个。
注: SA安全联盟是IPsec的基础,也是IPsec的本质。 SA是通信对等体间对某些要素的约定,例如使用哪种协议、协议的 *** 作模式、加密算法、特定流中保护数据的共享密钥以及SA的生存周期等。

然后,经过FORWARD点后,调用ip_forward_finish()-->dst_output,最终调用skb_dst(skb)->output(skb),此时挂载的xfrm4_output

本机发送流程简单记录一下,和转发流程殊途同归:
查询安全路由: ip_queue_xmit --> ip_route_output_flow --> __xfrm_lookup
封装发送: ip_queue_xmit --> ip_local_out --> dst_output --> xfrm4_output

注:
1) 无论转发还是本地发送,在查询安全路由之前都会查一次普通路由,如果查不到,报文丢弃,但这条路由不一定需要指向真实的下一跳的出接口,只要能匹配到报文DIP即可,如配置一跳其它接口的defualt。
2) strongswan是一款用的比较多的ipsec开源软件,协商完成后可以看到其创建了220 table,经常有人问里面的路由有啥用、为什么有时有有时无。这里做个测试记录: 1、220中貌似只有在tunnel模式且感兴趣流是本机发起(本机配置感兴趣流IP地址)的时候才会配置感兴趣流相关的路由,路由指定了source;2、不配置也没有关系,如1)中所说,只要存在感兴趣流的路由即可,只不过ping的时候需要指定source,否者可能匹配不到感兴趣流。所以感觉220这个表一是为了保证

ipsec封装发送流程:
xfrm4_output-->xfrm4_output_finish-->xfrm_output-->xfrm_output2-->xfrm_output_resume-->xfrm_output_one
xfrm4_output 函数先过POSTROUTING点,在封装之前可以先做SNAT。后面则调用xfrm_output_resume-->xfrm_output_one 做IPSEC封装最终走普通路由走IP发送。

贴一些网上的几张数据结构图
1、安全路由

2、策略相关协议处理结构

3、状态相关协议处理结构

1、TCP洪水攻击(SYN Flood)

TCP洪水攻击是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷;

发送大量伪造的TCP连接请求,常用假冒的IP或IP号段发来海量的请求连接的第一个握手包(SYN包),被攻击服务器回应第二个握手包(SYN+ACK包),因为对方是假冒IP,对方永远收不到包且不会回应第三个握手包。

导致被攻击服务器保持大量SYN_RECV状态的“半连接”,并且会重试默认5次回应第二个握手包,塞满TCP等待连接队列,资源耗尽(CPU满负荷或内存不足),让正常的业务请求连接不进来。

2、反射性攻击(DrDoS)

反射型的 DDoS 攻击是一种新的变种,与DoS、DDoS不同,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击。

黑客往往会选择那些响应包远大于请求包的服务来利用,这样才可以以较小的流量换取更大的流量,获得几倍甚至几十倍的放大效果,从而四两拨千斤。一般来说,可以被利用来做放大反射攻击的服务包括DNS服务、NTP服务、SSDP服务、Chargen服务、Memcached等。

3、CC攻击(>

>

4、直接僵尸网络攻击

僵尸网络就是我们俗称的“肉鸡”,现在“肉鸡”不再局限于传统PC,越来越多的智能物联网设备进入市场,且安全性远低于PC,这让攻击者更容易获得大量“肉鸡”;

也更容易直接发起僵尸网络攻击。根据僵尸网络的不同类型,攻击者可以使用它来执行各种不同的攻击,不仅仅是网站,还包括游戏服务器和任何其他服务。

5、DOS攻击利用一些服务器程序的bug、安全漏洞、和架构性缺陷攻击

然后通过构造畸形请求发送给服务器,服务器因不能判断处理恶意请求而瘫痪,造成拒绝服务。以上就是墨者安全认为现阶段出现过的DDOS攻击种类,当然也有可能不是那么全面,DDOS攻击的种类复杂而且也不断的在衍变,目前的防御也是随着攻击方式再增强。

11 有哪些设备使用单片机或Linux

所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。我们说的单片机不使用 *** 作系统,但是使用单片机设备肯定远远超过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开发的流程,知道要学什么,具备跟从业者交流的能力。

22 一个嵌入式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页,是一本小书了。

每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。

工业网关主要有以下得3种常见用途:
一、工业网关可以完成数据的实时采集。
工业网关连接设备的plc,实时采集工业设备运行的参数信息,可实现设备的数据实时采集,断线续传等功能。专业的工业网关可以在加密的情况下采集数据,实现数据的远程采集与传递。
二、工业网关可以通过云端平台实现设备的远程监控与管理。
工业网关采集到的数据传递云端平台,一旦设备运行过程中出现故障,物联网云平台就会向设备管理者推送报警信息。设备管理人员登入云端平台查看故障,通过工业网关实现设备的远程监控与调试。
三、工业网关可实现协议转换本地互联互通。
工业网关可实现多种协议转化为一种标准协议如ModbusTCP、OPCUA等通用协议,实现本地不同设备之间互相通信。
以上就是工业网关的三大主要用途,其实工业网关AR7091还可实现视频监控、边缘计算、巡检打卡等功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/13108126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存