dev新建 linux_dev linux 创建 - CSDN
  • Linux /dev目录详解

    2018-04-19 15:11:52
    转载自 https://blog.csdn.net/maopig/article/details/7195048 在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下: dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为...

    转载自  https://blog.csdn.net/maopig/article/details/7195048

           在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下:

      dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

      Linux沿袭Unix的风格,将所有设备认成是一个文件。

      关于一些特殊设备,我曾经总结过一些:

      /dev/null和/dev/zero:http://www.51testing.com/index.php?uid-225738-action-viewspace-itemid-235339

      /dev/tty、/dev/console、/dev/pty、/dev/pts等:http://www.51testing.com/index.php?uid-225738-action-viewspace-itemid-212419

      设备文件分为两种块设备文件(b)字符设备文件(c)

      设备文件一般存放在/dev目录下,对常见设备文件作如下说明:

      /dev/hd[a-t]:IDE设备

      /dev/sd[a-z]:SCSI设备

      /dev/fd[0-7]:标准软驱

      /dev/md[0-31]:软raid设备

      /dev/loop[0-7]:本地回环设备

      /dev/ram[0-15]:内存

      /dev/null:无限数据接收设备,相当于黑洞

      /dev/zero:无限零资源

      /dev/tty[0-63]:虚拟终端

      /dev/ttyS[0-3]:串口

      /dev/lp[0-3]:并口

      /dev/console:控制台

      /dev/fb[0-31]:framebuffer

      /dev/cdrom => /dev/hdc

      /dev/modem => /dev/ttyS[0-9]

      /dev/pilot => /dev/ttyS[0-9]

      /dev/random:随机数设备

      /dev/urandom:随机数设备

      (PS:随机数设备,后面我会再写篇博客总结一下)

      /dev目录下的节点是怎么创建的?

      devf或者udev会自动帮你创建得。

      kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。

    展开全文
  • linux /dev目录

    2018-11-06 14:46:01
    linux /dev目录    dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外 部设备的驱动程序。这一点和我们常用的...

    linux /dev目录

     

     dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外 部设备的驱动程序。这一点和我们常用的windows, dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

      例如:我们在系统中键入:cd /dev/cdrom 我们就可以看到光驱中的文件了。同样道理,我们键入:cd /dev/mouse 就可以看看鼠标的相关文件。在这个目录下,有一个null设备,这个东西本身没有任何意义。如果你向这个目录写入文件或内容,他们统统有去无回。

     

    /dev/null是一个非常有用的字符设备文件,送入这个设备的所有东西都被忽略,如果将任何程序的输出结果重定向到/dev/null,则看不到任何输出信息。甚至于,您可以将某一用户的shell指向/dev/null 以禁止其登陆

     

    /dev/urandom用来生成低质量的随机数序列,不信用cat /dev/urandom try 一下,

     

     

    (2)设备文件
    UNIX系统与边在本系统上的各种设备之间的通讯,通过特别文件来实现,
    就程序而言,磁盘是文件,MODEM是文件,甚至内存也是文件.所有连接到系统上
    的设备都在/dev目录中有一个文件与其对应.
    当在这些文件上执行I/O操作时,
    由UNIX系统将I/O操作转换成实际设备的动作.例如,文件/dev/mem是系统的内
    存,如果cat这个文件,实际上是在终端显示系统的内存.为了安全起见,这个文
    件对普通用户是不可读的.因为在任一给定时间,内存区可能含有用户登录口令或运行程序的口令,某部分文件的编辑缓冲区,缓冲区可能含有用ed
    -x命令 解密后的文本,以及用户不愿让其他人存取的种种信息. 在/dev中的文件通常称为设备文件,用ls /dev命令可以看看系统中的一
    些设备: acuo 呼叫自动拨号器 console 系统控制台 dsknn 块方式操作磁盘分区 kmem 核心内存 mem 内存 lp 打印机
    mto 块方式操作磁带 rdsknn 流方式操作的磁盘分区 rmto 流方式操作的磁带 swap 交换区 syscon 系统终端 ttynn
    终端口 x25 网络端口 等等

     

    Linux沿袭Unix的风格,将所有设备认成是一个文件。
    设备文件分为两种:
    块设备文件(b)
    字符设备文件(c)
    设备文件一般存放在/dev目录下
    /dev/hd[a-t]:IDE设备
    /dev/sd[a-z]:SCSI设备
    /dev/fd[0-7]:标准软驱
    /dev/md[0-31]:软raid设备
    /dev/loop[0-7]:本地回环设备
    /dev/ram[0-15]:内存
    /dev/null:无限数据接收设备 ,相当于回收站
    /dev/zero:无限零资源
    /dev/tty[0-63]:虚拟终端
    /dev/ttyS[0-3]:串口
    /dev/lp[0-3]:并口
    /dev/console:控制台
    /dev/fb[0-31]:framebuffer
    /dev/cdrom => /dev/hdc
    /dev/modem => /dev/ttyS[0-9]
    /dev/pilot => /dev/ttyS[0-9]

    /dev/console:控制台和/dev/tty[0-63]:虚拟终端的区别与联系
    控制抬就好比电视机上的按钮,终端好比遥控板,他们的目的都是控制电视机,但是控制台必须在本地,而终端可以在远端,系统只有一个控制台,叫console,其他的都是终端

    /dev目录下的节点是怎么创建的

    devf或者udev会自动帮你创建得。

    kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的,搜索一下版面,以前有udev的机制论述

    参考资料:https://blog.csdn.net/sinat_36184075/article/details/71598834

    展开全文
  • Linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件, 对真实的硬件的设备进行操作。但是dev下的文件必须挂载到指定目录下,才可以被访问。 2.挂载点: 例如...

    1.dev
          在Linux系统中,/dev目录用来保存设备文件的.每个文件指向一个系统设备.用户的程序可以通过使用这些设备文件,
    对真实的硬件的设备进行操作。但是dev下的文件必须挂载到指定目录下,才可以被访问。

    2.挂载点

    例如:把dev下的设备文件挂载到/mnt/cdr 目录下,dev下的设备文件才可被访问。而/mnt/cdr称为挂载点

    挂载命令: mount /dev/cdrom /mnt/cdr
    解除挂载命令: cd .. 退出当前目录
                          umount /mnt/cdr

    展开全文
  • Linux PCI pci_dev创建

    2015-12-10 13:49:03
    简单分析linux pci驱动的框架以及pci_dev创建过程。

    Linux 下PCI驱动架构是Linux BUS,DEVICE,DRIVER架构。下面所有代码来自linux3.13.

    struct pci_dev 是描述device的数据结构。

    struct pci_driver是描述driver的数据结构。

    struct pci_bus是描述bus的数据结构。

    device和driver都是挂 bus上的。


    PCI 的 driver和device要做匹配验证的时候,验证的是vendor,id,class信息。

    static inline const struct pci_device_id * pci_match_one_device(const struct pci_device_id *id, const struct pci_dev *dev)
    {
    	if ((id->vendor == PCI_ANY_ID || id->vendor == dev->vendor) &&
    	    (id->device == PCI_ANY_ID || id->device == dev->device) &&
    	    (id->subvendor == PCI_ANY_ID || id->subvendor == dev->subsystem_vendor) &&
    	    (id->subdevice == PCI_ANY_ID || id->subdevice == dev->subsystem_device) &&
    	    !((id->class ^ dev->class) & id->class_mask))
    		return id;
    	return NULL;
    }

    这个函数就是pci device和driver匹配的最底层函数。可以看到比较的是vendor,id,class信息。它的调用路径是:

    pci_bus_match()->pci_match_device()->pci_match_one_device()


    很多人介绍了pci driver该怎么写。但忽略了pci device何时被创建。

    当一个pci driver注册到系统时,系统会去匹配pci driver和pci device。但这时其实pci device 已经被创建了,所以才能match。那pci device是在什么时候创建的呢?

    答案是系统初始化时。

    系统初始化时,会扫描pci总线,发现所有已经连在上面的设备,并为每个社保创建一个struct pci_dev对象。

    struct pci_bus *pci_scan_root_bus(struct device *parent, int bus,
    		struct pci_ops *ops, void *sysdata, struct list_head *resources)
    {
    	struct pci_host_bridge_window *window;
    	bool found = false;
    	struct pci_bus *b;
    	int max;
    
    	list_for_each_entry(window, resources, list)
    		if (window->res->flags & IORESOURCE_BUS) {
    			found = true;
    			break;
    		}
    
    	b = pci_create_root_bus(parent, bus, ops, sysdata, resources); // 创建pci bus
    	if (!b)
    		return NULL;
    
    	if (!found) {
    		dev_info(&b->dev,
    		 "No busn resource found for root bus, will use [bus %02x-ff]\n",
    			bus);
    		pci_bus_insert_busn_res(b, bus, 255);
    	}
    
    	max = pci_scan_child_bus(b);<span style="white-space:pre">	//扫描pci bus,找到pci设备
    
    	if (!found)
    		pci_bus_update_busn_res_end(b, max);
    
    	pci_bus_add_devices(b);
    	return b;
    }
    从pci bus的根开始扫描。

    unsigned int pci_scan_child_bus(struct pci_bus *bus)
    {
    	unsigned int devfn, pass, max = bus->busn_res.start;
    	struct pci_dev *dev;
    
    	dev_dbg(&bus->dev, "scanning bus\n");
    
    	/* Go find them, Rover! */
    	for (devfn = 0; devfn < 0x100; devfn += 8)
    		pci_scan_slot(bus, devfn);<span style="white-space:pre">	//扫描slot
    
            .
            .
            .
    	return max;
    }
    
    接着看pci_scan_slot()
    int pci_scan_slot(struct pci_bus *bus, int devfn)
    {
    	unsigned fn, nr = 0;
    	struct pci_dev *dev;
    
    	if (only_one_child(bus) && (devfn > 0))
    		return 0; /* Already scanned the entire slot */
    
    	dev = pci_scan_single_device(bus, devfn);//扫描设备,根据功能号
    	if (!dev)
    		return 0;
    	if (!dev->is_added)
    		nr++;
    
    	.
            .
            .
    	return nr;
    }
    继续,
    struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn)
    {
    	struct pci_dev *dev;
    
    	dev = pci_get_slot(bus, devfn);//看看slot上是不是已经有devfn对应的设备了
    	if (dev) {
    		pci_dev_put(dev);
    		return dev;
    	}
    
    	dev = pci_scan_device(bus, devfn); //slot上还没有,那就扫描一下
    	if (!dev)
    		return NULL;
    
    	pci_device_add(dev, bus);
    
    	return dev;
    }

    继续看pci_scan_device()

    static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn)
    {
    	struct pci_dev *dev;
    	u32 l;
    
    	if (!pci_bus_read_dev_vendor_id(bus, devfn, &l, 60*1000)) //读一读硬件,看看有没有devfn的设备存在
    		return NULL;
    
    	dev = pci_alloc_dev(bus); //有硬件设备存在,那就创建一个struct pci_dev的对象来代表它吧
    	if (!dev)
    		return NULL;
    
    	dev->devfn = devfn;
    	dev->vendor = l & 0xffff;
    	dev->device = (l >> 16) & 0xffff;
    
    	pci_set_of_node(dev); //看看device tree dts里有信息没
    
    	if (pci_setup_device(dev)) { //初始化pci_dev对象,包括vendor,id,class信息。
    		pci_bus_put(dev->bus);
    		kfree(dev);
    		return NULL;
    	}
    
    	return dev;
    }
    好了,基本的步骤就是如此。当然扫描还会一层一层的走下去,因为如果有pci桥,就会多一层。

    还有热插拔的设备,插上后会被创建device。

    看完struct pci_dev的创建,就能更完整地理解pci驱动的架构了。


    On kernel 4.3, the following list shows the sequence of the PCI bus create and scan.

    Dec  9 17:43:25 ubuntu kernel: [    0.538740] alexTrace: acpi_init() acpi_disabled=0
    Dec  9 17:43:25 ubuntu kernel: [    0.613669] alexTrace: acpi_pci_root_init register pci_root_handler
    Dec  9 17:43:25 ubuntu kernel: [    0.775337] alexTrace: acpi_pci_root_add
    Dec  9 17:43:25 ubuntu kernel: [    0.781491] alexTrace,pci_acpi_scan_root
    Dec  9 17:43:25 ubuntu kernel: [    0.784897] alexTrace: pci_create_root_bus
    Dec  9 17:43:25 ubuntu kernel: [    0.789678] alexdebug: pci_scan_child_bus
    Dec  9 17:43:25 ubuntu kernel: [    0.789730] alexdebug: pci_scan_slot devfn 0
    Dec  9 17:43:25 ubuntu kernel: [    0.789776] alexdebug: pci_scan_single_device devfn=0
    Dec  9 17:43:25 ubuntu kernel: [    0.789883] alexdebug: pci_scan_device devfn=0,debugcount=0
    Dec  9 17:43:25 ubuntu kernel: [    0.914795] alexdebug: pci_scan_bridge
    Dec  9 17:43:25 ubuntu kernel: [    0.914812] alexdebug: pci_scan_child_bus

    The first PCI scan starts from ACPI.

    If ACPI is disabled, then it starts from pci_legacy_init().




    展开全文
  • udev的支持主要作用是:在驱动初始化的代码里调用class_create(...)为该设备创建一个class,再为每个设备调用device_create(...); 内核中定义的struct class结构体,顾名思义,一个struct class结构体类型变量对应...
  • /dev/目录下有许多设备节点文件,比如u盘的文件/dev/sda,mmc卡的文件/dev/mmcblk0,这些文件通常是由udev或mdev程序检测到uevent事件后自动创建的。我们也可以通过mknod命令手动创建。 下面mmc卡为例,介绍如何创建...
  • linux kernel从 2.6 到 3.0 3.4 ... devfs已经被抛弃。 kernel交互的方式有 sysfs procfs 还有就是/dev下的节点, 这些节点是如何被创建出来的呢。 研究了半天,在kernel device_create代码看了遍,也只是发现...
  • Linux系统/dev/mapper目录浅谈 Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/mapper/VolGroup-lv_root和/dev/mapper/Volume-lv_home两个...
  • 随着 Udev 的广泛使用,Linux 发行版的智能程度越来越高,许多 Linux 新用户对 /dev 目录下的东西变得不再熟悉,有时候遇见问题就会抓狂。 Linux 中的设备按照存取方式的不同,可以分为两种: 字符设备无缓冲且...
  • 对于dev这个目录,我们知道它下面的文件,表示的是linux的设备。在windows系统中,设备大家很好理解,象硬盘,磁盘指的是实实在在硬件。而在文件系统的linux下面,都有对于文件与这些设备关联的。访问它们就可以放到...
  • Linux 新建分区

    2019-10-13 21:45:38
    Linux分区的理解: 硬盘接口: IDE接口:Linux对连接到IDE接口的硬盘使用/dev/hdx的方式命名,x一般为a,b,c等 SCSI接口:Linux对连接到SCSI接口的硬盘使用/dev/sdx的方式命名,x一般为a,b,c等。其实Linux对连接...
  • 在驱动中调用register_chrdev()注册字符设备后,驱动的内部功能已经实现,我们还要向用户提供操作接口,也就是在/dev/目录下创建字符设备节点,其中device_create函数就用于实现该功能。 首先创建设备所属的类 ...
  • 这是一篇网上找到的文章分析的很...在linux可以把设备看作文件并提供了和文件一样的统一的访问接口,相信大家已经有了一 点的了解,其底层对设备的不同操作主要是由file_operations描述符来控制,其封装了各 种设备的
  • 命令行输入: which nohup 复制这个地址。一般是/usr/bin cd vi .bash_profile 在最后一行,PATH=$PATH:$HOME/bin 后面添加刚才查询的地址: ...如果你想记录日志文件【新建日志记录文件】 touch my.lo...
  • 在modprobe或者insmod后,如果不自动创建设备文件,需要mknod手动创建设备文件,然后应用程序才能工作, 我们可以在安装了模块后,自动在/...在设备中添加用于创建设备文件的class和每个即将在/dev创建的设备
1 2 3 4 5 ... 20
收藏数 305,802
精华内容 122,320
关键字:

dev新建 linux