在通过调用ipmi_register_smi来注册ipmi_smi_handlers *handlers时,会通过
if (rv == 0)
rv = add_proc_entries(intf, i);
来建立一个proc entry
static int add_proc_entries(ipmi_smi_t smi, int num)
{
int rv = 0;
#ifdef CONFIG_PROC_FS
sprintf(smi->proc_dir_name, "%d", num);
smi->proc_dir = proc_mkdir(smi->proc_dir_name, proc_ipmi_root);
if (!smi->proc_dir)
rv = -ENOMEM;
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "stats",
&smi_stats_proc_ops,
smi);
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "ipmb",
&smi_ipmb_proc_ops,
smi);
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "version",
&smi_version_proc_ops,
smi);
#endif /* CONFIG_PROC_FS */
return rv;
}
这里的num是在ipmi_register_smi 中赋值的,在add_proc_entries 中的num就是这里的i
/* Look for a hole in the numbers. */
i = 0;
link = &ipmi_interfaces;
list_for_each_entry_rcu(tintf, &ipmi_interfaces, link) {
if (tintf->intf_num != i) {
link = &tintf->link;
break;
}
i++;
}
可以看到是从0开始的,每个ipmi_interfaces 对应一个number,这个ipmi_interfaces的添加同样是在ipmi_register_smi中
/* Add the new interface in numeric order. */
if (i == 0)
list_add_rcu(&intf->link, &ipmi_interfaces);
else
list_add_tail_rcu(&intf->link, link);
回到add_proc_entries,通过proc_mkdir 创建proc目录,名字就是0/1/2等会创建三个目录stats/ipmb/version
回到try_smi_init中,除了stats/ipmb/version这个外,还添加了type/si_stats/params 这三个目录
if (rv == 0)
rv = add_proc_entries(intf, i);
来建立一个proc entry
static int add_proc_entries(ipmi_smi_t smi, int num)
{
int rv = 0;
#ifdef CONFIG_PROC_FS
sprintf(smi->proc_dir_name, "%d", num);
smi->proc_dir = proc_mkdir(smi->proc_dir_name, proc_ipmi_root);
if (!smi->proc_dir)
rv = -ENOMEM;
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "stats",
&smi_stats_proc_ops,
smi);
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "ipmb",
&smi_ipmb_proc_ops,
smi);
if (rv == 0)
rv = ipmi_smi_add_proc_entry(smi, "version",
&smi_version_proc_ops,
smi);
#endif /* CONFIG_PROC_FS */
return rv;
}
这里的num是在ipmi_register_smi 中赋值的,在add_proc_entries 中的num就是这里的i
/* Look for a hole in the numbers. */
i = 0;
link = &ipmi_interfaces;
list_for_each_entry_rcu(tintf, &ipmi_interfaces, link) {
if (tintf->intf_num != i) {
link = &tintf->link;
break;
}
i++;
}
可以看到是从0开始的,每个ipmi_interfaces 对应一个number,这个ipmi_interfaces的添加同样是在ipmi_register_smi中
/* Add the new interface in numeric order. */
if (i == 0)
list_add_rcu(&intf->link, &ipmi_interfaces);
else
list_add_tail_rcu(&intf->link, link);
回到add_proc_entries,通过proc_mkdir 创建proc目录,名字就是0/1/2等会创建三个目录stats/ipmb/version
回到try_smi_init中,除了stats/ipmb/version这个外,还添加了type/si_stats/params 这三个目录