自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

z41013774的专栏

每天进步一点点。

  • 博客(18)
  • 收藏
  • 关注

原创 块设备驱动层

这一章不准备介绍太多,以后还会补充,主要介绍一下块设备驱动的大致流程。一、 磁盘和磁盘分区的表示磁盘是一个由通用块层处理的逻辑块设备。通常一个磁盘对应一个硬件块设备,如硬盘,软盘或光盘。磁盘是由gendisk对象描述。struct gendisk {01 int major; 02 int first_minor;03 int minors;

2011-10-30 14:27:25 1108

原创 IO调度层

一、 IO调度的两个重要的数据结构request_queue数据结构如下struct request_queue{01 struct list_head queue_head;02 struct request *last_merge;03 struct elevator_queue *elevator;04 struct request_list rq;0506

2011-10-30 14:21:05 959

原创 通用块层

通用块层是一个内核组件,处理来自系统中的所有块设备发出的请求,接着上一层,处理提交过来的缓存区头。如果上一章address_space是关键的数据结构,这一章是bio和bio_vec,这两个数据结构一、 两个重要的数据结构struct bio {01 sector_t bi_sector; 02 struct bio *bi_next; /* request queue lin

2011-10-30 14:19:19 1335

原创 页高速缓存(二)

五. 把块放在页高速缓存中在旧的Linux内核版本中,有两种不同的磁盘高速缓存,分别是页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS访问的块的内容保留在内存中。从2.4.10版本开始,缓冲区高速缓存不存在了,把它们存放在叫做”缓冲区页”的专门页中,页缓冲区页保存在页高速缓冲中。缓冲区页在形式上就是与称做”缓冲区首部”的附加描述符相关的数据页,主要目

2011-10-30 14:15:36 1293

原创 页高速缓存(一)

一、 页高速缓存页高速缓存是Linux内核使用的主要磁盘高速缓存。在大多数情况下,内核在读写磁盘的时候都会引用页高速缓存。如果页不在高速缓存中,新的页就会回到高速缓存中,然后从磁盘中读出数据来填充它。如果内存有足够的空闲空间,会让该页长期保留在高速缓存中,以提高访问磁盘的速度。同样,把数据写到磁盘上也是一样的,如果该数据对应的页在高速缓存中,就可以直接写回磁盘,如果不在,就增加新页,然后写

2011-10-30 14:12:01 2111

原创 块设备的基本概述

什么是块设备,块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。块设备驱动程序的调用,可以由上往下分为下面几层。也就是从上层的应用中的读写函数如何到磁盘中的数据,可以这样分,也就是函数调用的步骤。 第一层VFS部分,在VFS文件系统中给出了一些分析。第二层的具体的文件系统

2011-10-30 14:08:49 1360

原创 sysfs之platform总线初始化简单分析

int __init platform_bus_init(void){01 int error;0203 early_platform_cleanup();0405 error = device_register(&platform_bus);06 if (error)07 return error;08 error = bus_register(&plat

2011-10-23 15:10:03 963

原创 sys之device初始化简单

01int __init devices_init(void)02{03 devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);04 if (!devices_kset)05 return -ENOMEM;06 dev_kobj = kobject_create_and_add("dev

2011-10-23 10:03:00 1254

原创 sysfs 文件系统简单分析

01int __init sysfs_init(void)02{03 int err = -ENOMEM;0405 sysfs_dir_cachep = kmem_cache_create("sysfs_dir_cache",06 sizeof(struct sysfs_dirent),07 0, 0, NULL);08 if (

2011-10-22 19:26:50 1011

原创 linux 驱动模型的数据结构

sysfs文件系统sysfs文件系统是一种特殊的文件系统,在系统启动时,被安装在/sys目录,目标主要是展现设备驱动程序模型组件间的层次关系。所包含的目录如下:block 块设备,它们独立于所连接的总线devices 所有被内核识别的硬件设备,都挂在它们的总线上。bus 系统中大部分设备,依靠总线进行连接drivers 注册过的设备驱动程序class 系

2011-10-19 21:55:11 724

原创 rootfs文件系统的简单分析

rootfs文件系统是基于内存的文件系统,也是虚拟的文件系统,在系统启动之后,隐藏在真正的根文件系统后面,不能被卸载。在开始介绍rootfs之前,先介绍一下,rootfs的数据结构,然后再看一下rootfs中的函数rootfs_get_sb是怎么调用的。rootfs的数据结构如下1static struct file_system_type rootfs_fs_type = {2

2011-10-19 07:53:11 6009 2

原创 linux 内核的启动构架

内核为2.6.30.4,平台为S3C2440,友善之臂。内核的启动代码,但一般情况下,是两部分,为了容易理解,可以这样分成三部分。内核启动的第一部分,内核启动的位置在0x30008000,0x30001000存放标记列表,有可以标记列表不只一个,在0x30004000-0

2011-10-18 07:34:33 925

原创 linux 启动之setup_arch函数(二)

01static void __init alloc_init_section(pgd_t *pgd, unsigned long addr,02 unsigned long end, unsigned long phys,03 const struct mem_type *type)04{05 pmd_t *pmd = pmd_offset(p

2011-10-18 07:20:34 836

原创 linux 启动之setup_arch函数(一)

01void __init setup_arch(char **cmdline_p)02{03 struct tag *tags = (struct tag *)&init_tags;04 struct machine_desc *mdesc;05 char *from = default_command_line;0607 unwind_init();0809 s

2011-10-18 07:17:12 1060

原创 linux 根文件系统挂载分析(二)

第三部分解压initramfs文件系统中的内容到rootfs01static int __init populate_rootfs(void)02{03 char *err = unpack_to_rootfs(__initramfs_start,04 __initramfs_end - __initramfs_start);05 if (err)06 pani

2011-10-17 23:32:42 1179

原创 linux 根文件系统的挂载分析(一)

在介绍根文件系统挂载之前先介绍一些基础知识initramfs当linux内核启动后,会找到并执行第一个用户程序,一般是init。这个程序存在于文件系统当中,文件系统存在于设备上,但不知道init存在哪个设备上,于是有了内核命令列选项root=,用来指定root文件系统存在于哪个设备上。然后由于后来的设备类型越来越来多,比如可能在scsi,sata,flash这些设备,还有的存在于网络设

2011-10-17 23:28:26 1003 1

原创 linux VFS数据结构(二)

目录项对象存放目录项与对应文件进行链接的有关信息。每个磁盘文件系统都以自己特有的方式将该类信息存在磁盘上。VFS把目录项当作目录文件来对待,路径中的每个组成部分有一个索引结点表示,虽然它们可以由索引结点表示,但VFS经常需要执行目录相关操作,比如路径的查找等。为了查找方便,VFS引入了目录项这个概念,每个目录项代表路径中一个特定部分。01struct dentry {02 atom

2011-10-17 23:25:48 624

原创 linux VFS数据结构(一)

VFS的数据结构超级块对象记录已安装文件系统的整体信息,由于具体的文件系统来实现,它对应于具体文件系统的超级块或控制块,存储在磁盘的特定扇区上,如果不是基于磁盘的文件系统,比如sysfs,会生成临时的超级块,保存在内存当中。01struct super_block {02 struct list_head s_list; /* Keep this first */03 dev

2011-10-17 23:20:01 592

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除