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

本文详细解析了Linux内核中SCSI子系统的初始化和退出过程,包括初始化入口函数、各阶段的主要操作及关键函数作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值