一、Linux文件系统目录结构
1./bin
包含基本命令,如ls、cp、mkdir,这个目录中的文件都是可执行的
2./sbin
包括系统命令,如modprobe、hwclock、ifconfig,大多涉及系统管理命令
3./dev
设备存储目录,应用程序通过对这些文件的读写和控制就可以访问实际的设备。
4./etc
系统配置文件的所在地,一些服务器的配置文件也在这里,如用户账号及密码配置文件。busy的启动脚本也存放在该目录。
5./lib
系统库文件存放目录
6./mnt
/mnt这个目录一般是存放挂载储备的挂载目录的
7./opt
opt是可选的意思
8./proc
操作系统运行时,进程及内核信息存放在这里
9./tmp
有时用户运行程序的时候,会产生临时文件,/tmp用来存放临时文件的
10./usr
11./var
var表示变化的意思,这个目录的内容经常变动
12./sys
Linux2.6内核所支持的sysfs文件系统被映射在此目录
二、Linux文件系统与设备驱动
由于字符设备的上层没有磁盘文件系统,说以字符设备的file_operations成员函数直接由设备驱动提供。
而对于块存储设备而言,ext2、fat、jffs2等文件系统中会实现针对VFS的file_operations成员函数,设备驱动层看不到file_operations的存在,磁盘文件系统和设备驱动将会对磁盘上的文件的访问最终转换成对磁盘上柱面和扇区的访问。
1.file结构题
struct file
{
union{
struct list_head fu_list;
struct rcu_head fu_rcuhead;
}f_u;
struct dentry *f_dentry;/*与文件关联的目录入口结构体*/
struct vfsmount *f_vfamnt;
struct file_operations *f_op;
atomic f_count;
unsigned int f_flags;/*文件标志*/
mode_t f_mode;/*文件读写模式*/
loff_t f_pos;
struct fown_struct f_owner;
unsigned int f_uid,f_gid;
struct file_ra_state f_ra;
unsigned long f_version;
void *f_security;
void *private_data;
...
struct address_space *f_mapping;
};
文件读写模式mode、标志f_flags都是设备驱动关心的内容,而私有数据结构在设备驱动中被广泛应用,大多被指向设备驱动自定义用于描述设备的结构体
2.inode 结构体
VFS inode 包含文件系统访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是Linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。
struct inode{
...
umode_t i_mode;/*inode的权限*/
uid_t i_uid;/*inode拥有者的id*/
gid_t i_gid;/*inode所属的群组的id*/
dev_t i_rdev;/*若是设备文件,此字段将记录*/
loff_t i_size;/*inode所代表的文件大小*/
struct timespec i_atime;/*inode最近一次的存取时间*/
struct timespec i_mtime;/*inode最近一次的修改时间*/
struct timespec i_ctime;/*inode产生时间*/
unsigned long i_blksize;/*inode在做I/O时的区块大小*/
unsigned long i_blocks;/*inode所使用的block数,一个block为512 byte*/
struct block_device *i_bdev;/*若是块设备,为其对应的block_device结构体指针*/
struct cdev *i_dcev;/*若是字节设备,为其对应的cdev结构体指针*/
...
}