模块的退出函数为s3c2410_ts_exit,该函数的工作就是清除已注册的字符设备,中断以及设备文件系统。 static void __exit s3c2410_ts_exit(void) { #ifdef CONFIG_DEVFS_FS devfs_unregister(devfs_tsraw); devfs_unregister(devfs_ts_dir); #endif unregister_chrdev(tsMajor, DEVICE_NAME); #ifdef CONFIG_PM pm_unregister(tsdev.pm_dev); #endif free_irq(IRQ_ADC_DONE, s3c2410_isr_adc); free_irq(IRQ_TC, s3c2410_isr_tc); #ifdef CONFIG_DEVFS_FS devfs_unregister(devfs_tsraw); devfs_unregister(devfs_ts_dir); #endif 这里首先清除原先后一步创建设备文件节点0raw 的结构变量devfs_tsraw,然后再清除创建touchscreen 目录的结构变量devfs_ts_dir。 unregister_chrdev(tsMajor, DEVICE_NAME); 接下来删除字符设备的注册信息。 void free_irq(unsigned int irq, void *dev_id) 函数free_irq 与函数request_irq 相对应,通常在模块被卸载时调用,负责注销一个已经申请的中断。
free_irq(IRQ_ADC_DONE, s3c2410_isr_adc); free_irq(IRQ_TC, s3c2410_isr_tc); 最后依次注销A/D转换和定时器这两个已经申请的中断。
|