嵌入式Linux操作系统 课件 项目5、6 嵌入式 Linux操作系统网络管理、嵌入式 Linux操作系统编程操作_第1页
嵌入式Linux操作系统 课件 项目5、6 嵌入式 Linux操作系统网络管理、嵌入式 Linux操作系统编程操作_第2页
嵌入式Linux操作系统 课件 项目5、6 嵌入式 Linux操作系统网络管理、嵌入式 Linux操作系统编程操作_第3页
嵌入式Linux操作系统 课件 项目5、6 嵌入式 Linux操作系统网络管理、嵌入式 Linux操作系统编程操作_第4页
嵌入式Linux操作系统 课件 项目5、6 嵌入式 Linux操作系统网络管理、嵌入式 Linux操作系统编程操作_第5页
已阅读5页,还剩156页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

01了解Linux操作系统网络02配置Linux操作系统网络环境03解析Liunx系统硬件接口了解Linux操作系统网络PART01通过上一个项目,我们完成了Linux操作系统管理和相关命令的学习。随着信息技术的飞速发展,计算机网络的应用规模呈爆炸式增长。网络管理是保证通信网络充分有效地利用各种资源和保持网络可靠运行的重要手段。网络管理系统则是网络管理系统不可或缺的重要组成部分。嵌入式Linux操作系统网络配置通常包括静态/DHCPIP地址配置、DNS服务器设置、接口以及网关设定等部分。本项目我们就来详细介绍如何使用嵌入式Linux操作系统进行网络配置及网络管理。【职业能力目标】

1.了解Linux操作系统网络的工作原理。

2.掌握Linux操作系统网络配置通用命令。【素质目标】

1.通过学习嵌入式Linux操作系统进行网络配置及网络管理,培养学生合理利用网络资源的意识。

2.了解网络管理系统的重要性,培养学生网络安全意识。

3.通过实际操作嵌入式Linux操作系统进行网络配置及管理,培养学生的技术创新与实践能力。5.1.1网络的概述

网络是由若干个节点和连接这些节点的链路构成的,表示诸多对象及其相互联系。在1999年之前,人们一般认为网络的结构都是随机的。但随着Barabasi和Watts在1999年分别发现了网络的无标度和小世界特性并分别在世界著名的《科学》和《自然》杂志上发表了他们的发现之后,人们才认识到网络的复杂性。在Linux操作系统中,网络负责进行计算机通信,可以实现客户端到服务器的访问,互联网使用TCP/IP协议进行网络传输。5.1.2IP地址

IP地址是互联网协议特有的一种地址,它是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。在单个局域网网段中,计算机与计算机之间可以使用网络访问控制层提供的MAC地址进行通信。但在路由式网络中,计算机之间进行通信就不能利用MAC地址实现数据传输了:因为MAC地址不能跨路由接口运行。即使强行实现跨越,使用MAC地址传输数据也是非常麻烦的。这是由于内置在网卡里的固定MAC地址不能在地址空间上引入逻辑结构,无法像真正的地址一样来表示国家、省、市、区、街道、路、号这类层次。因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是IP地址。

IP地址长度是32bit,由4个字节组成。为了阅读和书写方便,IP地址通常采用点分十进制数来表示。5.1.2IP地址IP地址的表现形式能够帮助我们更好地使用和配置网络,但通信设备在对IP地址进行计算时使用的是二进制的操作方式,因此掌握十进制、二进制的转换运算非常有必要。1.点分十进制表示法5.1.2IP地址00000000.00000000.00000000.00000000~11111111.11111111.11111111.11111111,即~55。2.IPv4地址范围5.1.2IP地址IPv4地址由如下两部分组成:(1)网络部分(网络号)网络号用来标识一个网络。IP地址不能反映任何有关主机位置的地理信息,只能通过网络号码字段判断出主机属于哪个网络。对于网络号相同的设备,无论实际所处的物理位置如何,它们都是处在同一个网络中。(2)主机部分(主机号)主机号用来区分一个网络内的不同主机。3.IP地址格式5.1.2IP地址网络掩码又称子网掩码(SubnetMask)。网络掩码为32bit,与IP地址的位数一样,通常也以点分十进制数来表示。网络掩码不是一个IP地址,在二进制的表示上是一堆连续的1,后面接一堆连续的0。通常将网络掩码中1的个数称为这个网络掩码的长度。如:掩码

的长度是0,掩码

的长度是6。网络掩码一般与IP地址结合使用,其中值为1的比特对应IP地址中的网络位;值为0的比特对应IP地址中的主机位,以此来辅助我们识别一个IP地址中的网络位与主机位。即网络掩码中1的个数就是IP地址的网络号的位数,0的个数就是IP地址的主机号的位数。4.网络掩码(Netmask)5.1.3IP地址分类为了方便对IP地址进行管理及组网,将IP地址分成五类:

A、B、C、D、E类的类别字段分别是二进制数0、10、110、1110、1111,通过网络号字段的前几个比特就可以判断IP地址属于哪一类,这是区分各类地址最简单的方法。

A、B、C三类地址是单播IP地址(除一些特殊地址外),只有这三类地址才能分配给主机接口使用。

D类地址属于组播IP地址。

E类地址专门用于特殊的实验目的。本节内容,只关注A、B、C三类地址。5.1.3IP地址分类

A、B、C类地址比较:使用A类地址的网络称为A类网络;使用B类地址的网络称为B类网络;使用C类地址的网络称为C类网络。

A类网络的网络号为8bit,个数很少,但所允许的主机接口的个数很多;首位恒定为0,地址空间为:~55。

B类网络的网络号为16bit,介于A类和C类网络之间;首两位恒定为10,地址空间为:~55。

C类网络的网络号为24bit,个数很多,但所允许的主机接口的个数就很少;首三位恒定为110,地址空间为:~55。5.1.3IP地址分类5.1.4IP报文格式5.1.4IP报文格式公网IP地址:IP地址是由IANA统一分配的,以保证任何一个IP地址在Internet上的唯一性。这里的IP地址是指公网IP地址。私网IP地址:实际上一些网络不需要连接到Internet,比如一个大学的封闭实验室内的网络,只要同一网络中的网络设备的IP地址不冲突即可。在IP地址空间里,A、B、C三类地址中各预留了一些地址专门用于上述情况,称为私网IP地址。A类:~55B类:~55C类:~551.特殊的IP地址5.1.4IP报文格式这个地址称为有限广播地址,它可以作为一个IP报文的目的IP地址使用。路由器接收到目的IP地址为有限广播地址的IP报文后,会停止对该IP报文的转发。55.2555.1.4IP报文格式如果把这个地址作为网络地址,它的意思就是“任何网络”的网络地址;如果把这个地址作为主机接口地址,它的意思就是“这个网络上主机接口”的IP地址。例如:当一个主机接口在启动过程中尚未获得自己的IP地址时,就可以向网络发送目的IP地址为有限广播地址、源IP地址为

的DHCP请求报文,希望DHCP服务器在收到自己的请求后,能够给自己分配一个可用的IP地址。.05.1.4IP报文格式这个地址为环回地址,它可以作为一个IP报文的目的IP地址使用。其作用是测试设备自身的软件系统。一个设备产生的目的IP地址为环回地址的IP报文是不可能离开这个设备本身的。.0/85.1.4IP报文格式如果一个网络设备获取IP地址的方式被设置成了自动获取方式,但是该设备在网络上又没有找到可用的DHCP服务器,那么该设备就会使用/16网段的某个地址来进行临时通信。.0/165.1.5IPv4和IPv6我们目前常说的IP地址指的是IPv4地址,但IPv4可用地址有限,在2011年2月3日,IANA已经宣布将其最后的468万个IPv4地址平均分配到全球5个RIR(RegionalInternetRegistry,区域互联网注册管理机构),此后IANA再没有可分配的IPv4地址。

NAT技术的应用,缓解了IPv4地址不足产生的问题,但是部署IPv6是解决IPv4地址不足的最终方案。当前世界上不同地区对部署IPv6的需求强烈程度不一,且当前IPv4网络仍然占主流地位,因此短时间内IPv6和IPv4将会共存。5.1.5IPv4和IPv65.1.6网关1.网关的定义网关作为计算机网络中的一种网络设备,其主要作用是连接不同网络之间的通信。它可以将一个网络的协议格式转换为另一个网络可识别的协议格式,实现不同网络之间的数据传输。5.1.6网关2.网关的功能网关的主要功能是实现不同网络之间的数据传输。它需要具备转换不同协议格式的能力,支持数据缓存、分组、组装、再传输等功能,以保证数据的快速、稳定传输。此外,网关还能实现路由选择、防火墙、入侵检测等网络安全功能,保障网络的安全。5.1.6网关3.网关的分类根据功能不同,网关可以分为路由网关、应用网关和转换网关三种类型。路由网关主要用于实现数据包的路由选择,支持静态路由和动态路由等多种路由协议。应用网关主要用于应用层协议转换,实现HTTP、SMTP、FTP等应用协议之间的转换。转换网关是一种将不同网络协议进行转换的网关,其主要作用是将数据包格式转换为目标网络可以识别的格式。5.1.6网关4.网关的工作原理网关的工作原理是将一个协议格式的数据包接收进来,在进行数据格式转换后再转发到另一个网络中。网关一般放置在网络边缘,与不同网络相连。当一个数据包在源网络中发送时,将首先被发送到网关。网关会对数据包进行协议格式的解析,然后再构建适合目的网络的协议格式,发送到目的网络中。5.1.6网关5.网关的使用场景网关的使用场景非常广泛,主要包括企业内网与公网、不同子网之间、不同协议之间等。例如,家庭路由器就是一种网关,它将家庭内部的设备与公网进行了连接。

又如,企业内部的不同子网之间需要通信,就可以使用路由网关来实现。5.1.6网关6.网关的安全性网关在保障网络安全方面具有重要作用。由于网关放置在网络边缘,其所处的位置非常重要。如果网关被入侵,攻击者就可以轻易地进入其他网络,进行攻击。因此,网关需要具备强大的安全性能,如防火墙、入侵检测等。5.1.7DNS服务器

DNS是计算机域名系统(DomainNameSystem或DomainNameService)的缩写,它是由解析器和域名服务器组成的,作用是把域名转换成为网络可以识别的IP地址。比如我们上网时输入的

会自动转换成为2。

DNS源于互联网的早期,当时的互联网还是美国国防部(theUnitedStatesDepartmentofDefense)出于研究目的而建立的小型网络。通过一个HOSTS文件来管理网络中各个计算机的主机名,而这份HOSTS文件放在一台集中管理的服务器上,需要解析主机名的每个站点都要先下载这份文件。随着网络中主机数量的不断增加,HOSTS文件更新过程所产生的流量以及文件大小问题逐渐暴露出来。于是,人们期望建立一个能够灵活扩展,支持各种数据类型的分布式主机名管理系统,作为互联网中关键的基础设施,而这个新的分布式系统就是DNS。5.1.7DNS服务器详情请见教材详情请见教材配置Linux操作系统网络环境PART02

Linux操作系统网络是一种强大的网络操作系统,具有广泛的应用和功能。它提供了多种网络服务,如Web服务器、邮件服务器、文件共享等,并且支持各种网络协议和标准。Linux操作系统网络具有稳定性和安全性,可以在各种环境下运行,并且可以通过命令行界面或图形用户界面进行管理和配置。通过前面的介绍,我们知道了如果想要一台计算机能接入Internet,必须设置好IP地址、子网掩码、网关、DNS服务器。在Linux操作系统中,这些信息都可以通过修改对应的配置文件来进行配置。但很多时候修改配置文件比较烦琐,在有些场景下也不适用,在这种情况下,可以通过一些简单的命令来进行配置。本任务将介绍Linux操作系统的常用网络配置命令,并提供一些网络配置概念。【职业能力目标】

1.掌握Linux操作系统的常用网络配置命令。

2.掌握Linux操作系统的网络配置操作。【素质目标】

1.学习Linux操作系统的常用网络配置命令,培养学生的自主学习能力和解决问题的能力。

2.实际操作常用网络配置命令,培养学生的技术实践能力和实用性意识。

3.在进行网络配置和管理时,培养学生遵守相关法律法规和规定,保证网络的合规性。5.2.1网络配置命令ifconfig命令用于获取网卡配置与网络状态等信息,在不带任何选项和参数执行ifconfig命令时,将显示当前主机中已启用(活动)的网络接口信息,如图5-2-1所示。1.ifconfig命令5.2.1网络配置命令ifconfig命令输出说明:●第一部分的第一行显示网卡状态信息。enp0表示第一块网卡。BROADCAST代表支持广播。UP代表网卡开启状态。RUNNING代表网卡的网线被接上。MULTICAST代表支持组播。mtu1500代表IP报文的最大大小为1500。5.2.1网络配置命令●第二行显示网卡的网络信息。inet(IP地址):5。netmask(掩码地址):。broadcast(广播地址):55。●RX表示接收数据包的情况,TX表示发送数据包的情况。ifconfig网络地址查看:5.2.1网络配置命令●用法:ifconfig-a:显示所有网卡,包括没有启动的网卡。ifconfig网卡名称up/down:表示开启或关闭网卡。ifconfigens33:0地址:表示给ens33配置虚拟网卡。ifconfig-s:网络通信情况。5.2.1网络配置命令2.hostname:查看或设置当前主机名●用法:hostname[主机名]:查看当前主机名(临时生效)。hostnamectlset-hostname[主机名]:设置当前主机名(临时生效)。bash:立刻刷新。vim/etc/hostname:永久修改。5.2.1网络配置命令●用法:route[-n]:将路由记录中的地址信息显示为数字形式。routeadd-net网段地址gwIP地址:添加指定网段的路由记录。routedel-net网段地址:删除指定网段的路由记录。routeadddefaultgwIP地址:向路由表中添加默认网关记录。routedeldefaultgwIP地址:删除路由表中默认的网关记录。3.route:查看或设置主机中路由表信息5.2.1网络配置命令●示例,如图5-2-2所示。5.2.1网络配置命令●用法:-a:显示主机中所有活动的网络连接信息。-n:以数字的形式显示相关的主机地址、端口等信息。-r:显示路由表信息。-l:显示处于监听(Listening)状态的网络连接及端口信息。-t:查看TCP相关的信息。-u:显示UDP协议相关的信息。-p:显示与网络连接相关联的进程号、进程名称信息(需要root权限)。4.netstat:查看网络连接情况5.2.1网络配置命令●示例,如图5-2-3所示。5.2.1网络配置命令●格式:ss[options]。●用法:-t:tcp协议相关。-u:udp协议相关。-w:裸套接字相关。-x:unix

sock相关。-l:listen状态的连接。-a:所有。5.ss:显示socket状态。-n:数字格式。-p:相关的程序及PID。-e:扩展的信息。-m:内存用量。-o:计时器信息。-r:把IP解释为域名,把端口号解释为协议名称。5.2.1网络配置命令●格式:ping[options]目标主机●用法:-c:发送多少个包。-w:表示等待10秒。-t:无终止ping(Linux自带-t)。6.ping:测试网络连通性5.2.1网络配置命令●示例如图5-2-4所示。5.2.2多网卡绑定多网卡绑定是指将多个物理网卡绑定到一个虚拟网卡上,以实现负载均衡、冗余和增加带宽的目的。这种技术可以提供高可用性和容错能力,当一个网卡出现故障时,不会影响业务。在多网卡绑定中,多个物理网卡虚拟成为一个虚拟网卡,它们具有相同的IP地址,并行链接聚合成一个逻辑链路。根据不同的工作模式,可以实现不同的策略,如主备模式、广播模式等。主备模式中,只有一个物理网卡被激活,当且仅当活动的物理网卡出现故障时才会激活其他物理网卡。而广播模式中,所有物理网卡都会发送所有的报文,提供容错能力。多网卡绑定可以在生产型系统中实现网络负载均衡,提高网络性能。同时,它也能为网卡提供冗余支持,当一块网卡发生物理性损坏的情况下,另一块网卡会自动启用,确保业务的正常运行。详情请见教材详情请见教材解析Liunx系统硬件接口PART03提起网络,我们一般想到的硬件就是“网卡”,现在网卡已经是通过一个芯片来完成了,嵌入式网络硬件分为两部分:MAC和PHY。大家都是通过看数据手册来判断一款SOC是否支持网络,如果一款芯片数据手册说自己支持网络,一般都是说的这款SOC内置MAC,MAC类似I2C控制器、SPI控制器一样的外设。但是光有MAC还不能直接驱动网络,还需要另外一个芯片:PHY,因此对于内置MAC的SOC,其外部必须搭配一个PHY芯片。内部没有MAC的SOC芯片,就需要使用外置的MAC+PHY一体芯片了,这里就涉及常见的两个嵌入式网络硬件接口方案。本任务将带领大家学习嵌入式下的网络硬件接口的知识。【职业能力目标】

1.了解嵌入式网络硬件接口方案。

2.了解嵌入式下的网络接口。【素质目标】

1.通过学习嵌入式下的网络硬件接口知识,学生将具有对于硬件技术的理解和实践能力。

2.学习嵌入式网络硬件接口知识需要综合运用多个领域的知识,包括硬件设计、嵌入式系统、网络通信等方面,培养学生的系统思维和综合能力,能够综合考虑硬件和软件、网络和通信等多个方面的因素,设计和实现嵌入式网络系统。5.3.1SOC内部没有网络MAC外设对于内部没有MAC的SOC芯片,可以使用外置MAC+PHY一体的网络芯片来实现网络功能。比如三星Linux开发板里面用得最多的DM9000,DM9000为SOC提供了一个SRAM接口,SOC会以SRAM的方式操作DM9000。有些外置的网络芯片更强大,内部甚至集成了硬件TCP/IP协议栈,对外提供一个SPI接口,比如W5500。这个一般用于单片机领域,单片机通过SPI接口与W5500进行通信。由于W5500内置了硬件TCP/IP协议栈,因此单片机就不需要移植软件协议栈,直接通过SPI来操作W5500,简化了单片机联网方案。这种方案的优点就是让不支持网络的SOC能够另辟蹊径,实现网络功能,但是缺点就是网络效率不高,因为一般芯片内置的MAC会有网络加速引擎,比如网络专用DMA,网络处理效率会很高。而且此类芯片网速都不快,基本就是10/100Mbit/s。另外,与PHY芯片相比,此类芯片的成本也比较高,可选择性比较少。5.3.1SOC内部没有网络MAC外设主控SOC与外置MAC+PHY芯片的连接如图5-3-1所示。5.3.2SOC内部集成网络MAC外设我们一般说某个SOC支持网络,说的就是它内部集成网络MAC外设,此时还需要外接一个网络PHY芯片。目前几乎所有支持网络的SOC都是内置MAC外设,比如STM32F4/F7/H7系列、NXP的I.MX系列。内部集成网络MAC外设的优点如下:

1.内部MAC外设会有专用的加速模块,比如专用的DMA,加速网络数据的处理。

2.网速快,可以支持10/100/1000Mbit/s网速。

3.外接PHY可选择性多,成本低。内部的MAC外设会通过MII或者RMII接口来连接外部的PHY芯片,MII/RMII接口用来传输网络数据。另外,主控需要配置或读取PHY芯片,也就是读写PHY的内部寄存器,所以还需要一个控制接口,叫作MDIO。MDIO与IIC类似,也是两根线,一根数据线叫作MDIO,一根时钟线叫作MDC。5.3.2SOC内部集成网络MAC外设主控SOC内部MAC外设与外部PHY芯片的连接如图5-3-2所示。5.3.3MII/RMII接口

前面提及内部MAC通过MII/RMII接口来与外部的PHY芯片连接,完成网络数据传输,本节我们就来学习一下什么是MII和RMII接口。5.3.3MII/RMII接口1.MII接口MII全称是MediaIndependentInterface,翻译过来就是介质独立接口,它是IEEE802.3定义的以太网标准接口,MII接口用于以太网MAC连接PHY芯片。连接如图5-3-3所示。5.3.3MII/RMII接口MII接口一共有16根信号线,含义如下:●TX_CLK:发送时钟信号,如果网速为100Mbit/s,则时钟频率为25MHz,10Mbit/s网速的话,时钟频率为2.5MHz,此时钟由PHY产生并发送给MAC。●TX_EN:发送使能信号。●TX_ER:发送错误信号,高电平有效,表示TX_ER有效期内传输的数据无效。10Mbit/s网速下TX_ER不起作用。●TXD[3:0]:发送数据信号线,一共4根。●RXD[3:0]:接收数据信号线,一共4根。●RX_CLK:接收时钟信号,如果网速为100Mbit/s,则时钟频率为25MHz,10Mbit/s网速的话,时钟频率为2.5MHz,RX_CLK也是由PHY产生的。5.3.3MII/RMII接口●RX_ER:接收错误信号,高电平有效,表示RX_ER有效期内传输的数据无效。10Mbit/s网速下RX_ER不起作用。●RX_DV:接收数据有效,作用类似于TX_EN。●CRS:载波侦听信号。●COL:冲突检测信号。MII接口的缺点就是所需信号线太多,这还没有算MDIO和MDC这两根管理接口的数据线,因此MII接口的使用已经越来越少了。5.3.3MII/RMII接口2.RMII接口RMII全称是ReducedMediaIndependentInterface,翻译过来就是精简的介质独立接口,也就是MII接口的精简版本。RMII接口只需要7根数据线,相比MII直接减少了9根,极大地方便了板子布线。RMII接口连接PHY芯片如图5-3-4所示。5.3.3MII/RMII接口RMII接口含义如下:●TX_EN:发送使能信号。●TXD[1:0]:发送数据信号线,一共2根。●RXD[1:0]:接收数据信号线,一共2根。●CRS_DV:相当于MII接口中的RX_DV和CRS这两个信号的混合。●REF_CLK:参考时钟信号,由外部时钟源提供,频率为50MHz。这里与MII不同,MII的接收和发送时钟是独立分开的,而且都是由PHY芯片提供的。除了MII和RMII以外,还有其他接口,比如GMII、RGMII、SMII、SMII等。这些其他接口基本都是大同小异的,这里就不做讲解了。正点原子ALPAH开发板上的两个网口都是采用RMII接口来连接MAC与外部PHY芯片。5.3.4MDIO接口

MDIO全称是ManagementDataInput/Output,翻译过来就是管理数据输入/输出接口,是一个简单的两线串行接口,一根MDIO数据线,一根MDC时钟线。驱动程序可以通过MDIO和MDC这两根线访问PHY芯片的任意一个寄存器。MDIO接口支持多达32个PHY。同一时刻内只能对一个PHY进行操作,那么如何区分这32个PHY芯片呢?和IIC一样,使用器件地址即可。同一MDIO接口下的所有PHY芯片,其器件地址不能冲突,必须保证唯一,具体器件地址值要查阅相应的PHY数据手册。因此,MAC和外部PHY芯片进行连接的时候主要是MII/RMII和MDIO接口,另外可能还需要复位、中断等其他引脚。5.3.5RJ45接口网络设备是通过网线连接起来的,插入网线的叫作RJ45座,如图5-3-5所示。5.3.5RJ45接口

RJ45座要与PHY芯片连接在一起,但是中间需要一个网络变压器,网络变压器用于隔离以及滤波等。网络变压器也是一个芯片,外形一般如图5-3-6所示。5.3.5RJ45接口但是现在很多RJ45座内部已经集成了网络变压器,比如最常用的HR911105A就是内置网络变压器的RJ45座。内置网络变压器的RJ45座和不内置的引脚一样,但是一般不内置的RJ45座会短一点。因此,大家在画板的时候一定要考虑你所使用的RJ45座是否内置网络变压器,如果不内置的话就要自行添加网络变压器部分电路。同理,如果你所设计的硬件是需要内置网络变压器的RJ45座,肯定不能随便焊接一个不内置变压器的RJ45座,否则网络工作会不正常。

RJ45座上一般有两个灯,一个黄灯,一个绿灯,绿灯亮的话表示网络连接正常,黄灯闪烁的话说明当前正在进行网络通信。这两个灯由PHY芯片控制,PHY芯片会有两个引脚来连接RJ45座上的这两个灯。内部MAC+外部PHY+RJ45座(内置网络变压器)就组成了一个完整的嵌入式网络接口硬件,如图5-3-7所示。5.3.5RJ45接口5.3.6PHY芯片

PHY是IEEE802.3规定的一个标准模块,前面说过,SOC可以对PHY进行配置或者读取PHY相关状态,这个就需要PHY内部寄存器去实现。PHY芯片寄存器地址空间为5位,地址为0~31共32个寄存器,IEEE定义了0~15这16个寄存器的功能,16~31这16个寄存器由厂商自行实现。也就是说不管你用的是哪个厂家的PHY芯片,其中0~15这16个寄存器是一模一样的。仅靠这16个寄存器是完全可以驱动起PHY芯片的,至少能保证基本的网络数据通信,因此Linux内核有通用PHY驱动,无论你使用的是哪个厂家的PHY芯片,都可以使用Linux的这个通用PHY驱动来验证网络工作是否正常。事实上在实际开发中可能会遇到一些其他的问题导致Linux内核的通用PHY驱动工作不正常,这个时候就需要驱动开发人员去调试了。但是,随着现在的PHY芯片性能越来越强大,32个寄存器可能满足不了厂商的需求,因此很多厂商采用分页技术来扩展寄存器地址空间,以求定义更多的寄存器。5.3.6PHY芯片这些额外的寄存器可用于实现厂商特定的技术,因此,Linux内核中的通用PHY驱动无法涵盖这些特色功能的驱动。在此情况下,PHY厂商需提供相应的驱动源码。因此,在Linux内核中,我们会看到众多具体的PHY芯片驱动源码。无论使用的PHY芯片具备何种特色功能,理论上来说,Linux内核的通用PHY驱动都能确保该PHY芯片实现基本的网络通信功能。因此,在更换PHY芯片后,无须过于担心网络驱动编写的复杂性。IEEE802.3协议英文原版中的“22.2.4Managementfunctions”章节,对PHY的前16个寄存器功能进行了规定,如图5-3-8所示。5.3.6PHY芯片详情请见教材详情请见教材01使用apt-get和vim工具02解析gcc/g++编译器与链接03掌握Makefile(自动化构建工具)与了解GDB(调试器)使用apt-get和vim工具PART01

在前面Linux操作系统的学习中,讲的都是一些与命令相关的知识。命令其实就是一种工具,Linux开发人员写好可执行程序,我们使用这些命令就相当于在执行开发人员编写的程序,也就是在使用工具。在本项目中,将会介绍一些Linux操作系统环境下的基础开发工具,用来帮助我们写代码,包括apt-get(软件包管理器)、vim(编辑器)等。【职业能力目标】

1.掌握Linux操作系统编程的操作。

2.掌握编辑器的使用方法。【素质目标】

1.通过介绍Linux操作系统环境下的基础开发工具,培养学生的自主学习和创新能力。

2.Linux操作系统环境下的基础开发工具可以帮助学生解决实际的开发问题,培养他们的问题解决能力和实践能力。6.1.1apt-get(软件包管理器)

在Ubuntu操作系统中,软件包的获取与维护主要依赖于软件源的管理。软件源指的是存放软件包的服务器地址,系统借此获取最新的软件包信息并实现更新。在软件包管理过程中,对软件源进行合理配置显得尤为重要。本节将阐述何为软件源和如何对软件源进行管理,涵盖软件源的添加、删除、优先级设置以及更新等环节以及其他相关内容。6.1.1apt-get(软件包管理器)软件源是用于存储软件包的服务器地址,当系统需要安装、更新或升级软件包时,会从该地址获取相应信息,以确保系统中的软件包始终保持最新版本。1.软件源6.1.1apt-get(软件包管理器)添加软件源可以让系统获取更多的软件包选择,删除不需要的软件源可以减少系统更新时的时间消耗和可能的冲突。添加软件源的命令如下(以添加官方源为例):●sudo

add-apt-repositorymain删除软件源的命令如下:●sudo

add-apt-repository--removemain2.添加或删除软件源6.1.1apt-get(软件包管理器)在操作系统中,软件源的优先级决定了在获取软件包时,系统首先考虑的供应源。用户可以通过编辑位于/etc/apt/preferences的文件来设置软件源的优先级。3.设置软件源的优先级6.1.1apt-get(软件包管理器)要保持系统中的软件包是最新的,需要定期更新软件源。可以通过以下命令更新软件源信息:●sudoapt-getupdate4.更新软件源6.1.1apt-get(软件包管理器)在终端中使用以下命令可以查询软件包的信息:●apt-cacheshow软件包名称5.使用apt-cache进行软件包信息查询6.1.1apt-get(软件包管理器)如果遇到软件包依赖关系不满足的情况,可以尝试使用以下命令修复:●sudoapt-get-finstall6.处理软件包依赖关系6.1.1apt-get(软件包管理器)用户可以通过编辑/etc/apt/apt.conf文件来定制apt-get的配置,设置代理、超时时间等,其命令如下:●sudonano/etc/apt/apt.conf7.定制apt-get配置6.1.2vim(编辑器)vim(编辑器)通常被简称为vi,它是Linux和UNIX操作系统上最基本的文本编辑器,类似于Windows系统下的notepad(记事本)编辑器。vim的代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类UNIX系统用户最喜欢的文本编辑器。vim有三种常用模式,分别是命令模式、插入模式、底行模式,如图6-1-1所示。1.vim(编辑器)概述6.1.2vim(编辑器)6.1.2vim(编辑器)(1)命令模式命令模式又叫作正常模式、普通模式、默认模式。进入vim后默认处于命令模式,可以转换为其他模式。在命令模式下,可以控制屏幕光标的移动,字符、字或行的删除、移动、复制等。按Esc键即可从其他模式退出到命令模式。光标移动的命令及功能见表6-1-1。2.vim的指令6.1.2vim(编辑器)6.1.2vim(编辑器)删除文字的命令及功能见表6-1-2。6.1.2vim(编辑器)复制/剪切的命令及功能见表6-1-3。6.1.2vim(编辑器)替换的命令及功能见表6-1-4。6.1.2vim(编辑器)撤销的命令及功能见表6-1-5。6.1.2vim(编辑器)更改的命令及功能见表6-1-6。6.1.2vim(编辑器)(2)插入模式只有在插入模式下才可以进行文字输入,该模式是使用最频繁的编辑模式,可以对文件中的内容进行正常编辑(像记事本一样)。在命令模式下,按i、a、o键都可以进入插入模式。插入模式就和我们在Windows中使用记事本一样,直接输入字符就可以使用。(3)底行模式在底行模式下,可以保存或退出文件,也可以进行文件替换(可以同时打开多个文件)、查找字符串、列出行号等操作。在命令模式下,按“Shift+;”键进入底行模式,底行模式的命令及功能见表6-1-7。6.1.2vim(编辑器)详情请见教材详情请见教材解析gcc/g++编译器与链接PART02

通过上个任务的学习,我们学会了软件包管理器apt-get和编辑器vim如何使用。现在我们可以使用vim来写代码了,但是写完该怎么运行呢?在Windows中,我们可以使用VisualStudio2019直接运行,然后在控制台就能看到自己的代码效果了,那么在Linux操作系统下呢?本任务将介绍在Linux操作系统中的编译器gcc/g++。【职业能力目标】

1.学会gcc/g++编译器的使用。

2.完成在Linux操作系统中编写运行代码。【素质目标】

1.学习在Linux操作系统中的编译器gcc/g++,培养学生的跨平台开发能力。

2.实践是学习的最好方式,通过实践,学生可以巩固所学知识,发现问题并解决问题,提升自己的编程能力和解决问题的能力。6.2.1gcc/g++编译器一个源文件(.c)变成可执行程序(.exe)需要经历两个步骤:编译(预处理、编译、汇编)、链接。

Windows中的VisualStudio2019是一个集成软件,它可以一键就实现这两个过程,但是在Linux中需要专门的工具来实现,这就是编译器。C语言的编译器叫gcc,C++的编译器叫g++。

gcc:将源文件编程成可执行程序。●用法:gcc[Opthons]源文件-o目标文件名●常用选项:

-E:从当前文件开始,进行完预处理停止,生成的文件我们一般加后缀.i。

-S:从当前文件开始,到编译停止,生成的文件我们一般加后缀.s。

-c:从当前文件开始,到汇编停止,生成的文件我们一般加后缀.o。

g++:是GCC(GNUCompilerCollection)的一部分,专门用于编译C++源代码。6.2.2源文件到可执行程序的过程下面我们来回顾一下源文件到可执行程序的过程。这个过程包括编译和链接,其中编译又包括预处理、编译、汇编三部分。6.2.2源文件到可执行程序的过程1.预处理预处理的作用:将头文件展开,复制到源文件中;去掉注释;进行宏替换;处理条件编译。示例如图6-2-1所示。6.2.2源文件到可执行程序的过程将我们写好的源文件进行预处理,在当前目录下会生成一个test.i的文件。如图6-2-2所示对比两个文件:左边的是test.c源文件,右边的是test.i进行了预处理的文件。6.2.2源文件到可执行程序的过程6.2.2源文件到可执行程序的过程●在图6-2-2中,我们可以看到:预处理后的文件,没有了包含头文件的语句,因为此时头文件被展开了,并且复制进了test.i文件中,可以看到,右边的文件我们写的部分是从841行开始的,之前的内容都是头文件展开的结果。●宏定义的标识符常量M被替换成了20。●没有宏定义SHOW,所以只保留了#else后的语句,进行了条件编译。●左边文件中的注释,在右边都不见了,进行了去注释。6.2.2源文件到可执行程序的过程2.编译编译器的作用是将预处理生成的.i文件中的内容都转换成汇编语言。案例如图6-2-3所示。6.2.2源文件到可执行程序的过程将预处理后的test.i文件进行汇编,在当前目录中会生成test.s文件。使用vim编辑器打开test.s文件,如图6-2-4所示,可以看到,里面的内容是汇编代码。6.2.2源文件到可执行程序的过程3.汇编汇编的作用是将编译生成的.s文件中的内容都转换成计算机能读懂的二进制机器码。示例如图6-2-5所示。6.2.2源文件到可执行程序的过程

使用指令od来查看test.o中的内容,如图6-2-6所示,将二进制的机器码以十六进制的形式显示了出来。6.2.2源文件到可执行程序的过程4.链接

最后使用gcc将汇编后的.o目标文件进行链接,就会生成可执行程序test,如图6-2-7所示。6.2.2源文件到可执行程序的过程

其中,-o是指定生成文件的名字,如果没有-o选项,默认会生成a.out文件。

链接的时候,使用gcc不用加任何选项。如果程序是一个C++程序,只需要把编译器gcc换成g++就可以。在上面的C程序中,并没有定义printf()函数,而且也只是包含了stdio.h的头文件,但最后的执行结果却符合我们的预期,这是怎么实现的呢?答案就是链接。在系统中,有一个库,这个库中放着C标准库中的所有函数。通过头文件,得知使用方法后,在C程序中执行到库函数的时候,就会链接库中的库函数,库函数也是.o目标文件,将我们自己的程序和库函数链接到一起,就会生成可执行程序.exe。系统中的C标准库名为:libc.so,在没有特别指定时,gcc会到系统默认的搜索路径“/usr/lib”下进行查找。链接分为动态链接和静态链接。6.2.2源文件到可执行程序的过程

(1)动态链接如图6-2-8所示的C程序中,除了库函数printf,以外,其他的内容都是我们自己的。6.2.2源文件到可执行程序的过程在处理这个程序的时候,我们自己的内容正常执行。当执行到库函数的时候由运行时的链接文件跳转到系统的标准库中,去链接标准库中库函数的.o文件。当链接完成后就生成可执行程序。动态链接的动态就体现在,用到的库函数需要跳转到动态库中去链接对应的.o文件。其中发生动态链接的标准库就叫作动态库。6.2.2源文件到可执行程序的过程(2)静态链接示例如图6-2-9所示。6.2.2源文件到可执行程序的过程

静态库与动态库相反,它不发生跳转。在静态库中,自己的程序内容正常执行,当执行到库函数的时候,会将标准库中对应的库函数内容全部复制到程序中库函数的地方,之后再生成可执行文件。6.2.2源文件到可执行程序的过程

再通过指令ldda.out查看可执行程序的属性,如图6-2-11所示。在图6-2-11方框中的内容表明这是一个动态库,动态库的文件名libc.so.6,按照动态库的命名规则,去掉前缀lib和后缀.so.6后,还剩下C,表明这是一个C语言的动态库。6.2.2源文件到可执行程序的过程

后面括号中的十六进制数字表示的是动态库在系统中的地址。根据上面所说,链接的库是动态库,那么就一定属于动态链接了。再使用file来查看一下可执行文件的属性,如图6-2-12所示,可以看到语句中说明这是一个动态链接。在编译test.c的时候,gcc不加任何选项,生成的就是可执行程序,而且也没有指定生成的文件名。6.2.2源文件到可执行程序的过程

在Linux操作系统中,翻译程序时,默认采用动态链接的方式。若欲采用静态链接,可在使用gcc编译源文件时,在指令末尾添加-static选项,此时将采用静态链接方式,如图6-2-13所示。6.2.2源文件到可执行程序的过程

运用file命令来查看所生成的可执行程序文件属性,显现出该文件为静态链接性质。如图6-2-14所示。6.2.2源文件到可执行程序的过程6.2.2源文件到可执行程序的过程

那么动态链接和静态链接的区别是什么呢?从图6-2-15中可以看出:静态链接生成的可执行程序test.a的大小是900440字节;动态链接生成的可执行程序test.so的大小是16000字节。可以看到静态链接生成的可执行程序比动态链接生成的可执行程序大很多。这是因为静态链接是将库函数复制过来,而动态链接是跳转到库中去调用库函数。6.2.2源文件到可执行程序的过程详情请见教材详情请见教材掌握Makefile(自动化构建工具)与了解GDB(调试器)PART03

在Linux操作系统中,如果我们有多个C、C++和其他语言的文件,并且想通过终端命令编译它们,那么该怎么做呢?前面我们学习了通过gcc/g++编译器进行编辑,但当文件数量过多时,就会出现各种各样的问题,为了解决这类问题,Makefile就出现了。makefile在编译大型项目的过程中,可以一次性编写大量的源文件,还可以设置所需的链接器标志。在本任务中将介绍Makefile(自动化构建工具)与GDB(调试器)。【职业能力目标】

1.学会使用Makefile。

2.了解GDB的工作模式。

【素质目标】

1.通过学习Makefile和GDB,培养学习者对自动化工具的认识和重视。

2.在使用GDB进行调试的过程中,需要注重代码质量和调试技巧。培养学生倡导和持续学习的精神。6.3.1makefile概述

Makefile是一种用于简化或组织编译代码的工具,是一组具有变量名称和目标的命令(类似于终端命令),用于创建和删除目标文件。简单来说,Makefile是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了哪些文件需要编译,哪些文件不需要编译,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重建等。它可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。以Linux下的C语言开发为例,多文件编译生成一个文件,编译的命令如图6-3-1所示。6.3.1makefile概述

outfile是要生成的可执行程序的名字,nameN.c是源文件的名字。这是我们在Linux下使用gcc编译器编译C文件的例子。如果我们遇到的源文件的数量不是很多,可以选择这样的编译方式。6.3.1makefile概述拿C语言来说,编译的时候gcc只会默认链接一些基本的C语言标准库,很多源文件依赖的标准库都需要我们手动链接。1.编译的时候需要链接库的问题6.3.1makefile概述如果我们去做项目开发,免不了要去修改工程项目的源文件,每次修改后都要去重新编译。一个大的工程项目的源文件可能有成百上千个。例如一个内核,或者是一个软件的源码包。这些都是我们做开发经常会遇到的。要完成这样的文件的编译,可能要花上半天的时间。而Makefile会彻底简化编译的操作。把要链接的库文件放在Makefile中,制定相应的规则和对应的链接顺序。这样只需要执行make命令,工程就会自动编译。每次想要编译工程的时候就执行make,省略掉手动编译中的参数选项和命令,非常方便。2.编译大的工程会花费很长的时间6.3.2依赖关系和依赖方法在学习Makefile之前,首先必须知道的一个概念就是依赖关系。如图6-3-2所示,方框中的内容就是依赖关系,依赖方在冒号的左边,被依赖方在冒号的右边。6.3.2依赖关系和依赖方法

●test可执行程序依赖于test.o目标文件,因为只有先有了test.o,才能有test。

●test.o目标文件依赖于test.s汇编文件,因为只有先有了test.s,才能有test.o。●test.s汇编文件依赖于test.i预处理后的文件,因为只有先有了test.i,才能有test.s。●test.i预处理后的文件依赖于test.c源文件,因为只有先有了test.c,才能有test.i。这就是依赖关系,并且依赖关系并不是相互的,就像图6-3-2中的文件,删除test.i文件,其他文件也可以存在。在知道依赖关系以后还需要知道依赖方法,也就是通过什么样的方法实现的依赖关系。如图6-3-3中方框中的内容就是依赖方法。6.3.2依赖关系和依赖方法6.3.2依赖关系和依赖方法●test之所以依赖test.o,是因为test是通过test.o链接以后生成的,所以此时的依赖方法就是方框中的链接。●test.o之所以依赖test.s,是因为test.o是通过test.s汇编后生成的,所以此时的依赖方法就是方框中的汇编。●test.s之所以依赖test.i,是因为test.o是通过test.i编译后生成的,所以此时的依赖方法就是方框中的编译。●test.i之所以依赖test.c,是因为test.i是通过test.c预处理后生成的,所以此时的依赖方法就是方框中的预处理。这就是依赖方法,通俗点说就是通过什么样的方法让双方产生了依赖。在编写Makefile文件的时候,依赖关系和依赖方法是必须写的,而且是一一对应的。在图6-3-3中,make解释Makefile中的内容时,采用顺序和递归相似,是从最后面向前面解释的。6.3.3Makefile的语法一个Makefile由一组规则组成。规则通常如下所示:

●targets:规则的目标,可以是ObjectFile(一般称它为中间文件),也可以是可执行文件,还可以是一个标签。●prerequisites:是我们的依赖文件,要生成targets所需要的文件或者是目标。可以是多个,也可以是没有。●command:make需要执行的命令(任意的shell命令)。可以有多条命令,每一条命令占一行。6.3.2依赖关系和依赖方法6.3.2依赖关系和依赖方法

下面通过一个例子来具体了解一下Makefile的规则。在Makefile文件中添加代码,如图6-3-4所示。6.3.2依赖关系和依赖方法

上述代码实现的功能就是编译test.c文件,通过这个实例可以详细地说明Makefile的具体使用。其中,test是目标文件,也是我们最终生成的可执行文件。依赖文件就是test.c源文件,重建目标文件需要执行的操作是gcc-otesttest.c。使用Makefile的方式:首先需要编写好Makefile文件,然后在shell中执行make命令,程序就会自动执行,得到最终的目标文件。6.3.4Makefile的工作流程

Makefile的具体工作流程可以通过例子来看一下:创建一个包含有多个源文件和Makefile的目录文件,源文件之间相互关联。在Makefile中添加以下代码:6.3.4Makefile的工作流程

在我们编译项目文件的时候,默认情况下,make执行的是Makefile中的第一个规则(Makefile中出现的第一个依赖关系),此规则的第一目标称之为“最终目标”或者是“终极目标”。在shell命令行执行make命令,就可以得到可执行文件main和中间文件main.o、test1.o和test2.o,main就是我们要生成的最终文件。通过Makefile我们可以发现,目标“main”在Makefile中是第一个目标,因此它就是make的终极目标。修改过任何C文件后,执行make将会重建终极目标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论