Linux kernel 中断之proc接口之irq

来源:互联网 发布:图片处理器软件 编辑:程序博客网 时间:2024/06/06 16:38
文件proc/irq/主要是用于对每个irq进行设置和信息查看:

void init_irq_proc(void){ unsigned int irq; struct irq_desc *desc;

 /* create /proc/irq */ root_irq_dir = proc_mkdir("irq", NULL); if (!root_irq_dir)  return;

 register_default_affinity_proc();

 /*  * Create entries for all existing IRQs.  */ for_each_irq_desc(irq, desc) 对系统内的所有的中断进行注册  register_irq_proc(irq, desc);}

void register_irq_proc(unsigned int irq, struct irq_desc *desc){ static DEFINE_MUTEX(register_lock); char name [MAX_NAMELEN];

 if (!root_irq_dir || (desc->irq_data.chip == &no_irq_chip))  return;

 /*  * irq directories are registered only when a handler is  * added, not when the descriptor is created, so multiple  * tasks might try to register at the same time.  */ mutex_lock(&register_lock);

 if (desc->dir)  goto out_unlock;

 sprintf(name, "%d", irq);

 /* create /proc/irq/1234 */ desc->dir = proc_mkdir(name, root_irq_dir); if (!desc->dir)  goto out_unlock;

#ifdef CONFIG_SMP /* create /proc/irq/<irq>/smp_affinity */ proc_create_data("smp_affinity", 0644, desc->dir,    &irq_affinity_proc_fops, (void *)(long)irq);

 /* create /proc/irq/<irq>/affinity_hint */ proc_create_data("affinity_hint", 0444, desc->dir,    &irq_affinity_hint_proc_fops, (void *)(long)irq);

 /* create /proc/irq/<irq>/smp_affinity_list */ proc_create_data("smp_affinity_list", 0644, desc->dir,    &irq_affinity_list_proc_fops, (void *)(long)irq);

 proc_create_data("node", 0444, desc->dir,    &irq_node_proc_fops, (void *)(long)irq);#endif

 proc_create_data("spurious", 0444, desc->dir,    &irq_spurious_proc_fops, (void *)(long)irq);

out_unlock: mutex_unlock(&register_lock);}

:/proc/irq # lsls10010110210310410510610710810911011111299

:/proc/irq/203 # lslsaffinity_hintnodesmp_affinitysmp_affinity_listspurious

0 0