深入剖析Linux设备发现过程,解密系统如何识别硬件设备及其特性
Linux操作系统是世界上更流行的开源操作系统之一,因其高度的可定制性,广泛应用于不同领域,尤其在 服务器 、移动设备、物联网等领域受到广泛应用。Linux操作系统对硬件设备的支持也非常广泛,用户只需插入设备,操作系统就能自动识别硬件设备并完成设备驱动程序的加载,从而使设备能够正常工作。然而,这其中的实现细节并不是很清楚,本文将
一、基础知识
在开始深入剖析Linux设备发现过程之前,需要先了解一些基础知识。在Linux系统中,一切皆是文件,包括硬件设备。Linux系统会将硬件设备看作一个文件,称为设备文件,例如/dev/sda表示之一个SATA硬盘,/dev/tty1表示之一个控制台等。因此,设备驱动程序也需要以这种方式来访问设备。
对于Linux操作系统来说,设备驱动程序很关键,因为设备驱动程序直接负责将硬件设备与操作系统连接起来。在Linux系统中,设备驱动程序也可以看作一个文件,与设备文件类似,设备驱动程序文件名以“dev”开头,例如/dev/lp0表示之一个并口打印机设备驱动程序。
二、Linux设备发现过程
当用户打开Linux系统时,操作系统会自动识别计算机中存在的所有硬件设备,并加载相应的设备驱动程序。这个过程称为设备发现过程。设备发现过程包括以下几个步骤:
1.系统启动时进行的设备扫描
在Linux系统启动时,内核会扫描计算机中的所有设备,包括CPU、内存、硬盘、网卡等所有硬件设备。
2.系统启动时加载核心模块
在设备扫描完成后,内核会加载核心模块,包括ATA、USB等模块,这些模块可以识别并处理相应的硬件设备。
3.用户插入设备时的处理
当用户插入设备时,Linux系统也能够自动识别并处理相应的硬件设备。例如,如果用户插入一台USB摄像头,Linux系统会自动检测并加载该设备的驱动程序,使其能够正常工作。
4.设备移除时的处理
当用户移除硬件设备时,Linux系统也能够自动识别并卸载相应的设备驱动程序,避免占用系统资源。
三、Linux系统如何识别硬件设备及其特性
在设备发现过程中,设备驱动程序的加载是非常关键的一步。设备驱动程序直接负责将硬件设备与操作系统连接起来,使其能够正常工作。但是,系统如何识别存在的硬件设备?如何加载相应的设备驱动程序?
1.设备驱动程序的识别
Linux系统中,设备驱动程序是以模块的形式存在的。硬件设备可分为两类:一类是Linux内核支持的设备,这些设备已经有了相应的内核模块;另一类是Linux内核不支持的设备,这些设备的设备驱动程序并没有在内核中编译进去,需要用户手动加载。当用户插入设备时,系统会通过Ids表搜索该设备的识别码,从而确定该设备的类型,然后自动加载相应的设备驱动程序。如果系统中不存在相应的设备驱动程序,则需要手动下载并安装。
2.设备驱动程序的加载
当系统识别出硬件设备的类型后,会自动加载相应的设备驱动程序。设备驱动程序可以以模块的形式进行加载,也可以直接编译在内核中。
模块加载是指将设备驱动程序作为模块,在需要时进行加载。模块加载可以通过inod或modprobe命令进行执行。inod命令会将模块直接加载到系统中,但是需要用户手动维护模块的相关信息;而modprobe命令会先检查系统中是否有相关的模块,如果有则直接加载,如果没有则从相关配置文件中搜索并下载。
直接编译在内核中是指将设备驱动程序编译至内核镜像中,使其成为内核的一部分。这种方式在系统启动时会一次性全部加载,可以提高系统性能。但是,如果需要更新设备驱动程序,则需要重新编译整个内核镜像。
四、
Linux系统对硬件设备的支持是极为广泛的,用户只需要插入设备,系统就能自动识别硬件设备并完成设备驱动程序的加载,使设备能够正常工作。Linux设备发现过程包括系统启动时进行的设备扫描、系统启动时加载核心模块、用户插入设备时的处理以及设备移除时的处理。在设备驱动程序的识别上,系统会通过Ids表搜索该设备的识别码,从而确定该设备的类型,然后自动加载相应的设备驱动程序。而设备驱动程序的加载方式包括模块加载和直接编译在内核中两种方式。
因此,深入剖析Linux设备发现过程,能够更好的理解系统如何识别硬件设备及其特性,同时也对Linux系统的应用和开发有很大的意义。
相关问题拓展阅读:
linux怎么知道安装的是什么设备?系统怎么知道安装的是什么设备?
udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。udev的最新版本依赖于升级后的Linux kernel 2.6.13的uevent接口的最新版本。使用新版本udev的系统不能在2.6.13以下版本启动,除非使用noudev参数来禁用udev并使用传统的/dev来进行设备读取。
inux 传统上使用静态设备创建方法,因此大量设备节点在 /dev 下创建(有时上千个),而不管相应的硬件设备是否真正存在。通常这由一个MAKEDEV脚本实现,这个脚本包含了许多通过世界上(有幽默意味,注)每一个可能存在的设备相关的主设备号和次设备号对mknod程序的调用。采用udev的毁枯方法,只有被内核检测到的设备才会获取为它们创建的设备节点。因为这些设备节点在每次系统启动时被创建,他们会被贮存在ramfs(一个内存中的文件系统,不占用任何磁盘空间).设备节点不需要大量磁盘空间,因此它使用的内存可以忽略。
udev 执行sysfs怎样知道设备出现 在系统?应该使用什么设备号?对于被编进kernel的driver,当被kernel监测到时,直接注册目标with sysfs。使用模块方式编译的,当模余余扰块被load时,如前。once sysfs文件系统被mounted (on /sys),the>香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
linux下U盘怎么使用
本文为转载文章方案一:Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。 USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。 在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂点的子目录都是建立在/mnt里面的,我们也建在那里,当然也可以建在/目录下,名字可以自己定,我们就取名为usb,终端下的命令如下:mkdir /mnt/usb然后我们就可以接上我的U盘了,然后在终端下输入命令并击Enter键即可:mount /dev/sda1 /mnt/usb在Windows下当我们用完U盘后,在我们取下U盘前我们先要删除,同样在Linux下我们也要删除挂起点,方法是:umount /dev/sda1 /mnt/usb 或 umount /dev/sda1如果不把U盘给umount掉,那样很容易造成数据的丢失方案二:USB的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。 我在Red Hat里使用U盘的通用方法如下,屡试不爽1. 先别插U盘,/sbin/lsmod看是否有usb-storage。 如果没有的话:cd /lib/modules/2.4.20-8/kernel/drivers/usbfor v in *.o storage/*.o ; do /sbin/insmod $v ; done2. 这里再/sbin/lsmod,应该有usbcore、usb-ohci(或usb-uhci,根据主板芯片组而不同)、usb-storage、scsi_mod等。 其中usb-storage的状态应该为(unused)。 3. 插入U盘,不停的/sbin/lsmod,这期间usb-storage的状态应为Initializing,持续时间大约半分钟,其实就相当于Windows在右下角不停的弹汽球:)4. 初始化结束后, /sbin/fdisk -l,应该能看到/dev/sda1设备。 这时,执行mount /dev/sda1 /mnt/udisk 才能成功。 如果是MSDOS格式,又想看到中文,可以mount -t vfat /dev/sda1 /mnt/udisk -o iocharset=gb2312。 (为方便可以/etc/fstab加一行,以后就可以 mount /mnt/udisk就行了)。 5. 奇怪的是有时候fdisk是看不到sda1,但是也能mount上使用以上步骤挂U盘基本上可说是“万全”了。 台式机、笔记本、VMware都一样。 mkdir /mnt/usbmount /dev/sda1 /mnt/usb笔记本上安装linux用法和台式机一样ps:首先要检查lsmod|grep usb-storage 这是支持USB的模块。 如果没有的话,是无法操作USB接口的设备的。 如没有的话,可以手功modprobe usb-storage,一般查看U盘可以用fdisk -l可以很清楚的看到这个硬件的设备名,比猜测硬件名要准确多了

linux 怎么读取cpu功耗
获取CPU使用率1实时CPU使用率 类似任务管理器实时系统信息可以通过top命令查看。 显示的信息四个参数分别是:用户的模式(user)、低优先级的用户模式(nice)、系统内核模式(system)以及系统空闲的处理器时间(idle)2查看CPU处理器使用率对于CPU使用率一般都是通过CPU使用情况,查看/proc/stat cpu状态文件3平均CPU使用率对于一般某时间段CPU的使用率来说,可以通过查看/pRoc/loadavg 文件信息4第三方监控软件查看网上有很多网管,监控软件安装配置好之后。 可以通过网页管理查看CPU等硬件情况和CPU使用率,负载等参数END其它相关信息内存使用率 查看 /proc/meminfo查看内存详细信息,也可以通过free 命令查看网络利用率 通过查看文件/proc/net/dev 可以了解,centos系统的网络使用情况跟windows的网络情况类似
LINUX操作系统的启动过程
一、启动内核 首先介绍启动内核部分。 电脑启动时,BIOS装载MBR,然后从当前活动分区启动,LiLO获得引 导过程的控制权后,会显示LILO提示符。 此时如果用户不进行任何操作,LILO将在等待制定 时间后自动引导默认的操作系统,而如果在此期间按下TAB键,则可以看到一个可引导的操作 系统列表,选择相应的操作系统名称就能进入相应的操作系统。 当用户选择启动LINUX操作系统时,LILO就会根据事先设置好的信息从ROOT文件系统所在的分 区读取LINUX映象,然后装入内核映象并将控制权交给LINUX内核。 LINUX内核获得控制权后, 以如下步骤继续引导系统: 1. LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。 内核映象前面的一些 代码完成解压缩。 2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡,LINUX会提示用户 选择适当的文本显示模式。 但如果在内核的编译过程中预先设置了文本模式,则不会提示选 择显示模式。 该显示模式可通过LILO或RDEV工具程序设置。 3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序 进行配置。 这时,显示器上出现内核运行输出的一些硬件信息。 4. 接下来,内核装载ROOT文件系统。 ROOT文件系统的位置可在编译内核时指定,也可通过 LILO或RDEV指定。 文件系统的类型可自动检测。 如果由于某些原因装载失败,则内核启动 失败,最终会终止系统。 二、执行init程序 其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。 init的任务是 启动新进程和退出时重新启动其它进程。 例如,在大多数Linux系统中,启动时最初装入 六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台, 因而总是提供六个虚拟登陆控控制台进程。 控制init程序操作的规则存放在文件/etc/inittab中。 Red Hat Linux缺省的inittab文 件如下: # #inittab This file describes how the INIT process should set up the system in a certain #run-level. # # #Default runlevels used by RHS are: #0-halt(Do NOT set initdefault to this) #1-Single user mode #2-Multiuser,without NFS(the same as 3,if you do not have Networking) #3-Full multiuser mode #4-unused #5-X11 #6-reboot(Do NOT set initdefault to this) # id:3:initdefault: #system initialization si::sysinit:/etc/rc.d/ 10:0:wait:/etc/rc.d/rc 0 11:1:wait:/etc/rc.d/rc 1 12:2:wait:/etc/rc.d/rc 2 13:3:wait:/etc/rc.d/rc 3 14:4:wait:/etc/rc.d/rc 4 15:5:wait:/etc/rc.d/rc 5 16:6:wait:/etc/rc.d/rc 6 #Things to run in every runlevel ud:once:/sbin/update #Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now #When our UPS tells us power has failed,assume we have a few minutes of power a #shutdown for 2 minutes from now. #This does,of course,assume you have powered installed and your UPS connected and working #correctly. pf::powerfail:/sbin/shutdown -f -h +2 Power Restored;Shutdown Cancelled #Run gettys in standard runlevels 1:respawn:/sbin/minggetty tty1 2:2345:respawn:/sbin/minggetty tty2 3:2345:respawn:/sbin/minggetty tty3 4:2345:respawn:/sbin/minggetty tty4 5:2345:respawn:/sbin/minggetty tty5 6:2345:respawn:/sbin/minggetty tty6 #Run xdm in runlevel 5 x:5:respawn:/usr/bin/X11/xdm -nodaemon Linux有个运行级系统,运行级是表示系统当前状态和init应运行哪个进程并保持在这种 系统状态中运行的数字。 在inittab文件中,第一个项目指定启动时装入的缺省运行级。 上例中是个多用户控制台方式,运行级为3。 然后,inittab文件中每个项目指定第二个 字段的项目用哪种运行级(每个字段用冒号分开)。 因此,对运行级3,下列行是相关的: 13:3:wait:/etc/rc.d/rc 3 1:respawn:/sbin/minggetty tty1 2:2345:respawn:/sbin/minggetty tty2 3:2345:respawn:/sbin/minggetty tty3 4:2345:respawn:/sbin/minggetty tty4 5:2345:respawn:/sbin/minggetty tty5 6:2345:respawn:/sbin/minggetty tty6 最后六行建立Linux提供的六个虚拟控制台。 第一行运行启动脚本/etc/rc.d/ rc 3; 这将运行目录/etc/ rc.d/rc3.d中包含的所有脚本,这些脚本表示系统初始化时要启动的程序。 一般来说, 这些脚本不需要编辑或改变,是系统缺省的。
发表评论