linux内核对块设备的使用】的更多相关文章

扇区: 1.硬盘控制器将磁盘看成一大组扇区2.扇区就是一组相邻字节3.扇区按照惯例大小设置位512字节4.存放在块设备中的数据是通过它们在磁盘上的位置来标识,即首个扇区的下标和扇区的数目.5.扇区是硬件设备传送数据到基本单位. 块:1.块是VFS和文件系统传送数据到基本单位.它对应磁盘上一个或者多个相邻扇区.2.内核访问一个文件内容时,它先从磁盘上读文件的磁盘索引节点所在的块3.Linux中,块必须是2的幂,且不能超过一个页框(一般4kB),还必须是扇区大小的整数倍.4.对块设备文件的读写操作时…
1 partition table 这里的分析以经典的MBR为例. 在MBR里面有partition table,每一项对应一个逻辑的块设备,partion table中的每一项是16个字节. 第一个字节:标志该分区是不是active.是不是bootable. 第二到第四个字节:该partition的第一个扇区在物理块设备里面的绝对地址,即chs地址. 第五个字节:该分区的类型,比如是不是linux的文件系统. 第六到八字节:该partition的最后一个扇区在物理块设备里面的绝对地址. 第九到…
Linux显示列出块设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 60G 0 part ├─sda2 8:2 0 1K 0 part ├─sda5 8:5 0 102G 0 part ├─sda6 8:6 0 102G 0 part ├─sda7 8:7 0 101G 0 part ├…
/************************************************************************* * Linux Shell 判断块设备节点是否存在 * 说明: * 能牌问shell脚本-f不能判断mmc设备节点的问题,查了一下资料,发现不能 * 使用-f来判断,要使用-e或者-b来判断才行. * * 2017-1-17 深圳 南山平山村 曾剑锋 *************************************************…
块设备的驱动比字符设备的难,这是因为块设备的驱动和内核的联系进一步增大,但是同时块设备的访问的几个基本结构和字符还是有相似之处的. 有一句话必须记住:对于存储设备(硬盘~~带有机械的操作)而言,调整读写的顺序作用巨大,因为读写连续的扇区比分离的扇区快. 但是同时:SD卡和U盘这类设备没有机械上的限制,所以像上面说的进行连续扇区的调整显得就没有必要了. 先说一下对于硬盘这类设备的简单的驱动. 在linux的内核中,使用gendisk结构来表示一个独立的磁盘设备或者分区.这个结构中包含了磁盘的主设备…
1. 基本概念: 扇区(Sectors):任何块设备硬件对数据处理的基本单位.通常,1个扇区的大小为512byte.(对设备而言) 块  (Blocks):由Linux制定对内核或文件系统等数据处理的基本单位.通常,1个块由1个或多个扇区组成.(对Linux操作系统而言) 段(Segments):由若干个相邻的块组成.是Linux内存管理机制中一个内存页或者内存页的一部分. 2. 块设备结构体: static const struct block_device_operations blk_op…
顾名思义,块设备驱动程序就是支持以块的方式进行读写的设备.块设备和字符设备最大的区别在于读写数据的基本单元不同.块设备读写数据的基本单元为块,例 如磁盘通常为一个sector,而字符设备的基本单元为字节.从实现角度来看,字符设备的实现比较简单,内核例程和用户态API一一对应,这种映射关系由 字符设备的file_operations维护.块设备接口则相对复杂,读写API没有直接到块设备层,而是直接到文件系统 层,然后再由文件系统层发起读写请求. 源代码(ramdisk.c) #include <l…
1.制作块文件 3 个 [root@localhost yaoxu]# [root@localhost yaoxu]# [root@localhost yaoxu]# 2.创建回环设备 [root@localhost yaoxu]# losetup /dev/loop1 /home/yaoxu/loop.img [root@localhost yaoxu]# ls /dev/loo* /dev/loop0 /dev/loop1 /dev/loop-control [root@localhost…
上一章主要讲了请求队列的一系列问题.下面主要说一下请求函数.首先来说一下硬盘类块设备的请求函数. 请求函数可以在没有完成请求队列的中的所有请求的情况下就返回,也可以在一个请求都不完成的情况下就返回. 下面贴出请求函数的例程: static int simp_blkdev_make_request(struct request_queue *q, struct bio *bio) { struct bio_vec *bvec; int i; void *dsk_mem; if ((bio->bi_…
mmap系统调用(功能) void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset) 内存映射函数mmap , 负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read, write等操作. addr:        指定映射的起始地址,通常设为NULL, 由系统指定. len:          映射到内存的文件长度 prot:     …