linux内核文件系统(转载)
1.
概述
根据以前学习内核源码的经验,在学习文件系统实现之前,我大概定了个目标:
1
、
建立一个清晰的全局概念。为将来需要研究代码细节打下坚实基础。
2
、
只研究虚拟文件系统 VFS
的实现,不研究具体文件系统。
为什么选择 Linux 2.4.30
?因为可以参考《Linux
源码情景分析》一书,减少学习难度。
1.1.
基本概念
1、
一块磁盘(块设备),首先要按照某种文件系统(如 NTFS
)格式进行格式化,然后才能在其上进行创建目录、保存文件等操作。
在 Linux
中,有“安装”文件系统和“卸载”文件系统的概念。
一块经过格式化的“块设备”(不管是刚刚格式化完的,没有创建任何名录和文件;还是已经创建了目录和文件),只有先被“安装”,才能融入 Linux
的文件系统中,用户才可以在它上面进行正常的文件操作。
2
、
Linux
把目录或普通文件,统一看成“目录节点”。通常一个“目录节点”具有两个重要属性:名称以及磁盘上实际对应的数据。本文中,“目录节点”有时简称为“节点”
“符号链接”是一种特殊的目录节点,它只有一个名称,没有实际数据。这个名称指向一个实际的目录节点。
3
、
“接口结构”:在 内核代码中,经常可以看到一种结构,其成员全部是函数指针,例如:
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync)
相关文档:
嵌入式linux基础知识大纲
其实这段时间非常的忙,忙到连做饭吃的时间都没有了。但是今天我特意抽空,来给关注我的朋友们一点点交代。(因为今天发现关注的人还蛮多的,有点受宠若惊啊!哈哈....)如题我暂时只能给大家一些大纲,很详细的学习过程要等大概半个月的时间,我有了空闲时间才能 ......
Internet------(eth1)router1(eth2)------(eth1)router2(eth0)------(eth0)router3(eth1)------(eth0)pc
上面就是我的网络拓扑结构,其中路由器1是用来连接外部网络的一台linux机器,图中所有路由器都是普通的pc机,这些pc都安装了ubuntu桌面系统,除了最右边的pc,其余的pc都装了3张网卡(其中一张备用)。
由于Debian系 ......
花了一个周末的时间列出来的。共享出来,希望大家花几分钟看看。这也算是LINUX下比较实用的查找方式了
which(寻找“执行文件”)
[root@localhost home]# which [-a] command
-a : 将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称
范例:
[root@localhost home]# which passwd
/usr/bin/passwd ......
在执行make menuconfig 命令进行内核配置时,输出下面的出错信息:
yyh:~/clfs/sources/linux-2.6.17.13$ make ARCH=i386 CROSS_COMPILE=${CLFS_TARGET}- menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scri ......
kernel.shmall = 268435456
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_tw_buckets = 5000
net.ip ......