添加磁盘的第一步, 是需要分配一个genhd的数据结构, linux 提供了 alloc_disk 函数来分配genhd include/linux/genhd.h #define alloc_disk_node(minors, node_id) \ ({ \ static struct lock_class_key __key; \ const char *__name; \ struct gendisk *__disk; \ \ __name = "(gendisk_comple...
/*3)使用alloc_disk()分配一个gendisk结构体*/ memblock_disk=alloc_disk(16); //不分区 /*4)设置gendisk结构体的成员*/ /*->4.1)设置成员参数(major、first_minor、disk_name、fops)*/ memblock_disk->major = memblock_major; memblock_disk->first_minor = 0; sprintf(memblock_disk->disk_name, ...
* 1. 分配一个gendisk结构,用alloc_disk函数 * 2. 分配一个request队列,用blk_init_queue函数 * 3. 设置gendisk结构 * 3.1 设置主设备号,次设备号 * 3.2 设置block_device_operations结构 * 3.3 设置queueu结构 * 4. 注册gendisk: 用add_disk函数 */ /***既然知道 DragonKingZhu 2022/05/08 1.3K0 ...
我来告诉你:如果看到 add_disk ,那说明前面一定会有 alloc_disk 和初始化队列的动作,在 mmc_blk_probe 时面没有体现出来,那就看 mmc_blk_alloc(card) 那一行: static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card) { struct mmc_blk_data *md; int devidx, ret; devidx = find_firs...
1. 块设备简单分类:SCSI块设备和LVM逻辑卷块设备; 2. 创建块设备需要两个linux内核函数:alloc_disk;add_disk; alloc_disk:用于分配一个gendisk结构体的实例; add_disk:将该结构体实例注册到系统中; SCSI磁盘的具体实现在文件sd.c(driver/scsi/sd.c)中; ...
1.1 gendisk磁盘结构体: structgendisk {intmajor;//设备主设备号,等于register_blkdev()函数里的majorintfirst_minor;//起始次设备号,等于0,则表示此设备号从0开始的intminors;//分区(次设备)数量,当使用alloc_disk()时,就会自动设置该成员chardisk_name[32];//块设备名称, 等于register_blkdev()函数里的nam...
这里面有2个函数,也就是alloc_disk和add_disk。前一个函数是分配一个通用块的结构体,后者则是将该块设备添加到内核,也就是在/dev目录下生成一个“文件”。以上述代码为例,执行后会生成如下块设备。 复制 brw-rw---1rootdisk251,0Jun1609:13/dev/sbulla 1...
b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types mprintthis menu n add a new partition o create a new empty DOS partition table ...
/*3)使用alloc_disk()分配一个gendisk结构体*/ memblock_disk=alloc_disk(16); //不分区 /*4)设置gendisk结构体的成员*/ /*->4.1)设置成员参数(major、first_minor、disk_name、fops)*/ memblock_disk->major = memblock_major; memblock_disk->first_minor = 0; sprintf(memblock_disk->disk_name, ...
发现出错,出现分区无法写入分区表,如下图所示: 找到在驱动程序入口函数中,alloc_disk()分配一个gendisk,设置的只有一个分区.如下图所示: 修改参数,改为大于2的值即可,然后重新执行就没有问题了 7.输入ls /dev/memblock* -l,就能看到分到的分区了 (PS:次设备号为0的,就是主磁盘)...