linux nbd设备

这篇博客详细介绍了Linux的NBD(Network Block Device)设备,包括文档说明、架构方式和模块意义。NBD模块允许将远程文件视为本地设备使用,支持系统安装等功能。文章深入剖析了内核代码、文件操作结构体以及测试方法,提供了测试过程的步骤和资源链接。
摘要由CSDN通过智能技术生成

1.说明

1.1 文档说明

1.nbd协议文档
2.nbd介绍文档
nbd协议文档也可以从github协议文档查看到。
3.linux bugzilla
4.nbd client其他实现
5.release包下载 推荐方法
6.bmc上一种实现想法讨论

1.2 架构方式

client-server架构模式,server端即:提供文件服务功能。client端即:使用文件服务的功能。

由于linux系统应用层无严格操作底层设备的功能,因此client需要提供kernel驱动程序级别的支持,这就是linux驱动端模块nbd.c的来由。

1.2 模块意义

linux模块可以将远程的文件看作本地文件使用,如果搭配上usb,将可以做到usb cdrom等安装系统。例如将远程系统iso镜像文件挂接到开发板上,开发板模拟出一个usb设备,然后连接到待安装系统的usb上,将可以做到系统安装的功能。

2.开发分析

2.1 底层代码

1.Linux内核代码:linux/drivers/block/nbd.c
2.头文件:linux/usr/include/linux/nbd.h
3.头文件:linux/usr/include/linux/nbd-netlink.h
4.应用层代码:下载地址1或者下载地址2

使用方法可以参考github上的描述。

2.1.1 linux/drivers/block/nbd.c内容分析
2.1.1.1 文件操作结构体

总的对用户空间而言,需要查看结构体内容:

static const struct block_device_operations nbd_fops =
{
   
	.owner =	THIS_MODULE,
	.open =		nbd_open,
	.release =	nbd_release,
	.ioctl =	nbd_ioctl,
	.compat_ioctl =	nbd_ioctl,
};
2.1.1.2 ioctl()

ioctl的调用流程为:

nbd_ioctl()
---> __nbd_ioctl()
   ---> NBD_DISCONNECT : nbd_disconnect()
   ---> NBD_CLEAR_SOCK :  nbd_clear_sock_ioctl()
   ---> NBD_SET_SOCK:  nbd_add_socket()
   ---> NBD_SET_BLKSIZE: nbd_size_set()
   ---> NBD_SET_SIZE : nbd_size_set()
   ---> NBD_SET_SIZE_BLOCKS: nbd_size_set()
   ---> NBD_SET_TIMEOUT: nbd_set_cmd_timeout()
   ---> NBD_SET_FLAGS:  config->flags = arg;
   ---> NBD_DO_IT:  nbd_start_device_ioctl(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值