Linux系统USB子系统1----基础篇
sinye56 2025-01-01 22:33 7 浏览 0 评论
USB通信协议在嵌入式产品开发中非常普遍,常用于主机与各种外设间进行数据传输的标准协议。它具有高速、通用、即插即用等特点,使得我们可以方便地连接各种设备,如鼠标、键盘、打印机、存储设备等,但其开发中涉及到的相关知识和通信协议却比较复杂。以下为学习过程中作的简单笔记,共分为USB基础篇、linux系统中USB数据结构篇和USB协议分析篇。本文先介绍下USB的一些基础知识。
本文内容索引如下:
1.USB设备基本概念简介
2.USB2.0和USB3.0接口定义
3.USB设备插拔时硬件识别过程
4.USB 设备工作状态转换
5. USB设备枚举交互过程
1.USB设备基本概念简介:
1)USB主从关系:
USB是一种主从结构的系统。主机叫做Host,从机叫做Device,所有的USB传输,都是从USB主机这方发起;USB设备没有“主动”通知USB主机的能力。
主机具有一个或者多个USB主控制器(host controller)和根集线器(root hub)。主控制器主要负责数据处理,而跟集线器则提供一个连接主控制器与设备之间的接口和通路。
通常情况下,一个主机上有多个USB控制器和多个USB口,一个USB控制器下有一根集线器,一根集线器通常具有一个或者几个USB接口。通常集线器可以通过USB集线器来扩展USB接口,只是带宽是固定的,不能够拓宽,因为带宽是共享一个USB主控器的。
2)USB拓扑结构:
USB的拓扑结构看起来是一个金字塔形的结构,具体构成如下:
塔顶是USB的主控器和根集线器,下面接USB集线器,USB集线器将一个USB口扩展为多个USB口,多个USB口同样可以通过USB集线器扩展出更多的接口。不过USB口并不能通过USB集线器无止境的扩展,他是有限制的,例如在USB2.0规定它最多扩展6次。
理论上一个USB主控器最多可接127个设备,这是因为协议规定每个USB设备具有一个7bit地址(取值范围为0~127,地址用于给主机识别是哪个设备,其中0地址值得注意,是给刚接入未初始化的设备使用的)。
设备标示号:在主机操作系统确定对设备使用的驱动程序后,设备会被分配唯一的标识地址,范围从0-127;其中0地址为所有设备在没有分配唯一地址时使用的默认地址;
3)USB设备架构
USB设备是由一些配置、接口和端点构成的。其中配置和接口是USB功能的抽象,实际的数据传输由端点来完成。其对应关系如下图所示:
a.设备: 设备代表USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指出其所包含配置的个数。
b.配置:在使用USB设备前,必须为其选择一个合适的配置。如USB设备的低功耗模式和高功耗模式分别对应一个配置。配置描述符用于说明USB设备中各个配置的特性。
c.接口: 一个配置可以包含一个或多个接口。接口是一个端点的集合。接口描述符用于说明USB设备中各个接口的特性。
d.端点: 端点是USB设备中的实际物理单元,USB数据传输就是在主机和USB设备各个端点之间进行的。
l 在USB 系统中每一个端点都有唯一的地址,这是由设备地址和端点号给出的。
l 每个端点都有一定的属性,其中包括传输方式、总线访问频率、带宽、端点号和数据包的最大容量等。
l 每个端点都有个端点号,除了端点0外,每一个端点只能工作在一种传输类型(控制传输、中断传输、批量传输、实时传输)下,一个传输方向,即从主机到设备(称为输出端点),或者从设备到主机(称为输入端点),因此端点可看作一个单向的管道。
l 端点0 通常为控制端点,用于设备初始化参数等。端点0是设备的默认控制端点,既能输出也能输入,主要用于USB设备的识别过程。只要设备连接到USB 上并且上电端点0 就可以被访问。
e. 管道: 是主机软件(数据缓冲区)和USB设备的各个端点之间的数据传输链接,它是两者之间通信流的抽象。然而,实际的数据传输是由USB总线接口层来完成的。管道和USB设备中的端点一一对应,并且各个管道的数据传输是相互独立的。
管道有两种类型:流管道和消息管道。其中最为重要的消息管道是“缺省控制管道”,这个管道在设备开始上电后就存在了,它用于提供设备的配置与状态等信息。主机与设备之间的联络就是通过消息管道实现的。
4)USB主机协议类型:
USB主机控制器分为4种接口:
--- OHCI(Open Host Controller Inerface):微软主导的低速USB1.0(1.5Mbps)和全速USB1.1(12Mbps),OHCI接口的硬件简单,软件复杂。
--- UHCI(Universal Host Controller Interface):Intel主导的低速USB1.0(1.5Mbps)和全速USB1.1(12Mbps),而UHCI接口的软件简单,硬件复杂。
--- EHCI(Enhace Host Controller Interface):高速USB2.0(480Mbps)。
--- xHCI(eXtensible Host Controller Interface):USB3.0(5.0Gbps),采用了9针脚设针,同时也支持USB2.0、1.1等。
5). USB设备的传输类型:
--- 控制传输; -------无线Wi-Fi网卡等;
三个阶段:设置阶段(SETUP),数据传输(IN和OUT)和 状态阶段(表示整个传输过程已经结束)
--- 中断传输;------ 鼠标和键盘;
--- 及时传输; ------麦克风和喇叭;
--- 批量传输 ------ 打印机和存储设备;
6)常见的USB设备类别
--- 存储类设备(Mass Storage):如USB闪存驱动器、外部硬盘等。
--- 输入设备(HID):如键盘、鼠标、游戏手柄等。
--- 音频设备:如USB音响、麦克风等。
--- 视频设备:如USB摄像头等。
--- 网络设备,如:无线网卡等;
2.USB2.0和USB3.0接口定义:
1) usb引脚定义
a.USB2.0:
b.USB3.0:
USB3.0的接口比USB2.0多了5根线,这5根线分别是SSGND、SSRX+/-和SSTX+/-,即屏蔽地、发送差分对和接收差分对。
2)两端的连接顺序:
a.USB2.0:
b.USB3.0:
3)物理标识:
a.USB2.0:
b.USB3.0:
目前随着技术的高速发展,很多的笔记本电脑USB接口,开始同时提供对USB2.0及USB3.0提供支持,这个时候可以通过接口颜色来区别。
3.USB设备插拔时硬件识别过程:
1) 全速和低速USB设备:
--- 根据规范,全速和低速通过设备端的上拉电阻进行区分。当设备插入HUB或上电时,有上拉电阻的那根数据线就会被拉高,HUB根据D+/D-的电平判断所挂载的是全速设备还是低速设备。
---具体硬件做的处理如下:
主控端D+、D-接有15k下拉电阻,Usb设备的D-端和5v之间接有一个1.5k电阻,当插入主控端USB接口时,5v有电压了,就会拉高D-引脚,电脑就知道有设备接入。
---D-和5v之间有一个1.5k电阻代表的是低速设备;D+和5v之间有一个1.5k电阻代表的是一个全速设备。
a. 低速设备(usb1.0):
b. 全速设备(usb1.x):
2) 高速USB2.0设备:
高速设备usb2.0设备的识别过程比低速和全速设备要复杂一些。
---高速设备初始时和全速设备一样,D+线上有一个1.5k的上拉电阻。USB2.0的hub把它当作一个全速设备, 接下来hub和设备间会通过一系列握手信号确认双方的身份。
---在这里对速度的检测是双向的,比如高速的hub需要检测所挂上来的设备是高速、全速还是低速,高速的设备需要检测所连上的hub是USB2.0的还是1.x的,如果是前者,就进行一系列动作切到高速模式工作,如果是后者,就以全速模式工作。
---以下为高速USB2.0设备的协商过程:
a. hub检测到有设备插入时,向主机通报,主机发送Set_Port_Feature请求让hub复位新插入的设备。设备复位操作是hub通过驱动数据线到复位状态SE0(Single-ended 0,即D+和D-全为低电平),并持续至少10ms。
b. 高速设备看到复位信号后,通过内部的电流源向D-线持续灌大小为17.78mA电流。因为此时高速设备的1.5k上拉电阻还未撤销,在hub端,全速/低速驱动器形成一个阻抗为45欧姆(Ohm)的终端电阻,2电阻并联后仍是45欧姆左右的阻抗,所以在hub端看到一个约800mV的电压(45欧姆*17.78mA),这就是Chirp K信号。Chirp K信号的持续时间是1ms~7ms。
c. 在hub端,虽然下达了复位信号,并一直驱动着SE0,但USB2.0的高速接收器一直在检测Chirp K信号,如果没有Chirp K信号看到,就继续复位操作,直到复位结束,之后就在全速模式下操作。如果只是一个全速的hub,不支持高速操作,那么该hub不理会设备发送的Chirp K信号,之后设备也不会切换到高速模式。
d. 设备发送的Chirp K信号结束后100us内,hub必须开始回复一连串的KJKJKJ….序列,向设备表明这是一个USB2.0的hub。这里的KJ序列是连续的,中间不能间断,而且每个K或J的持续时间在40us60us之间。KJ序列停止后的100500us内结束复位操作。hub发送Chirp KJ序列的方式和设备一样,通过电流源向差分数据线交替灌17.78mA的电流实现。
e. 再回到设备端来。设备检测到6个hub发出的Chirp信号后(3对KJ序列),它必须在500us内切换到高速模式。切换动作有:
1) 断开1.5k的上拉电阻;
2) 连接D+/D-上的高速终端电阻,即全速/低速差分驱动器;
3) 进入默认的高速状态;
f. 执行1,2两步后,USB信号线就发生如下的变化:hub发送出来的Chirp KJ序列幅值降到了原先的一半,400mV。这是因为设备端挂载新的终端电阻后,配上原先hub端的终端电阻,并联后的阻抗是22.5欧姆。400mV就是由17.78mA*22.5Ohm得来。以后高速操作的信号幅值就是400mV而不像全速/低速那样的3V。
g. 至此,高速设备与USB2.0 hub握手完毕,进行后续的480Mbps高速信号通信。
3) 超高速USB3.0设备:
a. USB主机和设备通过电缆连接后,会在USB主机和设备端的接收线上产生一个等效下拉电阻R_Term(其范围在18~30Ω,由SSRX+/-上各一个50Ω的等效下拉电阻并联而成)
b. 设备连接前的充放电时间常数T=R_Detect*C_Parasitic
c. 设备连接后的充放电时间常数T=(R_Detect+R_Term)*(C_AC+C_Parasitic)
d. 显然,接入设备后,充放电时间常数会大大增大,根据充放电时间就可以判断有无设备插入。
e. 另外,接入R_term,会对R_Detect产生分压的左右,电压会下降。
f. USB3.0协议规定,下行端口需要每隔100ms打一次Rx Detect,来检测Deivce在不在。
4) Linux系统下如何识别USB接口的工作模式和速率?
a. 方法1:
$ lsusb –t
对照 USB 速率表:
b. 方法2:通过读写文件的方式来测试;
(1) . 找一个U盘设备插入系统后,先确认USB设备挂载路径: fdisk –l;
在输出中找到类似于“/dev/sdb1”的设备路径,这是USB存储设备的挂载路径。
(2) 创建一个测试文件:
使用以下命令来创建一个测试文件
dd if=/dev/zero of=/tmp/testfile bs=1M count=1024
此命令中,“/tmp/testfile”是我们将要测试的文件名,大小为1GB。可以根据需要更改文件大小。
(3) 测试读/写速度:
分别使用以下命令来测试读/写速度
dd if=/dev/sdb1 of=/dev/null bs=1M count=1024
#此命令会从USB存储设备中读取1GB数据到null设备中,输出中会显示读取速度。
dd if=/dev/zero of=/dev/sdb1 bs=1M count=1024
#此命令会将1GB数据写入到USB存储设备中,输出中会显示写入速度。
4.USB 设备工作状态转换
USB 设备在完成枚举之前,要经过一系列的状态变化,才能够最终完成枚举,在USB 设备接入主机到枚举完成的过程可分为以下的状态变化:
连接状态、供电状态、默认状态、地址状态、配置状态、挂起状态,其中,当设备变成配置状态时,即可认为 USB 设备和 USB 主机间的枚举完成.
1) 连接状态:
USB 设备需要先和主机建立起物理上的连接,USB 设备检测是否连接到主机, 以及 USB 主机检测是否有 USB 设备连接, 这是 USB 协议能够进行后续工作的前提,简单说来,检测连接状态的必要条件就是在 USB 设备接入时某些状态发生了变化。
USB 硬件和协议上可通过检测 VBUS、D+、D-这些信号线的电平信号状态来进行检测连接的方法,当然,USB 主机和设备也必须要具有检测断开的能力。
2)供电状态:
USB 设备可以从 USB 的 VBUS 上获取电源,或者通过外部电源获取电源,这一种称为自供电设备。而我们比较常见的是通过 VBUS 供电的设备称为总线供电设备。
3) 默认状态:
USB设备进入供电状态后,在被复位之前、不能响应总线上的任何事务,只有当 USB 设备被复位,处干默认状态后,才会响应主机发送过来的请求。
4)地址状态:
USB 设备在被复位后,且在 USB 主机给 USB 设备设置一个新的地址之前,所有的 USB 设备都使用默认的0地址与主机进行通信。当 USB 设备在收到主机发送的设置地址请求之后,USB 设备就会得到一个唯一的地址。USB 设备会一直保存这个地址并使用它与主机进行通信,直到设备被复位或者断开。
即使 USB 设备在获取唯一地址之后进入挂起状态,设备依然会保留这个地址,并在总线恢复后继续使用该地址,在设备挂起期间,主机也不能把该唯一地址分配给其他的 USB 设备。
5)配置状态:
在 USB 设备功能能够使用之前,USB 设备和 USB 主机必须协商确定功能相关的配置项,所有的配置项都以描述特的形式提供,其中配置状态所需的描述符主要有 以下6 种:
- -- 设备描述符
---配置描述符
--- 字符串描述符
--- 接口描述符
l ---端点描述符
--- 设备限定描述符
一旦相关功能参数被配置后,USB 设备就可以正常工作了,正常的 USB 设备在收到 USB 主机发出的复位信号后会进入默认状态,之前所指定的地址、所配置的接口和配置项都将无效,需要由 USB 主机重新指定设备地址,获取描述符并配置相关配置项,才能够使设备重新工作。
6) 挂起状态:
USB 设备在 USB 总线持续 3ms 没有活动时,设备就会自动进入挂起状态,有挂起则意味着有恢复状态,这两个状态切换是 USB 协议实现低功耗的一种机制。进入挂起状态后,USB 设备要维持所有的内部状态。
5.USB设备枚举交互过程
主机识别到有设备接入后,会发起枚举,读取设备的描述符信息后配置设备。枚举过程是让USB HOST认得这个USB设备,并且为该设备准备资源,建立好主机和设备之间的数据传递机制。USB设备的枚举(Enumeration)是一个由主机控制器(Host Controller)和USB设备之间的交互过程,用于初始化并配置设备以便通信。
枚举通信的完整过程具体如下:
1)设备上电与检测
当USB设备连接到主机时,主机通过检测到D+线上的电压变化来识别设备连接事件,并向host主机报告;
2)Hub检测所插入的设备是高速还是低速
hub通过检测USB总线空闲(Idle)时差分线的高低电压来判断所连接设备的速度类型,当host发来Get_Port_Status请求时,usb hub就将此设备的速度类型信息回复给host。USB 2.0规范要求速度检测要先于复位(Reset)操作。
3)hub复位设备
主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作。然后主机控制器就向hub发出一个 Set_Port_Feature请求让hub复位其管理的端口(刚才设备插上的端口)。hub通过驱动数据线到复位状态(D+和D-全为低电平 ),并持续至少10ms。当然,hub不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连接在该hub上的设备不受影响。
4)Host检测所连接的全速设备是否是支持高速模式
因为根据USB 2.0协议,高速(High Speed)设备在初始时是默认全速(Full Speed )状态运行,所以对于一个支持USB 2.0的高速hub,当它发现它的端口连接的是一个全速设备时,会进行高速检测,看看目前这个设备是否还支持高速传输,如果是,那就切到高速信号模式,否则就一直在全速状态下工作。
同样的,从设备的角度来看,如果是一个高速设备,在刚连接hub或上电时只能用全速信号模式运行(根据USB 2.0协议,高速设备必须向下兼容USB 1.1的全速模式)。随后hub会进行高速检测,之后这个设备才会切换到高速模式下工作。假如所连接的hub不支持USB 2.0,即不是高速hub,不能进行高速检测,设备将一直以全速工作。
5) Hub建立设备和主机之间的信息通道
主机不停地向hub发送Get_Port_Status请求,以查询设备是否复位成功。Hub返回的报告信息中有专门的一位用来标志设备的复位状态。
当hub撤销了复位信号,设备就处于默认/空闲状态(Default state),准备接收主机发来的请求。设备和主机之间的通信通过控制传输,默认地址0,端点号0进行。 (所有的USB设备在总线复位后其地址都为0,这样主机就可以跟那些刚刚插入的设备通过地址0通信。)
6)主机发送Get_Descriptor请求获取默认管道的最大包长度
默认管道(Default Pipe)在设备一端来看就是端点0。由于枚举过程不是多个设备并行处理,而是一次枚举一个设备的方式进行,所以不会发生多个设备同时响应主机发来的请求。
设备描述符的第8字节代表设备端点0的最大包大小。虽然说设备所返回的设备描述符(Device Descriptor)长度只有18字节,但系统也不在乎,此时,描述符的长度信息对它来说是最重要的,当完成第一次的控制传输后,也就是完成控制传输的状态阶段,系统会要求hub对设备进行再一次的复位操作(USB规范里面可没这要求)。再次复位的目的是使设备进入一个确定的状态。
7) 主机给设备分配一个地址
主机控制器通过Set_Address请求向设备分配一个唯一的地址。在完成这次传输之后,设备进入地址状态(Address state),之后就启用新地址继续与主机通信。这个地址对于设备来说是终生制的,设备在,地址在;设备消失(被拔出,复位,系统重启),地址被收回。同一个设备当再次被枚举后得到的地址不一定是上次那个了。
在本次传输中,USB 主机和设备都仍然使用地址0进行通信,在设备收到设置地址请求后,必须要在50ms 内处理该请求并完成该请求的状态阶段,
在完成状态阶段后,可以有 2ms 的恢复时间,在这个时间内,USB 主机不能使用其刚刚指定的地址与设备通信,在这个时间之后,设备必须要使用该新地址与主机进行通信,同时,设备不能对发送到旧地址的任何请求产生回复,除非新旧地址一致。
8) 获取完整设备描述符
前面我们讲到了设备描述符部分,并且在上面的新地址设置完成后,主机与设备将会用新的地址通信,USB 主机会用新地址与设备进行通信,来获取完整的 18 字节的 USB 设备描述符。USB 设备描述符的第 18 字节表示该设备配置描述符的数目
主机发送 Get_Descriptor请求到新地址读取设备描述符,这次主机发送Get_Descriptor请求后,会详细解析设备描述符的内容。设备描述符内信息包括端点0的最大包长度,设备所支持的配置(Configuration)个数,设备类型,VID(Vendor ID,由USB-IF分配), PID(Product ID,由厂商自己定制)等信息。
接下来,主机就会获取配置描述符。配置描述符总共为9字节。主机在获取到配置描述符后,根据里面的配置集合总长度,再获取配置集合。配置集合包括配置描述符,接口描述符,端点描符等等。
如果有字符串描述符的话,还要获取字符串描述符。另外HID设备还有HID描述符等。
枚举流程过程获取的信息有以下内容:
---获取设备描述符
--- 设置设备的地址
---获取完整设备描述符
---获取配置描述符
---获取字符串描述符
--- 获取限定描述符
---配置设备的配置描述符
9) 主机给设备挂载驱动
主机通过解析描述符后对设备有了足够的了解,会选择一个最合适的驱动给设备。 然后tell the world(announce_device)说明设备已经找到了,最后调用设备模型提供的接口device_add将设备添加到 usb 总线的设备列表里,然后 usb总线会遍历驱动列表里的每个驱动,调用自己的 match(usb_device_match) 函数看它们和你的设备或接口是否匹配,匹配的话调用device_bind_driver函数,现在就将控制权交到设备驱动了。
10)设备驱动选择一个配置
驱动(注意,这里是驱动,之后的事情都是有驱动来接管负责与设备的通信)根据前面设备回复的信息,发送Set_Configuration请求来正式确定选择设备的哪个配置(Configuration)作为工作配置(对于大多数设备来说,一般只有一个配置被定义)。至此,设备处于配置状态(Configured),当然,设备也应该使能它的各个接口(Interface)。
相关推荐
- CTO偷偷传我的系统性能优化十大绝招(万字干货)
-
上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、...
- 提升效率!VMware虚拟机性能优化十大实用技巧
-
我40岁,干跨境婚恋中介的。为服务各国用户,常得弄英语、日语、俄语系统环境,VMware虚拟机帮了不少忙。用久了发现优化下性能,效率能更高。今儿就来聊聊优化技巧和同类软件。一、VMware虚拟...
- 低延迟场景下的性能优化实践
-
本文摘录自「全球C++及系统软件技术大会」ScottMeyers曾说到过,如果你不在乎性能,为什么要在C++这里,而不去隔壁的Pythonroom呢?今天我们就从“低延迟的概述”、“低延迟系...
- Linux性能调优之内存负载调优的一些笔记
-
写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的...
- 优化性能套路:带你战胜这只后段程序员的拦路虎
-
来源|极客时间《卖桃者说》作者|池建强编辑|成敏你好,这里是卖桃者说。今天给大家推荐一篇文章,来自倪朋飞老师的专栏《Linux性能优化实战》,文章主要讲的是优化性能的套路,这几乎是每个后端程序员...
- SK海力士CXL优化解决方案已成功搭载于Linux:带宽提升30%,性能提升12%以上
-
SK海力士宣布,已将用于优化CXL(ComputeExpressLink)存储器运行的自研软件异构存储器软件开发套件(HMSDK)中主要功能成功搭载于全球最大的开源操作系统Linux上,不但提升了...
- Linux内核优化:提升系统性能的秘诀
-
Linux内核优化:提升系统性能的艺术在深入Linux内核优化的世界之前,让我们先来理解一下内核优化的重要性。Linux内核是操作系统的核心,负责管理系统资源和控制硬件。一个经过精心优化的内核可以显著...
- Linux系统性能优化:七个实战经验
-
Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速...
- 腾讯面试:linux内存性能优化总结
-
【1】内存映射Linux内核给每个进程都提供了一个独立且连续的虚拟地址空间,以便进程可以方便地访问虚拟内存;虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长的处理器,地址空间的范围也不同...
- Linux文件系统性能调优《参数优化详解》
-
由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除...
- Nginx 性能优化(吐血总结)
-
一、性能优化考虑点当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨当前系统结构瓶颈了解业务模式性能与安全1、当前系统结构瓶颈首先需要...
- Linux问题分析与性能优化
-
排查顺序整体情况:top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况;dstat2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态;vmstat2查...
- 大神级产品:手机装 Linux 运行 Docker 如此简单
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...
- 新手必须掌握的Linux命令
-
Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是...
- Linux 系统常用的 30 个系统环境变量全解析
-
在Linux系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的“魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在shell脚本编写时,巧妙运用环境变量,能让脚本如虎...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)