Я знаю, что драйвер и устройство должны иметь одинаковое имя, и я убедился, что сделал это. Однако, когда modprobe'ing моего драйвера, ничего не происходит, хотя я сделал несколько printk в функции init.Инициировать не вызываемый во время modprobe
Когда modprobing, я получаю:
[email protected]:~# dmesg --clear
[email protected]:~# modprobe mcp3202
[email protected]:~# dmesg
[ 41.828678] kobject: 'mcp3202' (bf03968c): kobject_add_internal: parent: 'module', set: 'module'
[ 41.828747] kobject: 'holders' (ded9d980): kobject_add_internal: parent: 'mcp3202', set: '<NULL>'
[ 41.828890] kobject: 'notes' (dd1947c0): kobject_add_internal: parent: 'mcp3202', set: '<NULL>'
[ 41.829028] kobject: 'mcp3202' (bf03968c): kobject_uevent_env
[ 41.829053] kobject: 'mcp3202' (bf03968c): fill_kobj_path: path = '/module/mcp3202'
[email protected]:~#
появляются Нет printk-х.
Мои устройства и драйвера структуры:
static struct platform_device mcp3202_device = {
.name = "mcp3202",
.id = 0,
.num_resources = 0,
};
static strict of_device_id mcp3202_id[] = {
{ .compatible = "microchip,mcp3202", },
{ }
};
MODULE_DEVICE_TABLE(of,mcp3202_id);
static struct platform_driver mcp3202_driver = {
.driver = {
.name = "mcp3202",
.owner = THIS_MODULE,
.of_match_table = mcp3202_id,
},
.probe = mcp3202_probe,
.remove = mcp3202_remove,
};
module_init(mcp3202_init);
module_exit(mcp3202_exit);
... и, наконец, моя функция инициализации (частичные) ...
static int __init mcp3202_init(void)
{
int init_result;
struct device *dev;
printk(KERN_WARNING "mcp3202: reg driver\n");
.
.
.
}
Я понимаю, до тех пор, как спичка названия (dev/drv), mcp3202_init будет вызываться независимо от того, что определено в .dts для этого устройства.
У кого-нибудь есть ключи, что мне не хватает?
Спасибо!
Так сюжет утолщается. Как оказалось, код правильный: проблема заключается в системе Makefile Linux из того, что я могу сказать. –