rfid5-写成platform驱动
上文platform驱动虽然可用,但内层要要写misc驱动,所以不使用设备提供的资源会更加简便。可以如下改一下
Makefile,同上文
Makefile,同上文
ifneq ($(KERNELRELEASE),) obj-m := platform_dev.o platform_drv.o else KDIR := /opt/FriendlyARM/mini2440/linux-2.6.32.2 #KDIR := /lib/modules/`uname -r`/build all: make -C $(KDIR) M=$(PWD) modules clean: rm -f *.ko *.o *.mod.o *.mod.c *.symvers endif设备中去掉资源项,并使用内核alloc的设备在将其add到平台总线,不必registe设备了
/******************platfrom_dev.c***************************/
#include <linux/module.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/kernel.h>
#define DEVICE_NAME "song_rfid"
static struct platform_device *my_device;
static int __init my_init(void)
{
int ret=0;
my_device= platform_device_alloc(DEVICE_NAME,-1);//this name is matched for driver,song_rfid
ret=platform_device_add(my_device);
if (ret == 0) {
printk("Register %s\n",DEVICE_NAME);
} else {
printk("Register error.\n");
platform_device_put(my_device);
}
return ret;
}
static void __exit my_exit(void)
{
platform_device_unregister(my_device);
printk("Unregister %s\n",DEVICE_NAME);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");
MODULE_VERSION("1.5");
/******************platfrom_drv.c***************************/
#include <linux/module.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include <linux/string.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/io.h>
#define DRIVER_NAME "song_rfid"
static int my_probe(struct platform_device *pdev)
{
printk("driver find device : %s which can handle\n",DRIVER_NAME);
return 0;
}
static int my_remove(struct platform_device *pdev)
{
printk("driver found device : %s unpluged\n",DRIVER_NAME);
return 0;
}
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.owner = THIS_MODULE,
.name = DRIVER_NAME,//this name is matched for driver,song_rfid
},
};
static int __init my_init(void)
{
printk("Register my_driver.\n");
return platform_driver_register(&my_driver);
}
static void __exit my_exit(void)
{
printk("Unregister my_driver.\n");
platform_driver_unregister(&my_driver);
}
module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");[root@FriendlyARM plg]# lsmod [root@FriendlyARM plg]# insmod platform_dev.ko Register song_rfid [root@FriendlyARM plg]# insmod platform_drv.ko Register my_driver. driver find device : song_rfid which can handle [root@FriendlyARM plg]# ls /sys/bus/platform/devices/ dm9000 s3c2410-rtc s3c2440-sdi s3c24xx_uda134x.0 regulatory.0 s3c2410-spi.0 s3c2440-uart.0 soc-audio s3c2410-iis s3c2410-wdt s3c2440-uart.1 song_rfid s3c2410-lcd s3c2440-i2c s3c2440-uart.2 s3c2410-ohci s3c2440-nand s3c2440-usbgadget [root@FriendlyARM plg]# ls /sys/bus/platform/drivers dm9000 s3c2410-ohci s3c2440-uart song_rfid s3c-i2c s3c2410-rtc s3c24xx-nand s3c-sdi s3c2410-spi s3c24xx_uda134x s3c2410-lcd s3c2412-lcd soc-audio [root@FriendlyARM plg]# rmmod platform_dev driver found device : song_rfid unpluged Unregister song_rfid rmmod: module 'platform_dev' not found [root@FriendlyARM plg]# rmmod platform_drv Unregister my_driver. rmmod: module 'platform_drv' not found [root@FriendlyARM plg]# lsmod [root@FriendlyARM plg]#
浙公网安备 33010602011771号