读书人

Linux-2.6平台上SCSI子系统初始化及退

发布时间: 2013-01-19 11:41:36 作者: rapoo

Linux-2.6平台下SCSI子系统初始化及退出

1、SCSI子系统初始化

SCSI子系统总是被编译到Linux内核的,其初始化入口函数为init_scsi,在文件drivers/scsi/scsi.c中。它使用宏subsys_initcall定义。

static int __init init_scsi(void)
{
int error;

error = scsi_init_queue(); //初始化聚散列表等所需要的存储池
if (error)
return error;
error = scsi_init_procfs(); //初始化proc文件系统中与SCSI有关的目录项
if (error)
goto cleanup_queue;
error = scsi_init_devinfo(); // 设置SCSI动态设备信息列表
if (error)
goto cleanup_procfs;
error = scsi_init_hosts(); //注册shost_class类,这将在sys/class/目录下创建scsi_host子目录
if (error)
goto cleanup_devlist;
error = scsi_init_sysctl(); //注册SCSI系统控制表
if (error)
goto cleanup_hosts;

error = scsi_sysfs_register(); //注册SCSI总线类型以及sdev_class类
if (error)
goto cleanup_sysctl;

scsi_netlink_init(); //初始化SCSI传输netlink接口,netlink是Linux内核与用户空间进行通信的一种机制

printk(KERN_NOTICE "SCSI subsystem initialized\n");
return 0;

cleanup_sysctl:
scsi_exit_sysctl();
cleanup_hosts:
scsi_exit_hosts();
cleanup_devlist:
scsi_exit_devinfo();
cleanup_procfs:
scsi_exit_procfs();
cleanup_queue:
scsi_exit_queue();
printk(KERN_ERR "SCSI subsystem failed to initialize, error = %d\n",
-error);
return error;
}

2、SCSI子系统exit_scsi退出

static void __exit exit_scsi(void)
{
scsi_netlink_exit();
scsi_sysfs_unregister();
scsi_exit_sysctl();
scsi_exit_hosts();
scsi_exit_devinfo();
scsi_exit_procfs();
scsi_exit_queue();
}

读书人网 >UNIXLINUX

热点推荐