Заменить имена функций init и exit на probe и remove (в конце добавить return 0; ):
//int __init my_init(void)
static int __init my_probe(struct platform_device *pdev)
{
...
}
//void __exit my_exit(void)
static int my_remove(struct platform_device *pdev)
{
...
return 0;
}
Изменить функции probe и remove для получения данных из структуры входных данных pdev, если это необходимо. Заменить printk на dev_err, dev_info, dev_debug.
Добавить структуру драйвера платформы и написать функцию init, добавляющие устройство платформы и драйвер платформы, и exit, удаляющую их:
#define DRV_NAME "driver name"
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = __devexit_p(my_remove),
.driver = {
.name = DRV_NAME,
},
};
static struct platform_device my_device = {
.name = DRV_NAME,
.id = -1,
};
static int __init my_init(void)
{
int err = platform_driver_register( &my_driver );
if( !err )
{
err = platform_device_register( &my_device );
if( err )
platform_driver_unregister( &my_driver );
}
return err;
}
void __exit my_exit(void)
{
platform_device_unregister( &my_device );
platform_driver_unregister( &my_driver );
}
|