精华内容
下载资源
问答
  • 异常信息是说,不支持的格式,即该音频文件不支持,得到该文件的输入流。 原因分析:    Javax sound API默认支持的格式通过AudioFileFormate源码可以看出,是支持wav文件的,如下所示: 开始我百思不得其解,...


    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/79026786冷血之心的博客)


    Java Sound API是javaSE平台提供底层的(low-level)处理声音接口,可以实现音频文件的播放。

    其核心包括:

    • AudioSystem
    • AudioInputStream
    • AudioFormat
    • DataLine.Info
    • SourceDataLine
    • TargetDataLine等
    AudioSystem的默认输入设备是麦克风,默认输出设备是扬声器:
    1. SourceDataLine:源数据流,指AudioSystem的输入流,把音频文件写入到AudioSystem中
    2. TargetDataLine:目标数据流,指AudioSystem的输出流
    3. 当播放文件时,把文件内容写入AudioSystem的SourceDataLine
    4. 当录音时,把AudioSystem的TargetDataLine中的内容读入内存

    关于该API的基础知识,请各位自行查阅API,以下给出一个用来播放音频文件的Demo

    package com.ywq3;
    
    import java.io.File;  
    import java.io.IOException;  
      
    import javax.sound.sampled.AudioFormat;  
    import javax.sound.sampled.AudioInputStream;  
    import javax.sound.sampled.AudioSystem;  
    import javax.sound.sampled.DataLine;  
    import javax.sound.sampled.SourceDataLine;  
    
    public class Test {  
        public static void main(String[] args) throws Exception, IOException {  
            AudioInputStream audioInputStream;// 文件流  
            AudioFormat audioFormat;// 文件格式  
            SourceDataLine sourceDataLine;// 输出设备  
            File file = new File("D:\\music.wav"); 
            
      
            // 取得文件输入流  
            audioInputStream = AudioSystem.getAudioInputStream(file);  
            audioFormat = audioInputStream.getFormat();  
            // 转换文件编码  
            if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {  
                audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,  
                        audioFormat.getSampleRate(), 16, audioFormat.getChannels(),  
                        audioFormat.getChannels() * 2, audioFormat.getSampleRate(),  
                        false);  
                audioInputStream = AudioSystem.getAudioInputStream(audioFormat,  
                        audioInputStream);  
            }  
      
            // 打开输出设备  
            DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,  
                    audioFormat, AudioSystem.NOT_SPECIFIED);  
            sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);  
            sourceDataLine.open(audioFormat); // 打开具有指定格式的行,这样可以使行获得所有所需的系统资源并变得可操作
            sourceDataLine.start();  // 允许某一数据行执行数据I/O
              
            byte tempBuffer[] = new byte[320];  
            try {  
                int cnt;  
                // 读取数据到缓存区 
                // 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。
                // return: 读入缓冲区的总字节数;如果因为已经到达流末尾而不再有更多数据,则返回-1
                while ((cnt = audioInputStream.read(tempBuffer, 0,  
                        tempBuffer.length)) != -1) {  
                    if (cnt > 0) {  
                        // 写入缓存数据  
                        sourceDataLine.write(tempBuffer, 0, cnt); // 通过此源数据行将音频数据写入混频器
                    }  
                }  
                // Block等待临时数据被输出为空  
                // 通过在清空数据行的内部缓冲区之前继续数据I/O,排空数据行中的列队数据
                sourceDataLine.drain();  
                // 关闭行,指示可以释放的该行使用的所有系统资源。如果此操作成功,则将行标记为 closed,并给行的侦听器指派一个 CLOSE 事件。
                sourceDataLine.close();  
            } catch (Exception e) {  
                e.printStackTrace();  
                System.exit(0);  
            }  
        }  
    }    

    若程序正常运行,我们应该可以听到D盘下的一个叫做music.wav的音频文件被播放。

    若程序报错:
    Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1189)
    at com.ywq3.Test.main(Test.java:21)

    异常信息是说,不支持的格式,即该音频文件不支持,得不到该文件的输入流。

    原因分析:
     
          Javax sound API默认支持的格式通过AudioFileFormate源码可以看出,是支持wav文件的,如下所示:



    开始我百思不得其解,后来发现wav格式的音频文件是有其固定格式的,若明明是wav文件,却报错说不支持该格式,则可能是该wav文件内部格式有错误。


    我先前使用的一个wav文件是直接通过io流合成的,所以一直报不支持的错误。后来使用了一个正确的wav文件,则可以播放。

    下边给出一段如何使用javax sound合成wav音频文件的Demo,希望可以帮到各位小伙伴~
    import java.io.File;
    import java.io.IOException;
    import java.io.SequenceInputStream;
    import javax.sound.sampled.AudioFileFormat;
    import javax.sound.sampled.AudioInputStream;
    import javax.sound.sampled.AudioSystem;
    
    public class WavAppender {
        public static void main(String[] args) {
            String wavFile1 = "D:\\wav1.wav";
            String wavFile2 = "D:\\wav2.wav";
    
            try {
                AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
                AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));
    
                AudioInputStream appendedFiles = 
                                new AudioInputStream(
                                    new SequenceInputStream(clip1, clip2),     
                                    clip1.getFormat(), 
                                    clip1.getFrameLength() + clip2.getFrameLength());
    
                AudioSystem.write(appendedFiles, 
                                AudioFileFormat.Type.WAVE, 
                                new File("D:\\wavAppended.wav"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~


    本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。







    展开全文
  • Unix文件类型

    千次阅读 2017-08-12 12:49:54
    UNIX系统的大多数文件是普通文件或目录,但是也有另外一些文件类型文件类型包括如下几种。(1)普通文件(regular file).这是最常用的文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制数据,...

    UNIX系统的大多数文件是普通文件或目录,但是也有另外一些文件类型。文件类型包括如下几种。

    (1)普通文件(regular file).这是最常用的文件类型,这种文件包含了某种形式的数据。至于这种数据是文本还是二进制数据,对于UNIX内核而言并无区别。对于普通文件内容的解释由处理文件的应用程序进行。
    (一个值得注意的例外是二进制可执行文件。为了执行程序,内核必须理解其格式。所有二进制可执行文件都遵循一种标准化的格式,这种格式使内核能够确定程序文本和数据加载的位置,比如windows上面的EXE可执行文件放到UNIX下就不能执行,因为UNIX不知道EXE程序文本和数据加载的位置。)

    (2)目录文件(directory file)。这种文件包含了其他文件的命字以及指向与这些文件有关信息的指针。对一个目录文件具有读权限的任一进程都可以读该目录的内容,但只有内核可以直接写目录文件。进程必须使用函数才能更改目录。

    (3)块特殊文件(block special file)。这种类型的文件提供对设备(如磁盘)带缓冲的访问,每次访问可以固定长度为单位进行。
    **注意:**FreeBSD不再支持块特殊文件。对设备的所有访问需要通过字符串特殊文件进行。

    (4)字符特殊文件(character special file)。这种类型的文件提供对设备不带缓冲的访问,每次访问长度可变。系统中所有设备要么是字符特殊文件,要么是块特殊文件。

    (5)FIFO。这种类型的文件用于进程间通信,有时也称为命名管道(named pipe)

    (6)套接字(socket)。这种类型的文件用于进程间的网络通信。套接字也可用于在一台宿主机上进程之间的非网络通信。

    (7)符合链接(symbolic link).这种类型的文件指向另一个文件。

    文件类型信息包含在stat结构的st_mode成员中,可用下图4-1中的宏确定文件类型。这些宏的参数都是stat结构中的st_mode成员
    这里写图片描述(图4-1)

    POSIX.1允许实现将进程间通信(IPC)对象(如消息队列和信号量等)说明为文件。图4-2中的宏可用来从stat结构中确定IPC对象的类型。这些宏与图4-1中的不同,它们的参数并非st_mode,而是指向stat结构的指针。
    这里写图片描述(图4-2)
    消息队列,信号量以及共享存储对象在APUE讨论的4中UNIX系统中都不将这些对象表示为文件。(其实我并不知它具体指的是哪4个系统)

    例子:

    #include "apue.h"
    int main(int argc, char *argv[])
    {
        int i;
        struct stat buf;
        char *ptr;
        for (i=1; i < argc; ++i){
            printf("%s: ", argv[i]);
            if (lstat(argv[i], &buf) < 0){
                printf("lstat error\n");
                continue;
            }
            if (S_ISREG(buf.st_mode))
                ptr = "regular";
            else if (S_ISDIR(buf.st_mode))
                ptr = "directory";
            else if (S_ISCHR(buf.st_mode))
                ptr = "character special";
            else if (S_ISBLK(buf.st_mode))
                ptr = "block special";
            else if (S_ISFIFO(buf.st_mode))
                ptr = "fifo";
            else if (S_ISLNK(buf.st_mode))
                ptr = "symbolic link";
            else if (S_ISSOCK(buf.st_mode))
                ptr = "socket";
            else
                ptr = "** unknown mode **";
            printf("%s\n", ptr);
    
        }
        exit(0);
    }

    运行结果如下图:
    这里写图片描述
    有三个文件,没有结果因为我用的是Centos 6.8估计是路径不对.

    展开全文
  • Unity支持的模型文件篇Unity只支持三角形的(Triangulated)和四边形的(Quadrangulated)多边形网格(Polygon mesh)。... (unity支持文件类型,主要还是采用fbx文件)注:通过百度、谷歌以...

    Unity支持的模型文件篇

    Unity只支持三角形的(Triangulated)和四边形的(Quadrangulated)多边形网格(Polygon mesh)。其他形式的面都要转换成这种多边形。

     

    Unity支持两种类型的3D文件格式:

    1.通用的“出口型”3D文件

    如.fbx.dae、.3ds、.dxf、.obj等文件格式。 (unity支持的文件类型,主要还是采用fbx文件)

    注:通过在百度、谷歌以及官方文档的调研,FBX是公认的最佳导入格式。

     

    2.3D软件专用的3D文件格式

    Max, Maya, Blender,Cinema4D,Modo, Lightwave & Cheetah3D 等软件所支持的格式,如.MAX, .MB, .MA等等。 (主要使用的三维软件:3DMax 和 Maya,专业的三维软件可以相对的减少网格顶点数,减少不必要的资源占用)

     


    Unity 优化篇

    1. 对Unity的优化,最基础和最必要的就是对导入模型的优化,通过专业的三维软件可以去除模型不必要的网格顶点和面、线,(unity渲染模型是通过找模型的顶点,再构建线与面,创建网格,文件的材质、纹理(Texture)等,通过unity的shader把这些文件信息渲染出来)。

    2. 就是unity技术层面的优化。

    常见的优化建议

    1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU。
    2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unlit目录下的。它们更高效。
    3.尽可能共用材质。
    4.将不需要移动的物体设为Static,让引擎可以进行其批处理。
    5.尽可能不用灯光。
    6.动态灯光更加不要了。
    7.尝试用压缩贴图格式,或用16位代替32位。
    8.如果不需要别用雾效(fog)
    9.尝试用OcclusionCulling,在房间过道多遮挡物体多的场景非常有用。若不当反而会增加负担。
    10.用天空盒去“褪去”远处的物体。
    11.shader中用贴图混合的方式去代替多重通道计算。
    12.shader中注意float/half/fixed的使用。
    13.shader中不要用复杂的计算pow,sin,cos,tan,log等。
    14.shader中越少Fragment越好。
    15.注意是否有多余的动画脚本,模型自动导入到U3D会有动画脚本,大量的话会严重影响消耗CPU计算。
    16.注意碰撞体的碰撞层,不必要的碰撞检测请舍去。

    展开全文
  • 当我们往开发板移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,...

    一、什么是Linux设备文件系统

          首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些设备,那不是要一个一个的去手动的创建这些设备的设备文件节点,这给我们使用设备带来了极为的不便(在之前篇幅中讲的各种设备驱动的移植都是这样)。

          设备文件系统就是给我们解决这一问题的关键,他能够在系统设备初始化时动态的在/dev目录下创建好各种设备的设备文件节点(也就是说,系统启动后/dev目录下就有了各种设备的设备文件,直接就可使用了)。除此之外,他还可以在设备卸载后自动的删除/dev下对应的设备文件节点(这对于一些热插拔设备很有用,插上的时候自动创建,拔掉的时候又自动删除)。还有一个好处就是,在我们编写设备驱动的时候,不必再去为设备指定主设备号,在设备注册时用0来动态的获取可用的主设备号,然后在驱动中来实现创建和销毁设备文件(一般在驱动模块加载和卸载函数中来实现)。


    二、关于udev

           2.4 内核使用devfs(设备文件系统)在设备初始化时创建设备文件,设备驱动程序可以指定设备号、所有者、用户空间等信息,devfs 运行在内核环境中,并有不少缺点:可能出现主/辅设备号不够,命名不灵活,不能指定设备名称等问题。

          而自2.6 内核开始,引入了sysfs 文件系统。sysfs 把连接在系统上的设备和总线组织成一个分级的文件,并提供给用户空间存取使用。udev 运行在用户模式,而非内核中udev 的初始化脚本在系统启动时创建设备节点,并且当插入新设备——加入驱动模块——在sysfs上注册新的数据后,udev会创新新的设备节点

         udev 是一个工作在用户空间的工具,它能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建,删除,权限等。这些文件通常都定义在/dev 目录下,但也可以在配置文件中指定。udev 必须内核中的sysfs和tmpfs支持,sysfs 为udev 提供设备入口和uevent 通道,tmpfs 为udev 设备文件提供存放空间

        注意,udev 是通过对内核产生的设备文件修改,或增加别名的方式来达到自定义设备文件的目的。但是,udev 是用户模式程序,其不会更改内核行为。也就是说,内核仍然会创建sda,sdb等设备文件,而udev可根据设备的唯一信息来区分不同的设备,并产生新的设备文件(或链接)。而在用户的应用中,只要使用新产生的设备文件即可。

        

    三、udev和devfs设备文件的对比

           提到udev,不能不提的就是devfs,下面看一下udev 与 devfs 的区别:

    1、udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中

    2、当一个并不存在的 /dev 节点被打开的时候, devfs一样自动加载驱动程序而udev确不能。udev设计时,是在设备被发现的时候加载模块,而不是当它被访问的时候。 devfs这个功能对于一个配置正确的计算机是多余的。系统中所有的设备都应该产生hotplug 事件、加载恰当的驱动,而 udev 将会注意到这点并且为它创建对应的设备节点。如果你不想让所有的设备驱动停留在内存之中,应该使用其它东西来 管理你的模块 (如脚本, modules.conf, 等等) 。其中devfs 用的方法导致了大量无用的 modprobe 尝试,以此程序探测设备是否存在。每个试探性探测都新建一个运行 modprobe 的进程,而几乎所有这些都是无用的

    3、udev是通过对内核产生的设备名增加别名的方式来达到上述目的的。前面说过,udev是用户模式程序,不会更改内核的行为

           因此,内核依然会我行我素地产生设备名如sda,sdb等。但是,udev可以根据设备的其他信息如总线(bus),生产商(vendor)等不同来区分不同的设备,并产生设备文件。udev只要为这个设备文件取一个固定的文件名就可以解决这个问题。在后续对设备的操作中,只要引用新的设备名就可以了。但为了保证最大限度的兼容,一般来说,
    新设备名总是作为一个对内核自动产生的设备名的符号链接(link)来使用的。

         例如:内核产生了sda设备名,而根据信息,这个设备对应于是我的内置硬盘,那我就可以制定udev规则,让udev除了产生/dev/sda设备文件 外,另外创建一个符号链接叫/dev/internalHD。这样,我在fstab文件中,就可以用/dev/internalHD来代替原来的 /dev/sda了。下次,由于某些原因,这个硬盘在内核中变成了sdb设备名了,那也不用着急,udev还会自动产生/dev/internalHD这 个链接,并指向正确的/dev/sdb设备。所有其他的文件像fstab等都不用修改。

        而在在2.6内核以前一直使用的是 devfs,devfs挂载于/dev目录下,提供了一种类似于文件的方法来管理位于/dev目录下的所有设备,但是devfs文件系统有一些缺点,例 如:不确定的设备映射,有时一个设备映射的设备文件可能不同,例如我的U盘可能对应sda有可能对应sdb 。


    四、udev 的工作流程图

           下面先看一张流程图:


            前面提到设备文件系统udev的工作过程依赖于sysfs文件系统udev文件系统在用户空间工作,它可以根据sysfs文件系统导出的信息(设备号(dev)等),动态建立和删除设备文件

            sysfs文件系统特点:sysfs把连接在系统上的设备和总线组织成为一个分级的目录及文件,它们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性,这其中就包括设备的主次设备号

           

          那么udev 是如何建立设备文件的呢?

    a -- 对于已经编入内核的驱动程序

       当被内核检测到的时候,会直接在 sysfs 中注册其对象;对于编译成模块的驱动程序,当模块载入的时候才会这样做。一旦挂载了 sysfs 文件系统(挂载到 /sys),内建的驱动程序在 sysfs 注册的数据就可以被用户空间的进程使用,并提供给 udev 以创建设备节点

        udev 初始化脚本负责在 Linux 启动的时候创建设备节点,该脚本首先将 /sbin/udevsend 注册为热插拔事件处理程序。热插拔事件本不应该在这个阶段发生,注册 udev 只是为了以防万一。

       然后 udevstart 遍历 /sys 文件系统(其属性文件dev中记录这设备的主设备号,与次设备号),并在 /dev 目录下创建符合描述的设备文件。

      例如,/sys/class/tty/vcs/dev 里含有"7:0"字符串,udevstart 就根据这个字符串创建主设备号为 7 、次设备号为 0 的 /dev/vcs 设备。udevstart 创建的每个设备的名字和权限由 /etc/udev/rules.d/ 目录下的文件指定的规则来设置。如果 udev 找不到所创建设备的权限文件,就将其权限设置为缺省的 660 ,所有者为 root:root 。


    b -- 编译成模块的驱动程序

          前面我们提到了"热插拔事件处理程序"的概念,当内核检测到一个新设备连接时,内核会产生一个热插拔事件,并在 /proc/sys/kernel/hotplug 文件里查找处理设备连接的用户空间程序。udev 初始化脚本将 udevsend 注册为该处理程序。当产生热插拔事件的时候,内核让 udev 在 /sys 文件系统里检测与新设备的有关信息,并为新设备在 /dev 里创建项目

         大多数 Linux 发行版通过 /etc/modules.conf 配置文件来处理模块加载,对某个设备节点的访问导致相应的内核模块被加载。对 udev 这个方法就行不通了,因为在模块加载前,设备节点根本不存在。为了解决这个问题,在 LFS-Bootscripts 软件包里加入了 modules 启动脚本,以及 /etc/sysconfig/modules 文件。通过在 modules 文件里添加模块名,就可以在系统启动的时候加载这些模块,这样 udev 就可以检测到设备,并创建相应的设备节点了。如果插入的设备有一个驱动程序模块但是尚未加载,Hotplug 软件包就有用了,它就会响应上述的内核总线驱动热插拔事件并加载相应的模块,为其创建设备节点,这样设备就可以使用了。



    五、创建和配置mdev

             mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般都用在PC上的Linux中,相对mdev来说要复杂些;

    1、我们应该明白,不管是udev还是mdev,他们就是一个应用程序,就跟其他应用程序一样(比如:Boa服务),配置了就可以使用了。为了方便起见,我们就使用busybox自带的一个mdev,这样在配置编译busybox时,只要将mdev的支持选项选上,编译后就包含了mdev设备文件系统的应用(当然你也可以不使用busybox自带的,去下载udev的源码进行编译移植。

    #cd busybox-1.13.0/
    #make menuconfig

    Linux System Utilities --->
        [*] mdev 
        [*]   Support /etc/mdev.conf 
        [*]     Support subdirs/symlinks 
        [*]       Support regular expressions substitutions when renaming device 
        [*]     Support command execution at device addition/removal


    2、udev或者mdev需要内核sysfs和tmpfs虚拟文件系统的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间。所以在/etc/fstab配置文件中添加如下内容(红色部分):

    # device  mount-point     type      options    dump    fsck order
    #----------------------------------------------------------------
    procfs    /proc           proc      defaults    0      0
    sysfs     /sys            sysfs     defaults    0      0
    tmpfs     /dev/shm        tmpfs     defaults    0      0

    usbfs     /proc/bus/usb   usbfs     defaults    0      0
    ramfs     /dev            ramfs     defaults    0      0
    none      /dev/pts        devpts    mode=0622   0      0


    3.、在系统初始化配置文件/etc/init.d/rcS中挂载mdev要用到的sysfs文件系统和tmpfs文件系统,这个在我们介绍根文件系统时已经看到:



         然后启动/sbin目录下的mdev应用对系统的设备进行搜索(红色部分)。

    # Mount virtual filesystem
    /bin/mount -t     proc     procfs    /proc
    /bin/mount -n -t  sysfs    sysfs     /sys
    /bin/mount -n -t  usbfs    usbfs     /proc/bus/usb
    /bin/mount -t     ramfs    ramfs     /dev

    # Make dir
    /bin/mkdir -p /dev/pts
    /bin/mkdir -p /dev/shm
    /bin/mkdir -p /var/log
    /bin/mount -n -t devpts none     /dev/pts -o mode=0622
    /bin/mount -n -t tmpfs tmpfs     /dev/shm

    # Make device node
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    /sbin/mdev -s


    a -- " mdev -s " 的含义是扫描 /sys 中所有的类设备目录,如果在目录中有含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为该设备在/dev下创建设备节点文件;

    b -- "echo /sbin/mdev > /proc/sys/kernel/hotplug" 的含义是当有热插拔事件产生时,内核就会调用位于 /sbin 目录的 mdev 。这时 mdev 通过环境变量中的 ACTION 和DEVPATH,来确定此次热插拔事件的动作以及影响了 /sys 中的那个目录。接着,会看这个目录中是否有“dev”的属性文件。如果有就利用这些信息为这个设备在 /dev 下创建设备节点文件。

    4、在设备驱动程序中加上对类设备接口的支持,即在驱动程序加载和卸载函数中实现设备文件的创建与销毁,这个在我们前面Linux 字符设备驱动结构(二)—— 自动创建设备节点 可以看到实例,下面在介绍一个

         例如在之前篇幅的按键驱动中添加(红色部分):

    #include <linux/device.h> //设备类用到的头文件
    staticint device_major = DEVICE_MAJOR; //用于保存系统动态生成的主设备号
    staticstruct class *button_class; //定义一个类
    
    static int __init button_init(void)
    {
        //注册字符设备,这里定义DEVICE_MAJOR=0,让系统去分配,注册成功后将返回动态分配的主设备号
        device_major = register_chrdev(DEVICE_MAJOR, DEVICE_NAME,&buttons_fops);
    
        if(device_major< 0)
        {
            printk(DEVICE_NAME " register faild!/n");
            return device_major;
        }
    
        //注册一个设备类,使mdev可以在/dev/目录下建立设备节点
        button_class =class_create(THIS_MODULE, DEVICE_NAME);
    
        if(IS_ERR(button_class))
        {
            printk(DEVICE_NAME" create class faild!/n");
            return-1;
        }
    
        //创建一个设备节点,取名为DEVICE_NAME(即my2440_buttons)
        //注意2.6内核较早版本的函数名是class_device_create,现该为device_create
        device_create(button_class,NULL,MKDEV(device_major,0),NULL,DEVICE_NAME);
    
        return 0;
    }
    
    static void __exit button_exit(void)
    {
        //注销字符设备
        unregister_chrdev(device_major, DEVICE_NAME);
    
        //删除设备节点,注意2.6内核较早版本的函数名是class_device_destroy,现该为device_destroy
        device_destroy(button_class,MKDEV(device_major,0));
    
        //注销类
        class_destroy(button_class);
    }


    5、至于mdev的配置文件/etc/mdev.conf,这个可有可无,只是设定设备文件的一些规则。我这里就不管他了,让他为空好了。
     
    6、完成以上步骤后,重新编译文件系统,下载到开发板上,启动开发板后进入开发板的/dev目录查看,就会有很多系统设备节点在这里产生了,我们就可以直接使用这些设备节点了。




    展开全文
  • Linux文件系统类型

    千次阅读 2018-05-31 16:30:06
     即磁盘组织文件的方法。也指用于存储文件的磁盘或分区一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘。这个过程就叫建立文件系统 种类:1 ext2与ext3是linux专门设计的硬盘...
  • Linux系统如何支持NTFS文件系统?

    万次阅读 2017-03-16 07:32:35
    由于Linux系统默认是不支持NTFS文件系统的,因此,我们基本Linux系统中挂载NTFS文件系统类型的硬盘或移动硬盘。为此,最主要的问题是如何使Linux系统支持NTFS文件系统。一般情况下,Linux系统中,我们并...
  • 1. 你要注册(向ios/mac系统)申明app能够打开某种类型的文档,这样其他app才可能通过DIC(document interaction interface)把文件转给你app来打开 2. 注册就要plist里声明: document types(我猜的),然后...
  • 文件系统的类型简介

    千次阅读 2016-04-15 17:43:14
    Linux支持多种文件系统类型,包括ext2、ext3、vfat、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的应用编程接口。...
  • 提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢? 一、Linux 设备模型 1、设备模型概述  从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。以前的内核中没有...
  • linux文件系统类型

    万次阅读 2018-01-09 20:27:38
     Linux 支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类...若系统能从指定设备上...
  • Linux下的文件类型及文件后缀名详解

    千次阅读 2013-11-19 14:29:51
    Linux下的文件类型及文件后缀名详解 1、Linux文件的扩展名; 一谈到文件类型,大家就能想到Windows的文件类型,比如file.txt、file.doc、file.sys、file.mp3、file.exe等,根据文件的后缀就能判断文件的类型。但...
  • Linux操作系统文件类型有哪几种?

    万次阅读 2018-07-30 22:10:13
    Linux文件类型常见的有: 普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等,现在我们进行一个简要的说明。 1. 普通文件  我们用 ls -lh 来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得...
  • linux常见文件系统类型

    万次阅读 2018-07-01 22:41:54
    msdos: dos文件系统类型vfat:支持长文件名的dos分区文件系统,可以理解为winds文件系统类型iso9660: 光盘格式文件系统ext2/ext3/ext4: linux下主流的文件系统xfs: linux下一种高性能的日志文件系统,centos7.x...
  • 但是,这个目录包含了大量的特殊文件,每个文件都指示不同类型设备,或现有设备上的分区。例如,/dev/hda设备指示系统的第一个硬盘驱动器; /dev/hda1指示第一个硬盘驱动器的第1分区,而/dev/hda2是第2个硬盘驱动...
  • 1. CreateFile 这个函数的功能是创建或者打开一个文件或者I/O设备,通常使用的I/O形式有文件文件流、目录、物理磁盘、卷、终端流等。如执行成功,则返回文件句柄。 INVALID_HANDLE_VALUE 表示出错,会设置 ...
  • LINUX中的七种文件类型

    千次阅读 2018-08-13 10:16:18
    LINUX中的七种文件类型 d 目录文件。 l 符号链接(指向另一个文件,类似于window下的快捷方式); s 套接字文件; b 块设备文件,二进制文件; c 字符设备文件; p 命名管道文件; - 普通文件。 l 符号链接的...
  • 虚拟机文件类型前文列表VMware 虚拟化编程(1) — VMDK/VDDK/VixDiskLib/VADP 概念简析虚拟磁盘文件 VMDK虚拟磁盘文件(VMDK File) 后缀为 .vmdk,是虚拟机的存储卷,Guest OS File System 储存 VMDK File,
  • LEDE的vmdkesxi下提示scsi0:0的磁盘类型不支持或无效 0.LEDE VMDK 导入 ESXI中导入LEDE的VMDK。 启动后,直接报错,显示SCSI0:0的磁盘不支持。 VMDK磁盘文件转换 找到VMDK的所搭载的地方。 然后打开...
  • LaTex广泛用于学术报告、paper、学术PPT的撰写和制作,熟练掌握LaTex是...本文简要介绍了Windows 8平台安装LaTex工具的基本方法和流程。 1、下载MiKTeX。http://miktex.org/download MiKTeX的正确读音为/'mik'tek/
  • 如你所知,Linux 支持非常多的文件系统,例如 ext4、ext3、ext2、sysfs、securityfs、FAT16、FAT32、NTFS 等等,当前被使用最多的文件系统是 ext4。你曾经疑惑过你的 Linux 系统使用的是什么类型文件系统吗?没有...
  • Ubuntu文件系统类型

    千次阅读 2012-07-26 20:38:48
    文件系统类型 windows中我们常见的磁盘格式有fat16、fat32和ntfs。但是windows的文件管理显得有些赘余,为打开一个文件需要打开n个地方,一个角落里找。而且windows本身对于其他系统的文件格式就更差了,没有...
  • VMware新建的一个Ubuntu16.04 server 虚拟机,想导出OVF模板,再用vSphere导入内网服务器,结果出现各种报错(本质就是由于版本不同,OVF的功能点兼容导致): 第一次导入报错,hash值匹配错误 这个问题是...
  • 1.1 Linux支持的终端设备类型 可以大致分为5种: 串行端口终端、伪终端、控制终端、控制台、其他类型,如下图所示; 1.1.1 串行端口终端(/dev/ttySn) 顾名思义,串行端口终端指的是终端,终端是什么?是具体的...
  • linux系统的5种文件类型及其属性符号 Linux文件类型常见的有: (1)普通文件:符号是 -  (2)目录文件:符号是 d (3)字符设备文件:符号是c (4)块设备文件:符号是b (5)符号链接文件:符号是l...
  • 文件后缀和相应的文件类型,打开方法参考大全  原帖:http://xidong.net/File001/File_4586.html 如果你不知怎样判断文件的后缀, 请参看: 什么是文件的后缀名?如果得知文件的后缀? 扩展名 文件类型 打开方式 ....
  • Linux中只有以下7种文件类型

    万次阅读 2014-12-10 22:33:55
    Linux中只有一下7种文件类型  即使开发人员Linux文件树中添加新内容也必须符合一下之一  1.普通文件(-表示,可用ls -l查看)  2.目录(d)[Linux中,任何东西都被看成文件,外设备也看成文件,注意是...
  • 输入设备配置文件(.idc文件

    万次阅读 2012-07-03 09:06:21
    1. 何为idc?  idc(Input Device Configuration)为输入设备配置文件,它包含... Android基于输入设备驱动汇报的事件类型和属性来检测和配置大部分输入设备的能力。然而有些分类是模棱两可的,如:多点触摸屏(multi-t
  • 这篇文章将教您如何从RAW文件系统下恢复资料,尝试未格式化前修复RAW驱动器且丢失文件。 适用于:本机/外置硬盘、USB移动盘、SD卡、记忆卡... 「文件系统的类型是raw,CHKDSK无法供RAW驱动器使用」 是否见...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 408,627
精华内容 163,450
关键字:

在此设备上不支持文件类型