IO端口映射和IO内存映射(详解S3C24XX_GPIO驱动)
register_chrdev(LED_MAJOR, DEVICE_NAME, &s3c24xx_leds_fops);248 if (ret < 0) {249 printk(DEVICE_NAME " cant register major number\n");250 return ret;251 }252 leds_class = class_create(THIS_MODULE, "leds");253 if (IS_ERR(leds_class))254 return PTR_ERR(leds_class);255 256 leds_class_devs[0] = class_device_create(leds_class, NULL, MKDEV(LED_MAJOR, 0), NULL, "leds");257 258 for (minor = 1; minor < 4; minor++)259 {260 leds_class_devs[minor] = class_device_create(leds_class, NULL, MKDEV(LED_MAJOR, minor), NULL, "led%d", minor);261 if (unlikely(IS_ERR(leds_class_devs[minor])))262 return PTR_ERR(leds_class_devs[minor]);263 }264 265 printk(DEVICE_NAME " initialized\n");266 return 0;267 }268 269 /*270 * 执行rmmod命令时就会调用这个函数 271 */272 static void __exit s3c24xx_leds_exit(void)273 {274 int minor;275 /* 卸载驱动程序 */276 unregister_chrdev(LED_MAJOR, DEVICE_NAME);277 278 for (minor = 0; minor < 4; minor++)279 {280 class_device_unregister(leds_class_devs[minor]);281 }282 class_destroy(leds_class);283 //释放IO端口284 iounmap(gpio_va);285 }286 287 /* 这两行指定驱动程序的初始化函数和卸载函数 */288 module_init(s3c24xx_leds_init);289 module_exit(s3c24xx_leds_exit);290 291 /* 描述驱动程序的一些信息,不是必须的 */292 MODULE_LICENSE("GPL");
View CodeIO端口映射IO内存映射S3C24XXGPIO驱 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)