精华内容
下载资源
问答
  • 引入文件系统

    千次阅读 2014-06-14 20:52:05
    说明:本文中的内容,主要来自于WB. YANG的一本书,书名《writeos-1.0-2-weekly》,建议看原文,提供链接http://download.csdn.net/detail/mishifangxiangdefeng/5869801

    说明:本文中的内容,主要来自于WB. YANG的一本书,书名《writeos-1.0-2-weekly》,建议看原文,提供链接http://download.csdn.net/detail/mishifangxiangdefeng/5869801

    一、    为什么要引入文件系统

    问:文件系统那么大,几行汇编就能完成?

    答:需要说明的是,本文并非给操作系统引入文件系统,给操作系统引入文件系统是一项庞大的工作,不是这里的几行汇编就能完成的。

    本文是指,给系统所在的软盘引入文件系统。现在的软盘,只是一个系统启动盘。引入文件系统后的软盘,不仅能启动系统,它还可以像一个移动设备一样,被挂载到linux上,并以文件管理的方式使用软盘。

     

    问:既然我们要做的就是一个系统盘,为什么我们要把软盘挂载到linux上,还要往里面放文件呢?

    答:目前的启动系统引导盘,仅能加载512字节的内容到内存。如果我们要加载多余512字节的内容,就要自己写代码去load。

    第一步:制作软盘系统盘时,把内容放到软盘上。

    第二步:启动软盘系统盘时,要找要加载的内容。

    第三步:把内容加载到内存。

    很显然,我们可以把这些内容,以文件的形式存入、管理和读取。

     

    问:引入文件系统,可以让我们的操作系统突破512字节大小的限制,那么要想突破512字节大小的限制,就一定要引入文件系统呢?

    答:不是的。比如《30天自制操作系统》中,就是把内容按顺序存入软盘,然后用的时候也是从头到尾按顺序读取。

    顺序存放的优点:方法简单,不用引入文件系统,使用时也不用找要下载的文件。

    顺序存放的缺点:扩展性不好,不能管理。比如在中间加一些内容,后面内容的偏移就变了。

    权衡利弊,还是引入文件系统。

     

    问:怎样利用系统盘上的文件系统,来突破512字节大小的限制

    答:

    制件软盘过程:


    系统启动过程:

    (1)系统自动加载第一个扇区到内存

    (2)根据代码,从软盘上找到load.bin

    (3)根据代码,加载load.bin到内存

    (4)根据代码,将控制权转移到load.bin

     

    问:这些工作具体怎么做?本文将完成哪些工作?

    《引入文件系统》:使用FAT12格式化软盘,使软盘不仅可以做系统启动盘,也可以用于用于管理文件

    《使用文件系统》:从具有FAT12文件系统的软盘上查找文件,并将文件加载到内容

    《测试文件系统》:(1)写一个测试代码,把测试代码做成可执行文件,写入软盘。(2)启动系统后,找到并加载可执行文件到内存。(3)控制权转到测试代码

    二、    引入什么样的文件系统


    本文实现的是FAT12文件系统
    FAT文件系统存储结构如图所示:

    (1)    FAT1和FAT2,存储的是文件表项,每一项大小为12ibt,指向固定大小的文件“簇”。如果一个文件包含多个文件簇,表项的内容为文件的下一个簇号。
    (2)    根目录,用于根据文件名查找文件的第一个簇。
    (3)    数据区。
    (4)    存储空间分配的单位是簇,一个簇可以包含一个或多个扇区。在本文中,一个簇包含一个扇区。

    三、    怎样引入文件系统


    所谓引入文件系统,就是具体做法中的第1步,即使用FAT12文件系统对软盘格式化。
    所以,先看一下FAT12文件系统的“格式”:

    这是一个称为BPB(BIOS Parameter Block)的数据结构。要把它填入到扇区0中,填对了,格式化的工作基本上完成了。
    (1)    修改代码

    .code16
    
    /*start*/
    .text
    	jmp LABEL_START				/*Start to boot*/
    	nop							/*nop required*/
    
    /*=========================================================================================
    Name:FAT12 file system
    Time:Chapter 2.2
    Revision:2
    Reason:启动扇区的大小限制为512字节,如果要加载的内容多于512字节,就加不进去了。因此要引入文件系统。让启动扇区将系统控制权转移给文件系统中的某个文件,突破512字节的限制
    Method:软盘格式化的过程就是系统把文件系统信息写入到软盘上的过程。
    MeMo:
    	FAT文件系统的主要信息,都被提供在前几个扇区内,其中第 0 号扇区尤其重要。在这个扇区内隐藏着一个叫做BPB(BIOS Parameter Block)的数据结构,一旦我们把这个数据结构写对了,格式化过程也基本完成了
    	以下内容就是对BPB数据结构初始化
    =========================================================================================*/
    /*Floppy header of FAT12*/
    BS_OEMName:			.ascii	"windmiss"		/*OEM String, 8 bytes required*/
    BPB_BytsPerSec:		.2byte	512				/*Bytes per sector*/
    BPB_SecPerCluse:	.byte	1				/*Sector per clue*/
    BPB_ResvdSecCnt:	.2byte	1				/*Reversed sector count*/
    BPB_NumFATs:		.byte	2				/*Number of FATs*/
    BPB_RootEntCnt:		.2byte	224				/*Root entries count*/
    BPB_TotSec16:		.2byte	2880			/*Total sector number*/
    BPB_Media:			.byte	0xf0			/*Media descriptor*/
    BPB_FATSz16:		.2byte	9				/*FAT size(sectors)*/
    BPB_SecPerTrk:		.2byte	18				/*Sector per track*/
    BPB_NumHeads:		.2byte	2				/*Number of magnetic heads*/
    BPB_HiddSec:		.4byte	0				/*Number of hidden sectors*/
    BPB_TotSec32:		.4byte	0				/*If TotSec16 equal 0, this works*/
    BS_DrvNum:			.byte	0				/*Driver number of interrupt 13*/
    BS_Reserved1:		.byte	0				/*Reversed*/
    BS_BootSig:			.byte	0x29			/*Boot signal*/
    BS_VolID:			.4byte	0				/*Volume ID*/
    BS_VolLab:			.ascii	"Solrex 0.01"	/*Volume label, 11 bytes required*/
    BS_FileSysType:		.ascii	"FAT12   "		/*File system type, 8 bytes required*/
    
    LABEL_START:
    /*Initial registers, including ds, es, ss*/
    	mov		%cs,	%ax
        mov     %ax,	%ds
        mov     %ax,	%es
    	call	DispStr
    	jmp		.
    
    /*=====================================================================
      Routine: DispStr
      Action: Display a	string, string index stored in %dh
    */
    DispStr:
        mov     $MessageLength, %ax
        mov     %ax,		%bp			       #ES:BP = address of string
    	mov		$MessageLength, %cx				/*String length*/
    	mov		$0x1301,	%ax					/*ah = 0x13, al = 0x01(W)*/
        mov     $0x00c,		%bx				    #page number = BH=0, word color = BL = 0x07h
        mov     $0,			%dl					/*Start row and column*/
        int     $0x10						    #10h is interrupt number
        ret
    
    /*=====================================================================
      String table
    */
    .set					MessageLength,	16
    BootMessage:			.ascii	"Hello, OS world"	/*index 0*/
    
    .org 510                        #fill 0 in first 510 BYTE
    .word 0xaa55                    #end with 0xaa55, 计算机在发现可启动标识 0xaa55 的时候自动就会做加载工作
    



    (2)    Make。

    makefile不用修改,make就可以了

    对于这一点,我不太明白,make只是做了编译和链接,最后把可执行文件做成。Img,可是又没有执行可执行文件,为什么就起到效果了呢?

    四、    效果


     

    将未格式化的boot.img软盘用mount –o loop boot.img mountdir/挂载到目录上,系统会报错。
    格式化以后,再mount,就可以成功。

    现在把boot.img mount到linux上,就可以把其它的可执行文件放到boot.img中了

    p.s.  make时候的warning不知道怎么去掉

     

    展开全文
  • 拷贝电影到U盘时,发现出现了“对于目标文件系统,文件”xx“过大的情况,经查其实是U盘文件系统格式的问题,你的u盘或者是硬盘的文件系统格式为FAT32,这种格式最大只能支持4GB的数据传输,也就是当文件大于4GB时,...

    关于目标文件系统,文件过大的解决方法

    拷贝电影到U盘时,发现出现了“对于目标文件系统,文件”xx“过大的情况,经查其实是U盘文件系统格式的问题,你的u盘或者是硬盘的文件系统格式为FAT32,这种格式最大只能支持4GB的数据传输,也就是当文件大于4GB时,就会出现如上提示。只要把u盘或硬盘的格式变为NTFS就可以实现大文件传输。右键盘符–>属性–>常规即可查看硬件对应的文件系统格式
    Windows系统分三种磁盘文件系统格式:exFAT、FAT32、NTFS。
    在这里插入图片描述
    [在这里插入图片描述](h!exFAT:(Extended File Allocation Table File System,扩展FAT,也称作fat64,即扩展文件分配表)是Microsoft在Windows Embeded 5.0以上(包括Windows CE 5.0、6.0、Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决FAT32等不支持4G及其更大的文件而推出。exFAT原本设计的目的是在FAT32与NTFS之间取得一个折中,有FAT32的轻便、不需要耗损太多的效能及记忆体来处理文件运作,又有类似NTFS的CAL存取控制机制(很可惜在SP1下找不到exFAT对于CAL的支援),以及类似HPFS系统可快速整理可用丛集空间的Free Space Bitmap,来将文件破碎的情况尽量减少。

    FAT32:这种格式采用32位的文件分配表,对磁盘的管理能力大大增强,突破了FAT16下每一个分区的容量只有2GB的限制。由于现在的硬盘生产成本下降,其容量越来越大,运用FAT32的分区格式后,我们可以将一个大容量硬盘定义成一个分区而不必分为几个分区使用,大大方便了对磁盘的管理。而且,FAT32与FAT16相比,可以极大地减少磁盘的浪费,提高磁盘利用率。目前,Windows 95 OSR2以后的操作系统都支持这种分区格式。但是,这种分区格式也有它的缺点。首先是采用FAT32格式分区的磁盘,由于文件分配表的扩大,运行速度比采用FAT16格式分区的磁盘要慢。另外,由于DOS和Windows 95不支持这种分区格式,所以采用这种分区格式后,将无法再使用DOS和Windows 95系统。

    NTFS:它的优点是安全性和稳定性方面非常出色,在使用中不易产生文件碎片。并且能对用户的操作进行记录,通过对用户权限进行非常严格的限制,使每个用户只能按照系统赋予的权限进行操作,充分保护了系统与数据的安全。Windows XP、Windows 2000、Windows NT、Windows Server 2003、Windows Server 2008、Windows Vista、以及Windows 7等都支持这种分区格式。

    以下为解决方案:
    格式化转换磁盘格式(注意数据备份)
    1.打开我的电脑。
    2.右键需要转换格式的磁盘,从菜单中选择“格式化”。
    3.文件系统默认为FAT32,将其设置为NTFS。
    在这里插入图片描述
    4.确认格式化。格式化完成后就可以传输大文件了。

    亲测有效

    展开全文
  • 为了避免多次重复检索目录,在大多数OS中都引入了”打开“这一文件系统调用,当用户第一次请求对某文件进行操作时,须先利用open系统调用将该文件打开。所谓”打开“,是指系统将指名文件的属性(包括该文件在外存上...

      当用户要求对一个文件实施多次读/写或者其他操作时,每次都要从检索目录开始。为了避免多次重复检索目录,在大多数OS中都引入了”打开“这一文件系统调用,当用户第一次请求对某文件进行操作时,须先利用open系统调用将该文件打开。所谓”打开“,是指系统将指名文件的属性(包括该文件在外存上的物理位置),从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(或称索引号)返回给用户。换而言之,”打开“,就是在用户和指定文件之间建立起一个连接。此后,用户通过该连接直接得到文件信息,从而避免了再次通过目录检索文件,即当用户再次向系统发出文件操作请求时,系统根据用户提供的索引号可以直接在打开文件表中查找到文件信息。这样不仅节省了大量的检索开销,也显著提高了对文件的操作速度。如果用户已不再想要对该文件实施相应的操作,可利用”关闭“系统调用来关闭此文件,即断开此连接,OS将会把该文件从打开文件表中的表目上删除掉。

    转载于:https://www.cnblogs.com/smilehuanxiao/p/5096197.html

    展开全文
  • 一、什么是Linux设备文件系统  首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,...

    一、什么是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目录查看,就会有很多系统设备节点在这里产生了,我们就可以直接使用这些设备节点了。




    展开全文
  • 一口气搞懂「文件系统」,就靠这 25 张图了

    万次阅读 多人点赞 2020-08-13 21:48:43
    文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行组织管理,那组织的方式不同,就会形成不同的文件系统。 Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等...
  • 提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢? 一、Linux 设备模型 1、设备模型概述  从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。在以前的内核中没有...
  • webpack下实现动态引入文件

    万次阅读 2017-05-25 15:44:24
    而有时候,尤其是做管理系统那样的项目时,往往还需要维护一个目录的数组,此时我们就想,可不可以只维护一个目录,然后根据目录自动生成route数组呢? 笔者就遇到了这个需求,一开始觉得这应该是很简单的事吧,毕竟...
  • 操作系统引论 操作系统是配置在计算机硬件上的第一层软件,是对硬件系统的第一次扩充。...在计算机系统上配置的操作系统,其主要目的是:方便性、有效性、可扩充性和开放性; 方便性 未配置操作系...
  • 引入so文件CmakeList 配置

    千次阅读 2018-04-20 08:02:00
    做NDK开发的时候,很大程度的是引用成熟类库,我们做逻辑,功能,那么怎么把so文件引入到我们的android工程里面的? 目前AndroidStudio2.2之后官方推荐的是Cmake,之前是Android.mk构建文件,大概类似,我们在只讲解...
  • 第10章 文件系统File System;文件的引入;本章教学目标;文件系统;文件系统;文件的概念;文件属性;文件系统;文件系统;文件组织;文件访问;文件访问;文件访问;问题;文件访问;问题;文件系统;文件目录背景 文件系统中有很多...
  • 概念:FAT32文件系统用4个字节(32位)空间来表示每个扇区配置文件的情形,所以叫FAT32。分区容量最低是512M,而上限的话不同的操作系统都不一样,WinXP系统最大可以做到2TB的FAT32分区。 大多说用户...
  • 操作系统文件管理

    千次阅读 2021-05-19 19:29:46
    目录 文件的引入什么是文件文件操作文件系统是做什么的文件系统的管理功能文件系统的层次(填空)数据的分类文件的逻辑结构什么是文件的逻辑结构文件目录对目录的管理要求(填空)文件控制块–FCB文件共享 ...
  • 文件系统

    千次阅读 2015-12-05 17:00:26
    文件系统: 目录:文件控制块的集合构成了文件目录。 目录项:一个文件控制块就是一个文件目录项。 文件控制块:文件控制块(FCB)是操作系统用来描述和控制文件的数据结构。 索引节点:除了文件名,文件控制块的...
  • 从网上下载别人的程序,遇到的问题大都都是...缺少某个lib,ok你可以去下载然后放到qt或vs的软件安装的lib文件下,但这种方式毕竟不是根本,,明明缺少的lib库 像gdi32.lib,glu.lib,其实window都给你已经安装到了c盘下
  • Linux2.6虚拟文件系统VFS

    千次阅读 2012-06-01 22:13:12
    一、什么是虚拟文件系统 1.VFS是用户的应用程序与文件系统实现之间的...1.VFS的主要思想是引入一个文件系统模型,这个模式能够表示所有支持的文件系统 2.通用文件模型的构成 (1)超级块super_block:存放
  • Hadoop支持通过NFSv3挂载HDFS文件系统到本地目录,允许用户像访问本地文件系统一样访问HDFS,对于普通用户来说大大的简化了HDFS的使用。该功能通过引入NFS Gateway服务实现,将NFS协议转换为HDFS访问协议。本篇文章...
  • 在Spring中允许把xml配置文件中的一些参数配置到... Spring中此功能的核心是配置PropertyOverrideConfigurer属性覆盖器,目的是用来指定properties文件的位置,配置覆盖器有下面两种方法: 1、context:property-pla
  • linux中两种主要的设备文件系统

    千次阅读 2012-03-15 10:51:10
    1.devfs设备文件系统  起源:Linux2.4内核引入  优点:(1)可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载时删除  (2)设备程序可以指定设备名、所有者和权限位,并且用户空间程序可以修改它们  (3)...
  • Linux文件系统Inotify机制

    千次阅读 2013-11-01 09:38:43
    它是一个内核用于通知用户空间程序文件系统变化的机制。开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 ...
  • Linux 虚拟文件系统(二)Mount、Open;设备文件、挂载和打开文件 tags: Linux源码 Linux 虚拟文件系统二MountOpen设备文件挂载和打开文件 梗概 挂载 设备文件 设备文件从哪里来的 挂载做了什么 打开文件 打开...
  • FUSE文件系统

    千次阅读 2020-10-30 17:00:00
    Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文件系...
  • Ext4文件系统架构分析

    千次阅读 2018-06-29 10:39:08
    转自:https://www.cnblogs.com/alantu2018/p/8461272.html本文描述的Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3的和的Ext2文件系统,除了它们不...1. Ext4文件系统布局综述一个的Ext4文件系统被分成...
  • 小师妹这次遇到了监控文件变化的问题,F师兄给小师妹介绍了JDK7 nio中引入的WatchService,没想到又顺道普及了一下文件系统的概念,万万没想到。
  • 常见文件系统

    千次阅读 2016-09-12 21:40:22
    常见文件系统 一、常见嵌入式根文件系统 1、JFFS文件系统 2、Jffs2: 日志闪存嵌入式系统文件系统版本2 (Journalling Flash FileSystem v2) 3、yaffs/yaffs2是专为嵌入式系统使用 NAND型闪存而设计的一种日志...
  • 推荐书目电子版下载 HDFS知识梳理详细版 ...Hadoop分布式文件系统命令行接口详细版 具体说明 Java接口 连接Hadoop集群 Hadoop分布式文件系统Java接口详细版 简介 文件系统 HDFS文件系统详细版 简介 接口
  • Hadoop分布式文件系统HDFS

    千次阅读 2020-02-12 12:12:01
    统一管理分布在集群上的文件系统称为分布式文件系统。而一旦在系统中,引入网络,就不可避免地引入了所有网络编程的复杂性,例如挑战之一是如果保证在节点不可用的时候数据不丢失。传统的网络文件系统(NFS)虽然也...
  • Linux 虚拟文件系统(一)概述

    千次阅读 2017-04-16 21:04:26
    Linux (虚拟)文件系统tags: Linux源码Linux 虚拟文件系统 文章梗概 正文 文件系统 虚拟文件系统架构 虚拟文件系统如何知道可用的文件系统有哪些的 不太喜欢的环节 引用 文章梗概本文首先以“尽量不涉及源代码”的...
  • Android.mk引入第三方jar包和so库文件

    万次阅读 2017-05-25 17:50:48
    以SystemUI为例,如果需要在SystemUI中引入第三方jar包以及so库,可作如下处理: 首先,在frameworks\base\packages\SystemUI下新建...也就说引入jar包主要依赖的是LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES和LOCAL_ST
  • VFS文件系统结构分析(容易理解)

    千次阅读 2016-09-21 23:56:56
    当前,除了linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统jffs2, yaffs/yaffs2 ubifs。linux通过叫做VFS的中间层对这些...
  • 操作系统学习笔记:文件管理

    千次阅读 2020-12-13 21:50:17
    对于文件及文件系统的概念、存放文件的介质、文件存放形式、文件操作形式、文件系统的安全性、磁盘调度算法的知识进行了相关的介绍!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 338,638
精华内容 135,455
关键字:

引入文件系统的主要目的是