`
xiaoer_1982
  • 浏览: 1860671 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

uclinux内核的文件系统类型

阅读更多

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文适用于

ADSP-BF561

优视BF561EVB开发板

uclinux-2008r1.5-rc3

Visual DSP++ 5.0(update 5)

欢迎转载,但请保留作者信息

文件系统类型用于表示各种不同的文件系统,如fat, sysfs, proc等等,对于每个不同的文件系统,都以struct file_system_type进行描述,内核将它们以单链表的形式链接起来,其表头由全局变量file_systems表示。

与此相关的代码都在fs/filesystems.c文件中。

1.1 数据结构:file_system_type

此结构体定义了文件系统的类型,每种文件系统都必须定义一个此结构体并通过register_filesystem进行注册。

struct file_system_type {

const char *name;

int fs_flags;

int (*get_sb) (struct file_system_type *, int,

const char *, void *, struct vfsmount *);

void (*kill_sb) (struct super_block *);

struct module *owner;

struct file_system_type * next;

struct list_head fs_supers;

struct lock_class_key s_lock_key;

struct lock_class_key s_umount_key;

};

l name

文件系统的名称,在定义struct file_system_type的变量时指定且不再更改。

l fs_flags

一些特殊标记,但允许此值为0。支持的几个标记用宏定义表示为:

/* public flags for file_system_type */

#define FS_REQUIRES_DEV 1

#define FS_BINARY_MOUNTDATA 2

#define FS_HAS_SUBTYPE 4

#define FS_REVAL_DOT 16384 /* Check the paths ".", ".." for staleness */

#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move()

* during rename() internally.

*/

l get_sb

这个回调函数将在kern_mount函数中调用,用于取得本文件系统(分区)super_block,并将之填充到struct vfsmountmnt_sb成员中。

l next

这个成员用以将系统内所有的file_system_type以单链表的形式链接起来,单链表的表头由全局变量file_systems表示。

l fs_supers

这是一个双链表的表头,由此也可以看出同一个文件系统类型可以有很多个对应的super_block

1.2 文件系统注册

每个文件系统都必须使用register_filesystem向内核注册后才可以使用,此函数为:

/**

* register_filesystem - register a new filesystem

* @fs: the file system structure

*

* Adds the file system passed to the list of file systems the kernel

* is aware of for mount and other syscalls. Returns 0 on success,

* or a negative errno code on an error.

*

* The &struct file_system_type that is passed is linked into the kernel

* structures and must not be freed until the file system has been

* unregistered.

*/

int register_filesystem(struct file_system_type * fs)

{

int res = 0;

struct file_system_type ** p;

BUG_ON(strchr(fs->name, '.'));

if (fs->next)

return -EBUSY;

INIT_LIST_HEAD(&fs->fs_supers);

write_lock(&file_systems_lock);

p = find_filesystem(fs->name, strlen(fs->name));

if (*p)

res = -EBUSY;

else

*p = fs;

write_unlock(&file_systems_lock);

return res;

}

注意这里的find_filesystem函数,它将查找一个合适的用于存放struct file_system_type 指针的位置,当第一次调用时,它将返回

static struct file_system_type *file_systems;

这一变量的地址,再通过赋值语句,file_systems就可以指向链表的第一个元素了。

看看find_filesystem函数:

static struct file_system_type **find_filesystem(const char *name, unsigned len)

{

struct file_system_type **p;

for (p=&file_systems; *p; p=&(*p)->next)

if (strlen((*p)->name) == len &&

strncmp((*p)->name, name, len) == 0)

break;

return p;

}

分享到:
评论

相关推荐

    uclinux内核编译傻瓜教程

    《UCLinux内核编译傻瓜教程》是一份专为初学者设计的教程,旨在帮助用户轻松掌握UCLinux内核的编译过程。UCLinux是一种特殊的Linux发行版,它被设计用于嵌入式系统,特别是那些资源有限、没有MMU(Memory Management...

    交叉编译uclinux内核

    使用`make menuconfig`或`make xconfig`命令对uCLinux内核进行配置,选择适合目标硬件的选项,包括处理器类型、设备驱动、文件系统支持等。确保配置过程中选择了交叉编译相关的选项。 5. **编译过程**: - `make ...

    uclinux内核配置傻瓜教程

    5. **文件系统**:uclinux可以使用各种类型的文件系统,如ext2、fat和jffs2。选择合适的文件系统取决于存储介质和性能需求。配置过程中需要指定文件系统的类型和挂载点。 6. **启动加载器**:在uclinux系统中,通常...

    如何交叉编译 uClinux 内核

    2. 将这些文件以及必要的根文件系统复制到目标板的存储媒介(如 SD 卡或 NAND Flash)。 **步骤 6:烧录和测试** 1. 将制作好的映像文件加载到目标硬件上,通常通过 JTAG、UART、USB 或网络接口。 2. 启动目标硬件...

    Uclinux内核配置与裁减

    - 在“Blackfin Processor Options”配置页面中,选择CPU类型为BF533,系统类型为BF533-HHBF,以及根据开发板的时钟和SDRAM信息进行相应的设置。 - 关闭“Re-program Clocks while Kernel boots”选项,保留u-boot...

    uclinux内核配置与裁减-基于blackfin

    《UCLinux内核配置与裁减:基于Blackfin处理器》 在嵌入式系统领域,UCLinux是一个特别设计用于资源有限的嵌入式设备的Linux变体,它能够运行在没有MMU(Memory Management Unit)的处理器上。Blackfin处理器是由 ...

    基于S3C44B0芯片的uClinux内核引导过程分析.pdf

    内核初始化包括建立进程调度机制、设置系统时钟、加载模块、挂载文件系统等。这个过程完成后,系统就处于运行状态,可以响应用户命令或执行应用程序了。 #### 结论 基于S3C44B0芯片的uClinux内核引导过程涉及多个...

    uclinux内核编译[参考].pdf

    uCLinux内核编译过程中可能会遇到各种问题,这里我们将探讨一些常见的错误及其解决方法。 首先,我们来看第一个错误:“`__NR_syscall' undeclared (first use in this function)`”。这个错误通常出现在尝试定义或...

    uclinux内核编译

    2. 把根文件系统也烧录到相应位置,通常放在内核文件后面。 3. 重启目标板,如果一切顺利,UCLinux应当能够正常启动并运行。 在实际应用中,可能还需要对网络、驱动程序、应用程序等方面进行定制和优化,以满足特定...

    嵌入式uClinux的内核结构和开发环境.doc

    uClinux支持多种文件系统类型,如ext2、fat等,允许在ROM、RAM、FLASH或Disk On Chip中存储和启动操作系统及应用程序。 5. **定制与扩展** - uClinux的灵活性使得开发者可以根据实际需求定制内核,添加驱动程序,...

    嵌入式操作系统uClinux裁剪技术研究

    此外,还可以考虑使用轻量级的文件系统类型,如YAFFS或JFFS2。 3. **编译选项优化**:调整编译器参数,例如选择-O2或-O3优化级别,以提高代码执行效率。对于资源受限的环境,可以考虑使用-fdata-sections和-f...

    uclinux内核中断处理_v0.1

    ### uclinux内核中断处理_v0.1 #### 1.1 中断配置 ##### 1.1.1 中断入口设置 在uclinux内核中,针对ADSP-BF561 CPU的中断处理是通过特定的配置来实现的。这部分配置主要发生在内核初始化阶段,具体来说是在`setup...

    Uclinux Book

    - **uClinux 内核结构**:uClinux 的内核结构主要包括进程管理、内存管理、文件系统支持、网络协议栈等功能模块。 - **uClinux 文件目录结构**:类似于标准 Linux 系统的目录结构,但根据嵌入式系统的特性进行了适当...

    嵌入式uclinux具体操作实例

    这通常通过make menuconfig或make xconfig等工具完成,用户可以在这一步骤中选择硬件驱动、文件系统类型、网络支持等。合理设置内核配置能够优化启动时间、内存占用和系统性能,使其更加适应特定的嵌入式应用场景。 ...

    uclinux内核的console_v0.2

    ### uclinux内核的console_v0.2 #### 数据结构 在uClinux内核中,与console相关的数据结构可以被分为两类:通用定义和特定于架构的定义。通用定义独立于具体硬件,主要用于定义一类硬件的通用参数和接口。而特定于...

    uclinux核心手册-中文

    5. **第五章:文件系统** - 介绍uCLinux支持的文件系统类型,如ext2、fat、romfs等,以及如何在uCLinux中挂载和管理这些文件系统。 6. **第六章:设备驱动程序开发** - 讲解如何编写和调试uCLinux下的设备驱动,...

    红色飓风II代uclinux安装指南

    根据给定的文件信息,以下是对“红色飓风II代uCLinux安装指南”的详细解析,涵盖关键步骤、软件及硬件需求,以及构建uCLinux内核和文件系统的具体流程。 ### uCLinux运行软硬件条件 #### 硬件需求: 1. **红色飓风...

    uclinux中文参考手册

    手册会介绍各种文件系统类型(如VFAT、ext2、ext3等)的使用,以及如何在有限的存储资源下管理文件系统。 5. **网络与通信**:作为嵌入式系统的重要组成部分,网络功能在uCLinux中也得到了充分支持。手册会讲解TCP/...

    uclinux核心手册

    3. **文件系统**:uCLinux支持多种文件系统类型,包括VFAT、EXT2、EXT3、NFS等,这使得它可以读写不同类型的存储设备,并与网络上的其他系统共享资源。 4. **网络支持**:uCLinux提供了丰富的网络协议栈,支持TCP/...

Global site tag (gtag.js) - Google Analytics