首先我们得知道Linux是怎么通过应用层写代码来控制硬件的
Linux和51、32不一样,51、32可以直接配置寄存器,也就是说51和32可以直接对硬件进行操作,而Linux写的程序属于应用层,应用层调用库函数,通过系统调用,通过调用内核来直接控制硬件设备
当开发板插入usb时,内核会第一时间知道,我们在应用层调用adb-devices指令时,却看不到任何连接,那是因为内核虽然检测到有usb接口接入,但是无法传到应用层,所以我们在应用层执行函数检测当然是检测不到的,所以就有的udev机制的存在
什么是udev机制呢?
udev是一个设备管理工具,udev以守护进程的方式进行,通过侦听内核发出来的uevent来管理 /dev目录下的设备文件,udev在用户空间(也就是应用层)运行,而不是在内核空间运行他能根据系统的硬件设备的状态动态更新设备文件。包括设备文件的创建,删除等,设备文件一般都是放在 /dev目录下。使用udev后在/dev目录下就只包含系统中真正存在的设备。
什么是uevent机制呢?
这个得从热插拔设备开始说起。最简单的一个例子就是U盘了。当我们在计算机上插上一个U盘的时候,系统的USB hub会检测到U盘设备接入,并且完成设备枚举过程(从设备上读出相应的设备信息),并在内核中创建相应的设备结构体。但是,usb设备千奇百态,内核不可能预先将所有usb设备驱动都增加到内存中来。也就是当插入U盘设备的时候,内核中不一定存在对应这个设备的usb驱动。这个时候USB驱动也许以模块的形式保存在硬盘上。载入驱动必然只能从用户态来进行,那这时候应该怎么办呢?
Linux对类似的情况设计了一种uevent的机制。当有新的设备加入的时候,将设备的信息发送消息到用户态。而用户态有一个udev的进程监听这个信息。当收到信息后做一定的解析,根据解析到的结果和用户程序的配置做一些处理,也包括加载驱动程序。
该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节点,更进一步,可以通知其它的应用程序,将该U盘设备mount到系统中,从而动态的支持该设备。
所以上面说了这么多uevent机制就一句话:如果有新设备加入,则向用户层udev发送新设备的消息
上面说了守护进程 ,那什么是守护进程呢?
最开始我还以为守护进程只是一个保护的作用,其实不完全是,守护进程是一个运行于后台的进程,它独立于终端,并且周期性的执行某个任务或者等待处理的时间,不需要用户的输入便可以提供服务,不是对整个系统就是对某个用户程序提供服务。在Linux中大多数服务器就是通过守护进程实现的,例如日志进程syslogd,web服务器httpd,邮件服务器sendmaol,数据库服务器mysqld,通常守护进程的结尾是通过d结尾的,Linux有30-50个日常活动的守护进程,守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行
ppid = 0:内核进程,跟随系统启动而启动,生命周期贯穿整个系统
cmd列名带[]这种,叫内核守护进程
cmd 列中名字不带 []的普通守护进程(用户集守护进程)init :也是系统守护进程,它负责启动各运行层次特定的系统服务;所以很多进程的 PPID 是 init ,也 负责收养孤儿进程。守护进程和普通进程的区别1. 守护进程和终端不挂钩;后台进程能往终端上输出东西 ( 和终端挂钩 ) ;2. 守护进