首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LINUX下 Udev详解[通俗易懂]

如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从 2.6.13版本后移走了。目前取代他的便是文本要提到的udev--一个用户空间程序。 目前很多的Linux分发版本采纳了udev的方式,因为它在Linux设备访问,特别是那些对设备有极端需求的站点(比如需要控制上千个硬盘)和热插拔设备(比如USB摄像头和MP3播放器)上解决了几个问题。下面我我们来看看如何管理udev设备。 实际上,对于那些为磁盘,终端设备等准备的标准配置文件而言,你不需要修改什么。但是,你需要了解udev配置来使用新的或者外来设备,如果不修改配置,这些设备可能无法访问,或者说Linux可能会采用不恰当的名字,属组或权限来创建这些设备文件。你可能也想知道如何修改RS-232串口,音频设备等文件的属组或者权限。这点在实际的Linux实施中是会遇到的。 为什么使用udev 在此之前的设备文件管理方法(静态文件和devfs)有几个缺点: * 不确定的设备映射。特别是那些动态设备,比如USB设备,设备文件到实际设备的映射并不可靠和确定。举一个例子:如果你有两个USB打印机。一个可能称为 /dev/usb/lp0,另外一个便是/dev/usb/lp1。但是到底哪个是哪个并不清楚,lp0,lp1和实际的设备没有一一对应的关系,因为他可能因为发现设备的顺序,打印机本身关闭等原因而导致这种映射并不确定。理想的方式应该是:两个打印机应该采用基于他们的序列号或者其他标识信息的唯一设备文件来映射。但是静态文件和devfs都无法做到这点。 *没有足够的主/辅设备号。我们知道,每一个设备文件是有两个8位的数字:一个是主设备号 ,另外一个是辅设备号来分配的。这两个8位的数字加上设备类型(块设备或者字符设备)来唯一标识一个设备。不幸的是,关联这些身边的的数字并不足够。 */dev目录下文件太多。一个系统采用静态设备文件关联的方式,那么这个目录下的文件必然是足够多。而同时你又不知道在你的系统上到底有那些设备文件是激活的。 *命名不够灵活。尽管devfs解决了以前的一些问题,但是它自身又带来了一些问题。其中一个就是命名不够灵活;你别想非常简单的就能修改设备文件的名字。缺省的devfs命令机制本身也很奇怪,他需要修改大量的配置文件和程序。; *内核内存使用,devfs特有的另外一个问题是,作为内核驱动模块,devfs需要消耗大量的内存,特别当系统上有大量的设备时(比如上面我们提到的系统一个上有好几千磁盘时) udev的目标是想解决上面提到的这些问题,他通采用用户空间(user-space)工具来管理/dev/目录树,他和文件系统分开。知道如何改变缺省配置能让你之大如何定制自己的系统,比如创建设备字符连接,改变设备文件属组,权限等。 udev配置文件 主要的udev配置文件是/etc/udev/udev.conf。这个文件通常很短,他可能只是包含几行#开头的注释,然后有几行选项:

03
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    busybox配置telnetd

    busybox配置telnetd的问题 进入busybox源码文件夹,选择telnet,telnetd.后确保在ramdisk的sbin文件夹下存在inetd和in.telnetd或telned。在ramdisk中的mnt/etc文件夹中,确保存在文件fstab,service,inetd.conf,passwd文件确保fstab文件里存在none /dev/pts devpts mode=0622 0 0这一行确保services文件里存在 telnet 23/tcp 这一行确保inetd.conf中存在 telnet stream tcp nowait root /sbin/in.telnetd in.telnetd 确保passwd文件里存在root::0:0:root:/:/bin/sh,表示没有password的root帐号在kernal的代码中,通过makemenuconfig,在Character devices中选中Unix98 PTY support 在File systems中选中/dev/pts file system for Unix98 PTYs 退出后make zImage就可以在ramdisk的启动文件mnt/etc/init.d/rcS中,在mount –a的后面下一行添�inetd,使系统启动的时候就载入telnetd服新建inetd.conf文件,内容例如以下: # telnetstream tcp nowait root /usr/sbin/telnetd 执行inetd inetd.conf 在网上google了一天,终于能够确定要使用telnetd,内核必须配置下面项: dev/pts file system for Unix98 PTYs Unix98 PTY support (256) Maximum number of Unix98 PTYs in use (0-2048) 可我使用的2.6.14.1的内核,make menuconfig根本找不到这些配置项!那么内核是否支持这些选项呢?cat /proc/filesystems发现已支持devpts文件系统,那么uinx98 pty呢?查看内核的Kconfig和Makefile文件,发现仅仅要CONFIG_UNIX98_PTYS=y就会编译支持devpts文件系统和unix98的功能。而选择了嵌入式CPU内核会默认CONFIG_UNIX98_PTYS=y。所以我的内核已经支持telnet。 fstab文件里也载入了devpts文件系统: devpts /dev/pts devpts defaults 00 inittab文件里也指明了telnet的动作: tty0::askfirst:-/bin/sh 为什么还不行呢?困惑!后来细致想想,应该是设备文件节点的问题。我在开发板上移植2.6内核和驱动时一直没有使用devfs。由于devfs尽管方便,但同一时候也阻止了对设备文件节点的了解,且2.6内核已放弃了devfs。那么使用telnet应该创建那些文件节点呢?devpts会在/dev/pts下自己主动创建节点,还有什么呢?google了一会没有答案。后来忽然想起Kconfig文件里好象些说明,再去看一看,原来是这样: A pseudo terminal (PTY) is a software device consisting of two halves: a master and a slave. The slave device behaves identical to a physical terminal; the master device is used by a process to read data from and write data to the slave, thereby emulating a terminal. Typical programs for the master side are telnet servers and xterms. Linux has traditionally used the BSD-like names /dev/ptyxx for masters and /dev/ttyxx for slaves of pseudo terminals. This scheme has a number of problems. The GNU C library glibc 2.1 and later, however, supports the Unix98 naming standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseu

    03

    使用secureCRT连接超时(最详细最有效的解决,就这一篇就够了)

    从昨天下午到现在,可谓是一波三折,在网上查阅的文章不下100篇,结果很多都是没用的千篇一律,即使一些浏览器破千的文章,发现都是无头无尾,整个逻辑都很烂,最终通过一次次的失败到最后的成功使我不得不写篇指导,好让你们可以一次性解决问题,减少你们宝贵的时间,话不多话,现在开始吧! (开始之前,确保你们的Linux网络配置可以联网,输入ping www.baidu.com),若不成功,则先去这里,把网络配置好。Centos7安装图形化界面&连接不到网络的解决办法(相信你试了很多办法都没用,这里99%都可以解决 使用secureCRT进行连接,架构如下: 1,确保你的虚拟机Linux安装了ssh服务, 2,修改ssh的配置文件,因为ssh的配置文件默认很多都是未开通的 3,开启ssh服务,并进行检查服务 4,确保网络配置没有问题,确保可以后期进行传输文件,在虚拟机上ping主机,在主机上ping虚拟机 5,使用secureCRT进行连接,即可成功, 以上是整个连接过程的思路,接着我们来进**行操作吧 1,确保你的虚拟机Linux安装了ssh服务, 输入yum list installed | grep openssh-server,出现如下显示代表已经安装,若未出现,则需要输入yum install openssh-server进行安装

    02

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券