- 博客(44)
- 资源 (3)
- 收藏
- 关注
转载 Linux 内核中的 Device Mapper 机制
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,如图 1。图1 Device Mapper的内核体系架构在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 r
2013-09-06 09:47:36
808
转载 Linux文件系统之文件的读写(续二)
八:VFS层的I/O操作VFS层是与用户界面直接交互的接口,在这一节里,我们将分为读写两部份来介绍VFS层的操作以及跟上层用用的交互.8.1:文件的读操作在用户空间,读文件操作的常用函数为read()。对应在系统空间的调用入口是sys_read().它的代码如下:asmlinkage ssize_t sys_read(unsigned int fd, char __user *
2013-08-15 10:03:53
985
转载 Linux文件系统之文件的读写(续一)
六:页面缓存层页面高速缓存的核心结构为struct address_space.如下所示:struct address_space { //页高速缓存的属主 struct inode *host; /* owner: inode, block_device */ //包含全部页面的radix树 struct radix_t
2013-08-15 10:01:45
1610
转载 Linux文件系统之文件的读写
一:前言文件的读写是文件系统中最核心也是最复杂的一部份,它牵涉到了很多的概念.之前分析文件系统其它操作的时候,遇到与文件系统相关的读写部份都忽略过去了.在这一节里,来讨论一下文件的读写是怎样实现的.二:I/O请求的概述如之前所提到的,为了提高文件的操作效率,文件系统中的内容都是缓存在内存里的.每当发起一个Rear/Write请求的时候,都会到页面高速缓存中寻找具体的页面.如果页面不
2013-08-15 10:00:22
736
转载 linux文件系统之文件的打开与关闭
一:前言文件的操作主要包括了文件的打开关闭和读写.在这节中主要分析了linux内核中的文件操作的实现.还是同前两节一样,涉及到块设备与页面缓存的部份先放一边.后续有会有专题分析与此相关的内容.二:文件的打开在用户空间的,打开文件常用的api是open().它的系统调用入口是sys_open():. asmlinkage long sys_open(const char __
2013-08-15 09:59:18
6334
转载 Linux文件系统之sysfs
一:前言在设备模型中,sysfs文件系统用来表示设备的结构.将设备的层次结构形象的反应到用户空间中.用户空间可以修改sysfs中的文件属性来修改设备的属性值,今天我们就来详细分析一下,sysfs的实现.二:sysfs的初始化和挂载Sysfs文件系统的初始化是在sysfs_init()中完成的,代码如下:int __init sysfs_init(void){ int e
2013-08-15 09:58:05
684
转载 linux文件系统之路径查找与文件系统的挂载
文件系统是操作系统的一个重要的功能,linux提供了对各种文件系统的支持,具有极高的扩展性.文件系统这一部份也是linux内核中难以理解的一部份,因为它与很多子系统有关.有时候还需要涉及到具体的磁盘分区格式.下面的代码分析以ext2格式为基础进行分析.在分析的过程中会遇到了块设备操作的一些API,暂且将它放至一边。块设备的操作会以单独的专题做讨论。一:与关系统有关的数据结构1.1:VF
2013-08-15 09:57:01
1623
1
转载 解析linux根文件系统的挂载过程
一:前言前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了彻底解决这个问题。研究了一下rootfs的挂载过程。特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助。二:rootfs的种类总的来说,rootfs分为两种:虚拟rootfs和真实rootfs.现在kernel的发展趋势是将更多的功能放到用户空间完成。以保持内核的
2013-08-15 09:55:24
472
转载 Linux文件系统之目录的建立
一:前言在用户空间中,建立目录所用的API为mkdir().它在内核中的系统调用入口是sys_mkdir().今天跟踪一下函数来分析linux文件系统中目录的建立过程.二:sys_mkdir()Sys_mkdir()对应的代码如下:asmlinkage long sys_mkdir(const char __user * pathname, int mode){
2013-08-15 09:54:31
956
转载 linux文件读写浅析
linux文件读写浅析在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。本文将顺着这条路走下去,大致看看普通磁盘文件的读写是怎样实现的。linux内核响应一个块设备文件读写的层次结构
2013-05-08 15:14:44
1034
转载 Linux kernel FAT32文件系统分析
文本探讨了Linux kernel中对fat32文件系统的实现,关于fat文件的格式可以查看微软的fat白皮书。1. FAT表操作FAT文件系统中,使用FAT表标记哪个cluster被占用,哪个没被占用。在Linux内核代码中,与FAT表操作对应的是fat_entry,fatent_ops结构和fat_cache_id缓存等。1.1 fat_entryfat中的fat e
2013-04-26 14:03:11
1491
转载 往android的内核添加驱动及 ueventd.rc 修改
向android的内核添加驱动,其实就是向linux内核添加驱动。主要在两个文件里添加点信息,一个是Kconfig文件,一个是Makefile文件。比如你添加的驱动你代码放到drivers目录下面的XXX目录,那么修在该目录下的Kconfig文件和Makefile文件。具体的修改方法:比如我现在修改drivers/staging/android/下的Kconfig文件。config A
2012-12-20 15:32:49
11631
转载 android之init进程-uevent
Init是linux kernel启动的第一个进程,理解init,对熟悉android系统非常重要。 Android的每个目录下面都有一个非常重要的文件Android.mk,负责编译该目录下面的代码。 System/core/init/android.mk[cpp] view plaincopy "font-size:18p
2012-12-20 15:32:09
8018
转载 Android 源码分析 -- (一) Android启动过程
将创建的PDF文件导入到cnBlogs中排版实在是不太方便,所以直接分享到slideshare上了。简单分析了一下Android启动过程,错漏之处敬请指正。Android 源码分析View more documents from manateew. Android 源码分析 -- (一) Android启动过程1. 源码文件路径: platf
2012-12-20 15:31:31
1487
转载 李洋谈Android系统启动过程剖析
1. 系统启动流程简介在Linux内核启动后,init 1(1号进程)将作为第一个用户空间(Linux虚拟内存的大小为232(在32位的x86机器上),内核将这4G字节的空间分为两部分。最高的1G字节供内核使用,称为“内核空间”。而较低的3G字节供各个进程使用,称为“用户空间”。)的进程来启动Android系统,该启动流程可以分为如下5个阶段,如下图:点击查看大图(
2012-12-20 15:30:01
1458
转载 Linux系统调用过程
一. 概述 系统调用是应用程序与内核交互的一种方式。系统调用作为一种接口,通过系统调用,应用程序能够进入操作系统内核,从而使用内核提供的各种资源,比如操作硬件,开关中断,改变特权模式等等。首先,系统调用是一个软中断,既然是中断那么一般就具有中断号和中断处理程序两个属性,Linux使用0x80号中断作为系统调用的入口,而中断处理程序的地址放在中断向量表里。
2012-12-20 15:28:39
463
转载 挂载文件系统
挂载文件系统原文位置:http://www.cnblogs.com/jesse123/archive/2011/11/13/2247382.html 每个文件系统都是一个独立的世界,统管着属于自己的文件们。如果你想进入这世界瞧一瞧,要准备一扇门(文件夹),然后施展魔法(mount命令),门的另一边便通向了新文件系统。SYSCALL_DEFINE5(mount,
2012-12-06 16:13:44
859
转载 解析 Linux 中的 VFS 文件系统机制
简介: 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中 VFS 的内在
2012-12-04 11:49:25
412
转载 Linux2.6 内核的 Initrd 机制解析
1.什么是 Initrdinitrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。在 boot loader 配置了 initrd 的
2012-12-04 10:31:41
314
转载 Linux--根文件系统的挂载过程分析
前言:本篇文章以S3C6410公版的Linux BSP和U-Boot来进行分析,文中所有提及的名词和数据都是以该环境为例,所有的代码流程也是以该环境为例来进行分析。哈哈。如果有不正确或者不完善的地方,欢迎前来拍砖留言或者发邮件到guopeixin@126.com进行讨论,先行谢过。简单的来说,根文件系统包括虚拟根文件系统和真实根文件系统。在Kernel启动的初始阶段,首先去创建虚拟的根文件
2012-11-30 17:53:05
451
转载 挂载根文件系统
挂载根文件系统是一个相当复杂的过程,因为Linux内核允许根文件系统存放在很多不同的地方,比如硬盘分区、软盘、通过NFS共享的远程文件系统,甚至保存在ramdisk中(RAM中的虚拟块设备)。 为了使叙述变得简单,在此假定根文件系统存放在硬盘分区(毕竟这是最常见的情行)。当系统启动时,内核就要在变量ROOT_DEV中寻找包含根文件系统的磁盘主设备号:------------------
2012-11-30 16:59:20
1180
转载 linux文件系统的系统分析--(九)sysfs下属性文件的读写
sysfs的属性文件的读写,我们先看下open,open系统调用最终会调用sysfs_open_file struct sysfs_dirent *attr_sd = file->f_path.dentry->d_fsdata; //获取sysfs_dirent结构struct kobject *kobj = attr_sd->s_parent->s_dir.kobj;
2012-11-29 18:41:11
482
转载 linux文件系统的系统分析--(八)sysfs中sysfs_dirent与inode dentry的关系
对于具体的文件系统,因为在vfs层下,所以必须有inode和dentry才能用,但从前两篇中我们只看到了sysfs中的sysfs_dirent搭建起来的目录树,通过sysfs_dirent与kobject的紧密关系,也可看到kobject的层次关系。 但前面的创建目录和创建文件,都没有inode和dentry,下面我们就看看sysfs中sysfs_dirent与inode dentr
2012-11-29 18:39:47
574
转载 linux文件系统的系统分析--(七)sysfs下属性文件的创建
属性文件的建立和目录的建立相差不大,因为不管目录还是普通文件,都由一个sysfs_dirent代表sysfs_create_file-->sysfs_add_file-->sysfs_add_file_modeintsysfs_add_file_mode(struct sysfs_dirent *dir_sd,conststruct attribute *attr, int t
2012-11-29 18:38:15
417
转载 linux文件系统的系统分析--(六)sysfs下目录的创建
对sysfs和设备模型有了解的都会知道sysfs实际是为了将设备模型导出到用户空间的一个内存文件系统。 设备模型的关键结构体kobject会组成设备模型的树形结构,而sysfs的关键结构体sysfs_dirent也是类似的树形的结构,vfs中的dentry同样是类似的树形结构。 sysfs目录文件的创建都是由设备模型的上层构件(bus device driver c
2012-11-29 18:36:36
651
转载 linux文件系统的系统分析--(五)路径名的查找
do_path_lookup是文件系统中最基本的函数,也是非常重要的,里面各种情况,各种goto,总之各种坑爹。。 没能把所有的goto都理清,只看了标准情况下的路径查找,但主要的关键点都是一样的,弄清了关键点,心中对文件系统的路径名查找就有了概念。不管绝对路径名,相对路径名,还是带符号链接的,又有什么质的区别呢? do_path_lookup分为两步:
2012-11-29 18:35:18
530
转载 linux文件系统的系统分析--(四)sysfs的安装和挂载
在上一次分析rootfs的安装时,其实是不准确的,应该称为安装根文件系统。 安装根文件系统分为两个阶段: 1、内核安装特殊rootfs文件系统,该文件系统仅提供一个作为初始安装点的空目录。 2、内核在空目录上安装实际根文件系统。比如pc上的ext4,比如嵌入式中用到的各种flash的根文件系统。 这一次分析sysfs,发现sy
2012-11-29 18:34:25
611
转载 linux文件系统的系统分析--(三)rootfs的安装
在《linux文件系统的系统分析--(一)文件系统类型的注册》我们以rootfs为例分析了文件系统是如何注册的,接着我们就分析rootfs的安装。 在mnt_init-->init_mount_tree:static void __init init_mount_tree(void){ struct vfsmount *mnt; struct mnt_n
2012-11-29 18:32:32
773
转载 linux文件系统的系统分析--(二)文件系统类型的注册
因为linux支持模块机制,所以我们可以将文件系统编译为模块,所以文件系统系统类型的注册的注册有多种方式:要么已经包含在内核映像中,要么作为一个模块被动态加载。我们关注的重点是rootfs和sysfs,他们其实在系统初始化的时候就注册并安装好了,没有rootfs,linux就没法玩了。以rootfs的注册为例,来分析一下文件系统类型的注册: 在start_kernel-->vfs
2012-11-29 18:30:56
1157
转载 linux文件系统的系统分析--(一)vfs和数据结构
linux的虚拟文件系统层的特点在于把很多不同种类文件系统的共同信息放入内核;可以通过vfs的转换来利用linux所支持挂载的实际文件系统。实际上,因为有了vfs,也可以较为方便的按照vfs的一些接口将文件系统移植过来,比如win下的ntfs和fat32就是如此。在open read等系统调用之后就是到vfs_read 等式样的函数,在vfs层做些处理后,再根据当前操作的路径所挂载在哪个文件系统下
2012-11-29 17:58:57
595
转载 rootfs文件系统简单分析
rootfs文件系统是基于内存的文件系统,也是虚拟的文件系统,在系统启动之后,隐藏在真正的根文件系统后面,不能被卸载。在开始介绍rootfs之前,先介绍一下,rootfs的数据结构,然后再看一下rootfs中的函数rootfs_get_sb是怎么调用的。rootfs的数据结构如下[cpp] view plaincopyprint?1static struct f
2012-11-29 13:55:29
871
转载 Linux-2.6 内核软中断(softirq)执行分析
今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd这个东西后,softirq在系统中的调用点仅是在 ISR返回时和使用了 local_bh_enable()函数后被调用了。网卡部分的显示调用,我觉得应
2012-09-10 17:20:37
4141
转载 linux vfs 解析 之 mount 文件系统 (中)
原文:http://blog.sina.com.cn/s/blog_5219094a0100caly.html找到了要 mount 的目录,下面就开始实际的mount过程mount的过程就是把设备的文件系统加入到 vfs 框架中1. 首先,要mount一个新的设备,需要创建一个新的 super block。 这通过要mount的文件系统的 file_system_type, 调用其
2012-09-10 11:49:55
491
转载 linux vfs 解析 之 mount 文件系统 (下)
原文:http://blog.sina.com.cn/s/blog_5219094a0100calt.html 另外,对于Linux,可以将多个文件系统 mount 到同一个目录上,这样的话, 新 mount 的文件系统会覆盖原来mount的文件系统。比如我们再把一个 "/dve/hdb2" 的设备 mount 到 "/home/xpl" 目录下,这样,如果我们访问 "/home
2012-09-10 11:48:26
565
转载 linux vfs 解析 之 mount 文件系统 (上)
原文:http://blog.sina.com.cn/s/blog_5219094a0100calt.htmlmount 文件系统主要数据结构:struct namespace { atomic_t count; struct vfsmount * root; struct list_head list; struct rw_semaphore sem;
2012-09-10 10:20:40
643
转载 FAT文件系统学习记录二
前次深入的分析了FAT表的组织形式和linux内核在处理FAT表项时候的一些操作。任何一个文件系统都需要将文件的基本信息以某种形式存储在设备中(包括文件名,文件读写属性,文件的创建、访问、修改时间等等)。FAT文件系统也不能例外。Linux内核中以结构体struct msdos_dir_entry来表示一个文件目录项。该文件目录项一共占32个字节的空间。struct msdos_dir_e
2012-08-31 17:46:35
1624
转载 FAT文件系统学习记录一
从这个的简单的介绍中可以了解到FAT文件系统的布局,FAT表的组织,目录的形式,长短文件目录项的关系等等。这些都是FAT文件系统的一些基本思想。图一:FAT32的组织形式为了了解FAT的格式,需要仔细而详细的阅读《FAT文件系统原理》的4.3 FAT表和数据的存储原则。后面继续将到了 FAT32 短文件目录和FAT32长文件目录的定义,关于长短文件目录项,可以在后面介绍源码的时候详细
2012-08-31 17:45:17
1518
转载 android fsck_msdos 分析(二)
其实写完前面的关于FAT文件系统的簇检查那一部分之后,我一直没准备写第二部分关于文件目录项处理这一部分,因为这部分都是按照FAT规范来处理的。handleDirTree(int dosfs, struct bootblock*boot, struct fatEntry*fat){ int mod; mod = read
2012-08-31 17:38:37
4679
转载 android fsck_msdos分析(一) (2012-06-24 10:43)
android fsck_msdos分析(一) (2012-06-24 10:43) 最近准备重写android/external中自带的fsck工具,因为这个工具对于内存的占用太厉害了,在一些极端的大容量小簇的情况下会导致系统奔溃,所以准备重写一个。 Android自带的fsck在检查的时候会为每一个簇分配一个struct fatentry结构体,在后面的检查
2012-08-31 17:37:12
2423
转载 linux—select详解
linux—select详解 select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a f
2012-08-29 15:15:50
370
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人