vxworks下dosfs文件系统的创建

claireyuancy claireyuancy     2022-09-05     442

关键词:

  文件系统,是指操作系统依据文件夹和文件的组织形式在磁盘设备上应用的一种设备驱动,不同的文件系统对文件夹和文件有不同的限制(如文件夹名限制,文件限制大小等)。

VxWorks支持多种文件系统,比較重要的有:

1、dosFs:适用于块存取设备(比方硬盘、软盘)。和MS-DOS文件系统兼容;

2、rawFs:提供了一种简单的原始文件系统。该文件系统将整个硬盘当作一个单独的大文件;

3、cdromFs:同意系统从依照ISO9660标准文件系统格式化的CD-ROM上读取设备;

    通常文件系统驱动位于磁盘(块存取)设备驱动和IO系统之间,这一点在VxWorks中也不例外,但它在此基础上扩充了功能,即在文件系统下方添加了一个CBIO(Core Blocked IO)接口,在CBIO下方才是块存取设备驱动,其示意图例如以下:
 


图1 VxWorks I/O系统层次图

而CBIO接口部分又细分为4个逻辑子层,每一个逻辑层都有与创建文件系统相关的函数,将CBIO接口部分细分后。包括各子层相关操作函数的VxWorks文件系统示意图例如以下:

图2 CBIO层内部结构层次图

图中线框中的四层就是CBIO接口层里的子层。对内核配置了dosFs支持的VxWorks来说,对磁盘的管理是从BLK_DEV API设备驱动子层上開始的,不同子层上的函数创建出的CBIO句柄分属不同的层,下层的CBIO句柄即为上层CBIO句柄的附属CBIO句柄。也就是说它们尽管都是CBIO_DEV_ID类型,但依据产生它们的函数所在的层把它们按等级划分,一个CBIO缓冲区能够在每一个子层上都有一个CBIO句柄,也能够在部分子层上有CBIO句柄。CBIO缓冲区在基本CBIO to BLK_DEV设备子层上就没有句柄。图右側函数间的箭头指示了各子层间句柄的关系。此外,从图中能够看出,头文件也是依据层的划分来组织的。这样使得函数调用层次清晰。

 

在磁盘上建立dosFs文件系统

以运行在摩托罗拉公司的PPC860 CPU上的VxWorks为例,在配置VxWorks内核时加入IDE/ATA磁盘设备驱动,在系统启动后,系统就和磁盘相连,系统启动后会发现磁盘(运行指令:devs,列出的设备中有一个/ata0a),此时该设备尚无法訪问(就像刚出厂的硬盘用启动盘引导后能发现却不能使用一样。在dos下须要用fdisk工区来创建分区,格式化后才干使用),而在VxWorks下,系统也提供了相似的操作(如图2)。

在创建文件系统之前,应通过在内核中包括dosFs组件来初始化dosFs文件系统,即让系统载入文件系统驱动。同意系统在块设备上创建文件系统设备。

至此,系统启动后。用户直接面向的已经是BLK_DEVAPI设备驱动子层了。全部的操作都是从该层上方開始的。

为了在磁盘上上创建分区、格式化并使用它,应进行以下操作:

2.1创建块存取设备:

对于磁盘设备,使用ataDevCreate()函数在BLK_DEV API设备驱动子层上创建一个指向块存取设备的指针pAta:

BLK_DEV * ataDevCreate(int ctrl,intdrive,int nBlocks,int blkOffset)

 

參数1表示磁盘设备控制器号。0表示primary,

參数2表示磁盘设备驱动器号,0表示master。

參数3表示驱动器设备上的块数量,0表示使用整个磁盘,

 

參数4表示从驱动器開始处偏移的块数量。0表示从头開始。

函数为指定的ATA/IDE磁盘或ATAPI CDROM创建一个设备。返回一个指向块设备结构(BLK_DEV)的指针。图2中在此处用pAta=ataDevCreate(0,0,0,0)创建一个指向块设备的指针pAta。该设备相应磁盘primary master,而且使用整个磁盘的从头開始的全部块。(不要混淆设备和磁盘。能够把磁盘的一部分创建为一个设备。即一个设备相应于一个磁盘和该磁盘里的块,而磁盘由控制器号和驱动器号唯一指定)

2.2 创建磁盘快速缓冲区:

该步骤是可选的。

通过调用dcacheDevCreate()函数为一个块设备创建磁盘快速缓冲区并在CBIO to CBIO设备(dcacheCbio)子层上生成CBIO句柄。使用方法例如以下:

     CBIO_DEV_ID dcacheDevCreate(CBIO_DEV_ID subDev,char *pRamAddr,int memSize,char*pDesc)

 

參数1表示一个CBIO句柄。该句柄作为返回的CBIO to CBIO设备(dcacheCbio)子层的CBIO句柄的附属CBIO句柄,该附属句柄由函数CBIO_DEV_ID cbioWrapBlkDev(BLK_DEV *)在基本CBIO to BLK_DEV设备(cbioLib)子层上生成。也能够使用块设备,当使用块设备时,实际上是将块设备转换成在基本CBIO to BLK_DEV设备(cbioLib)子层上的CBIO句柄后作为參数的;

 

參数2表示该CBIO快速缓冲区在内存中的位置。

 

參数3表示为该CBIO快速缓冲区使用多少内存;

參数4表示设备描写叙述字符串。

函数创建一个CBIO层磁盘快速缓冲区实例,并在CBIO to CBIO设备(dcacheCbio)子层生成CBIO句柄,当參数2为NULL时,參数3使用全部内存缓冲磁盘数据。当參数2为0时,參数3使用一个默认内存大小缓冲磁盘数据。參数4为设备描写叙述字符串。会在dcacheShow运行时作为结果的一部分输出。

当须要多个快速缓冲区时非常须要(支持16个快速缓冲区)。

当内存容量小于指定缓冲区大小时创建失败。

图2中此处用cbio=dcacheDevCreate(pAta,0,0,“cache1”)为块设备pAta创建默认大小的快速缓冲区cbio,同一时候cbio也是该缓冲区在CBIOto CBIO设备(dcacheCbio)子层上的CBIO句柄。

这里用块设备作为參数1比較直观。并描写叙述为“cache1”。也能够先使用bcbio=cbioWrapBlkDev(pAta),再使用cbio=dcacheDevCreate(bcbio,0,0,“cache1”),此时bcbio为cbio的附属句柄。

2.3 创建和安装磁盘分区:

通过调用usrFdiskPartCreate()在磁盘上创建分区表。然后通过调用dpartDevCreate()初始化一个分区的磁盘。并在CBIO to CBIO设备(dpartCbio)子层上创建CBIO句柄。例如以下:

STATUSusrFdiskPartCreate(CBIO_DEV_ID cDev,int nPart,int size1,int size2,int size3)

參数1表示一个CBIO句柄,分区表将在这个代表整个磁盘的句柄相应的块设备上创建,注意这里不是subDev,而是cDev,表示不要用附属CBIO句柄bcbio,而应使用cbio;

參数2表示要创建的分区数,默觉得1。最大为4;

參数3表示第2个分区所占用的空间百分比。

參数4表示第3个分区所占用的空间百分比;

參数5表示第4个分区所占用的空间百分比。

该程序用来创建基本分区表,即对磁盘分区,仅仅能用来创建一个主分区表。即MBR,不能用于创建启动或扩展分区。返回一个指示操作成功与否的状态值。

这时磁盘仅仅有分区表,还没有安装分区,能够用usrFdiskPartShow()显示创建的分区。

 

图2中此处用usrFdiskPartCreate(cbio,2,50,0,0)在cbio相应的块设备上创建两个分区。各占磁盘一半空间。

创建磁盘分区的操作函数dpartDevCreate()使用方法例如以下:

CBIO_DEV_ID dpartDevCreate(CBIO_DEV_IDsubDev,int nPart,FUNCPTR pPartDecodeFunc)

 

參数1表示一个附属CBIO句柄,即存在于以下子层上的cbio。

 

參数2表示分区数量,

參数3表示能解释分区表的函数。

为了处理一个已分区的磁盘,即在磁盘上安装分区,须要使用该函数。推荐为了操作的高效,为整个磁盘创建一个快速缓冲区并在各分区间共享该快速缓冲区。nPart參数表示特定磁盘驱动器上最大的分区数,可支持最多24个。

分区表解释程序:应该实现的功能是将已分区设备的分区信息解释成特定格式的结果。并将结果写入一个特定类型的表中。

图2中此处通过调用cbio1=dpartDevCreate(cbio,2,usrFdiskPartRead)通过让usrFdiskPartRead程序解释cbio相应块设备的分区表来初始化分区的磁盘。usrFdiskPartRead程序是系统提供的解释分区表信息的程序,可直接调用。至此分区操作完毕。在创建文件系统和格式化分区后就可以使用分区了。注意程序返回的cbio1尽管和cbio类型同样,注意生成的句柄cbio1位于CBIO to CBIO设备(dpartCbio)子层上。

2.4 创建dosFs文件系统:

文件系统在VxWorks中也被看作一个设备。通过调用函数dosFsDevCreate()来在指定分区上创建dosFs文件系统。dosFsDevCreate()函数使用方法为:

STATUS dosFsDevCreate(char*pDevName,CBIO_DEV_ID cbio,u_int maxFiles,u_int autoChkLevel)

 

參数1表示创建文件系统后,相应分区的卷名,格式为“/卷名”;

 

參数2表示特定分区的CBIO句柄,对本例,即用dpartPartGet(cbio1,0)或dpartPartGet(cbio1,1)返回的句柄,dpartPartGet要求使用位于CBIO to CBIO设备(dpartCbio)子层上的CBIO句柄,并把它定义为dosFs卷。

參数3表示在设备上能同一时候打开的文件数。

參数4表示是否在挂载卷时自己主动进行卷的完整性检測。

该函数在一个特定CBIO句柄相应的分区上创建dosFs文件系统,定义每一个磁盘卷的信息并将它们加入到I/O系统中。

图中此处用dosFsDevCreate(“/DOSA”,dpartPartGet(cbio1,

0),16,0)在第一个分区(dpartParGet中的參数0)安装文件系统,卷名为/DOSA。并在挂载时自己主动进行完整性检測。

2.5 格式化磁盘卷

    使用dosFsVolFormat()函数将磁盘卷按dos格式格式化。该步骤仅仅能在磁盘卷第一次初始化时运行一次。假设DOS格式的磁盘卷已经被格式化,能够跳过此步。

    dosFsVolFormat()的函数使用方法为:

STATUS dosFsVolFormat(void *device,intopt,FUNCPTR pPromptFunc)

 

     參数1表示要运行格式化操作的卷名。

     參数2表示格式化的选项。是比特映射。即选项的组合。0表示使用默认选项。

參考帮助;

     參数3表示一个函数。该函数能够提示用户在格式化前改变卷的參数,0表示无函数;

函数返回格式化成功与否的状态值。图2中此处用dosFsVolFormat(“/DOSA”,0,0)将卷/DOSA格式化。

格式化后就能够使用了,能够用ll“/DOSA”挂载卷。此时可运行完整性检測,用dosFsShow “/DOSA”显示卷信息。

运行->devs会发现有/DOSA卷,运行->cd “/DOSA”将当前工作文件夹切换到该卷上。运行mkdir 文件夹名。在该卷上创建一个相应的文件夹。

运行rm 文件夹名,就可以删除相应文件夹。

有些函数里的CBIO句柄參数能够用BLK_DEV变量取代,此时系统会自己主动进行转换工作。

       至此,磁盘设备上的文件系统创建完毕。用户能够直接訪问磁盘并进行相关操作。

vxworks的bootrom

...板,用什么软件烧写???bootrom是bsp生成的,用来加载vxworks的。arm的bsp要用ARM的开发环境进行编译。拷贝到引导区就可以加载vxworks了。参考技术Abootrom是bsp生成的,用来加在vxworks的。不同的bsp用来生成特定cpu下可用的bootrom追... 查看详情

vxworks启动过程具体解释(下)

...一节主要是从映像的分类和各种映像的大致载入流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程:1.BootImage + LoadableImages: 以下是详细的流程图: 当中第一阶段的运行流程使用的是上图的左... 查看详情

如何挂接到vxworks的tty系统

...的PC-NET网卡驱动有问题,所以需要下载AMD的PC-NET网卡的VxWorks系统驱动,可以从AMD网站免费下载。  一张1.44M的软盘,用于制作系统引导盘。  准备并安装好以上软件后,就可以开始下一步的工作了。  开始安装  编译... 查看详情

vxworks下pci驱动的配置与测试

理论知识见《VxWorks系统的PCI总线配置与应用》实现步骤:建立工程,添加BSP包; 将驱动测试代码surfConfPciDevice.c加入工程中; 在usrAPPInit.c中添加测试程序,surfConfPciDevice(intvendorId,intdevId,intmyIndex),厂商号和设备号在BIOS启... 查看详情

linux系统下利用文件创建文件系统

在Linux系统下利用文件创建文件系统,小伙伴们乍一听也许会有点不知道其意义何在。其实不然,利用文件创建文件系统还是相当有实用价值的首先我们在做一些测试时,不想使用实际的磁盘分区时,我们可以利用文件创建文件... 查看详情

基于嵌入式操作系统vxworks的

管道可以看作受驱动器pipeDrv管理的虚拟I/O设备,使用基本的I/O系统接口可以读、写和操作管道,这些函数包括read、write、open、close、ioctl和select等。与pipe密切相关的其它API还有:(1)pipeDrv(?):初始化pipeDrv,函数原型:STATUSpipeD... 查看详情

[架构之路-125]-《软考-系统架构设计师》-操作系统-4-浅谈vxworks与linux操作系统的区别

...操作系统的硬件定制化(BSP)2.不同点2.1内核结构不同vxworks是微内核,只提供基本的服务,而linux是宏内核,除了基本的服务、内核还包括文件系统、网络协议等;2.2运行模式不同VxWorks应用程序在“实模式”下,... 查看详情

vxworks6.9初始化流程介绍

一、系统框架在讲初始化流程之前,我们先了解下VxWorks的三种映像类型。要搞清楚映像结构,需要先了解下VxWorks的内存空间分配。所以我们先从框架入手。1.框架图2.内存空间分配 二、内核映像根据应用场合不同,v... 查看详情

linux系统下创建文件最常见的8种方法!

  众所周知,在Windows系统中可以直接右键新建文件,而在Linux系统中,想要创建文件并非易事,需要通过执行命令来完成,那么Linux系统中创建文件常用的方法有哪些?本文为大家介绍一下Linux系统下创建文件的8种方法,快来了... 查看详情

pthread

...需要使用头文件pthread.h,连接时需要使用库libpthread.a。与vxworks上任务的概念类似,都是调度的最小单元,都有共享的堆、栈、代码区、全局变量等。 2.  创建线程int pthread_create(pthread_t *&nb 查看详情

在本地系统下运行的 Windows 服务可以在运行它的计算机上创建新文件吗?

...系统下运行的Windows服务可以在运行它的计算机上创建新文件吗?【英文标题】:CanaWindowsservicerunningunderLocalSystemcreatenewfilesonthecomputeritisrunningon?【发布时间】:2011-04-0818:50:08【问题描述】:我创建了一个Windows服务,该服务具有创... 查看详情

ext3文件系统的一个目录下,无法创建子文件夹,但可以创建文件

如图所示  查看详情

linux下c语言怎么获取文件创建时间?

在Windows下,一个文件有创建时间、修改时间、访问时间。而在Linux下,一个文件也有三种时间,分别是访问时间(Access)、修改时间(Modify)、状态改变时间(Change)。可以使用stat命令查看文件的访问时间、修改时间和状态改... 查看详情

android逆向修改android系统文件(重新挂载文件分区|在/system/lib/只读目录下创建文件|修改android系统文件的意义)(代码片段)

文章目录一、重新挂载文件分区二、在/system/lib/只读目录下创建文件三、修改Android系统文件的意义一、重新挂载文件分区在上一篇博客【Android逆向】修改Android系统文件(ro只读文件系统|系统文件格式|rootfs|tmpfs|devpts|sysfs|proc|/syste... 查看详情

android逆向修改android系统文件(重新挂载文件分区|在/system/lib/只读目录下创建文件|修改android系统文件的意义)(代码片段)

文章目录一、重新挂载文件分区二、在/system/lib/只读目录下创建文件三、修改Android系统文件的意义一、重新挂载文件分区在上一篇博客【Android逆向】修改Android系统文件(ro只读文件系统|系统文件格式|rootfs|tmpfs|devpts|sysfs|proc|/syste... 查看详情

centos下ext4、vfat文件系统创建、修改

...)1,磁盘分区之后并不能直接使用,需要在分区上创建文件系统并挂载;2,查看系统能够支持的文件系统类型:cat/etc/filesystems3,挂载设备或文件系统,挂载的目标位置,称为挂载点(mountpoint)  挂载使用mount命令,设备、... 查看详情

在macos系统的/home目录下创建文件夹的方法(代码片段)

文章目录前言修改auto_master加载auto_master创建自定义文件夹前言Rt,本文讲述如何在MacOS系统中,在/home目录下创建文件夹的方法。之所以会有本篇文章,是因为在默认情况下,该目录是不允许用户进行变更操作的。... 查看详情

在macos系统的/home目录下创建文件夹的方法(代码片段)

文章目录前提修改auto_master加载auto_master创建自定义文件夹前提Rt,本文讲述如何在MacOS系统中,在/home目录下创建文件夹的方法。之所以会有本篇文章,是因为在默认情况下,该目录是不允许用户进行变更操作的。... 查看详情