包含关于某个硬盘的信息。用于磁盘初始化与分区检查时。
struct hd_struct {
long start_sect;
long nr_sects;
};
struct gendisk {
int major; /* major number of driver */
const char *major_name; /* name of major driver */
int minor_shift; /* number of times minor is shifted to
get real minor */
int max_p; /* maximum partitions per device */
int max_nr; /* maximum number of real devices */
void (*init)(struct gendisk *);
/* Initialization called before we
do our thing */
struct hd_struct *part; /* partition table */
int *sizes; /* device size in blocks, copied to
blk_size[] */
int nr_real; /* number of real devices */
void *real_devices; /* internal use */
struct gendisk *next;
};
分享到:
相关推荐
Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在Linux中扮演着至关重要的角色,它们是操作系统理解和管理硬件、文件系统、进程、网络等核心功能的基础。以下是根据标题...
`gendisk`结构体是Linux内核中用来表示单个磁盘设备或分区的数据结构。它包含了关于磁盘的基本信息以及与其相关的操作方法。 - `major`:主设备号。 - `first_minor`:第一个次设备号。 - `minors`:最大次设备号...
- **初始化**:配置设备并准备相关数据结构。 - **request操作**:处理来自上层的读写请求。 - **打开操作**:设备被打开时进行的初始化。 - **释放操作**:设备关闭时清理资源。 - **ioctl操作**:处理特定的设备...
在Linux内核中,块设备驱动是操作系统与硬件之间的重要桥梁之一,它负责管理硬盘、光驱等存储设备的数据传输过程。对于希望深入了解Linux内核机制及驱动开发的开发者而言,掌握块设备驱动的编写技巧是非常有价值的。...
在驱动程序中,`cdev`结构体是字符设备的核心数据结构,它包含了设备的相关信息,如设备操作集合、模块所有者等。开发者可以定义自己的设备操作函数集,通过`cdev_init`和`cdev_add`等函数将设备驱动添加到内核中,...
通过对`block_device_operations` 和 `gendisk` 这两个核心结构体的详细介绍,我们可以更深入地理解Linux块设备驱动的工作原理。这些结构体不仅提供了对块设备的基础操作支持,还允许开发者实现自定义的功能以适应...
**块设备驱动的核心结构** 块设备驱动的核心组件包括: 1. **gendisk**:磁盘描述符,描述物理磁盘或分区的详细信息。 2. **block_device_operations**:定义了一系列针对磁盘的操作,如读写、初始化等。 3. **...
在Linux内核中,块设备驱动还需要实现队列处理,如`request_queue_t`,它是处理I/O请求的核心数据结构。`make_request`函数将用户空间的请求转化为内核中的请求队列,然后由块层调度器处理这些请求。 此外,驱动还...
- 创建`request_queue`对象,这是用于处理I/O请求的数据结构。 - 分配一个`gendisk`结构体,这代表了逻辑磁盘。 - 设置逻辑磁盘的名称。 #### 映射表(dm_table) - **dm_table**是描述`mapped_device`映射关系的...
此外,还需要初始化与设备相关的队列和数据结构,例如`Request_queue`和`gendisk`。这些结构体和队列用于管理和调度发送到MD设备的I/O请求。 在管理MD设备的过程中,会频繁地使用到一些核心函数,例如: - `md_new...
虽然本例仅作为一个入门级示例,但它涵盖了块设备驱动的核心部分,为进一步深入学习打下了坚实的基础。希望这篇教程能够帮助你更好地理解块设备驱动的工作原理,并激发你在Linux内核开发领域不断探索的兴趣。
2. **设备结构体**:在Linux中,`struct gendisk`(通用磁盘结构体)是块设备的核心结构,它包含了设备的相关信息,如设备号、驱动程序指针、容量等。在代码示例中,你需要定义并填充这个结构体。 3. **I/O操作**:...
初始化时,需将I/O地址映射到内存空间,设置IDE控制器结构,注册到Linux VFS,请求中断和I/O空间,并在gendisk列表中添加条目。IDE硬盘初始化后,可以通过Linux内核提供的接口进行读写操作,实现对文件系统的自由...