Доброго времени суток.
Я пишу драйвер на Debian 5 работающий на MPC8308.
Интересует меня работа с dma.
Нашёл пример:
https://github.com/torvalds/linux/blob/master/drivers/dma/mpc512x_dma.c
Но в моей версии Linux в device.h структура device_driver имеет следующий вид:
struct device_driver {
const char *name;
struct bus_type *bus;
struct module *owner;
const char *mod_name; /* used for built-in modules */
int (*probe) (struct device *dev);
int (*remove) (struct device *dev);
void (*shutdown) (struct device *dev);
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
struct attribute_group **groups;
struct dev_pm_ops *pm;
struct driver_private *p;
};
Т.е. в ней нет of_match_table.
Скорее всего мой драйвер не стартует по этой причине.
Приведу краткий текст:
static const struct of_device_id fsldma_of_ids[] = {
{ .compatible = "fsl,elo3-dma", },
{ .compatible = "fsl,eloplus-dma", },
{ .compatible = "fsl,elo-dma", },
{}
};
MODULE_DEVICE_TABLE(of, fsldma_of_ids);
static int mpc_dma_probe(struct platform_device *op)
{
printk("1414134134q f1q c2r");
struct device *dev = &op->dev;
dev_err(dev, "Error mapping IRQ!\n");
return 0;
}
static int mpc_dma_remove(struct platform_device *op)
{
return 0;
}
#define DRV_NAME "mpc512x_dma4"
static const struct of_device_id mpc_dma_match[] = {
{ .compatible = "fsl,mpc5121-dma", },
{ .compatible = "fsl,mpc8308-dma", },
{},
};
MODULE_DEVICE_TABLE(of, mpc_dma_match);
#include <linux/device.h>
static struct platform_driver mpc_dma_driver = {
.probe = mpc_dma_probe,
.remove = mpc_dma_remove,
.driver = {
.name = DRV_NAME,
}
};
module_platform_driver(mpc_dma_driver);
int init_module_( void )
{
printk(KERN_INFO "Hi \n");
printk(KERN_INFO "PID = %u \n", PID);
int ret = 0;
return platform_driver_register(&mpc_dma_driver);
}
void cleanup_module_( void )
{
printk(KERN_INFO "Bye");
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("888888888");
MODULE_DESCRIPTION("Interrupt hooker");
MODULE_SUPPORTED_DEVICE("KBF");
module_init(init_module_);
module_exit(cleanup_module_);
Собственно текста "1414134134q f1q c2r" в dmesg никогда не вижу.
файл драйвера лежит в /lib/modules/2.6.29.6-rt23/kernel
Загружаю драйвер так:
modprobe main
Подскажите пожалуйста.