LINUX.ORG.RU

не добавляется device node при insmod

 , , ,


0

1

Собственно, есть некая тулза eprd, которую я хочу собрать под своё 4.0.4. Поправил код, собирается, загружается.

[ 3067.075544] EPRD : version    : 0.4.2

Но вот устройство /dev/eprdcontrol не создаётся.

$ >>> udevadm monitor --environment
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[3274.653313] remove   /devices/virtual/misc/eprdcontrol (misc)
ACTION=remove
DEVNAME=/dev/eprdcontrol
DEVPATH=/devices/virtual/misc/eprdcontrol
MAJOR=10
MINOR=57
SEQNUM=1686
SUBSYSTEM=misc

KERNEL[3274.653340] remove   /module/eprd (module)
ACTION=remove
DEVPATH=/module/eprd
SEQNUM=1687
SUBSYSTEM=module

UDEV  [3274.653625] remove   /devices/virtual/misc/eprdcontrol (misc)
ACTION=remove
DEVNAME=/dev/eprdcontrol
DEVPATH=/devices/virtual/misc/eprdcontrol
MAJOR=10
MINOR=57
SEQNUM=1686
SUBSYSTEM=misc
USEC_INITIALIZED=74653332

UDEV  [3274.653732] remove   /module/eprd (module)
ACTION=remove
DEVPATH=/module/eprd
SEQNUM=1687
SUBSYSTEM=module
USEC_INITIALIZED=74653463

KERNEL[3274.660831] add      /module/eprd (module)
ACTION=add
DEVPATH=/module/eprd
SEQNUM=1688
SUBSYSTEM=module

KERNEL[3274.660901] add      /devices/virtual/misc/eprdcontrol (misc)
ACTION=add
DEVNAME=/dev/eprdcontrol
DEVPATH=/devices/virtual/misc/eprdcontrol
MAJOR=10
MINOR=57
SEQNUM=1689
SUBSYSTEM=misc

UDEV  [3274.660975] add      /module/eprd (module)
ACTION=add
DEVPATH=/module/eprd
SEQNUM=1688
SUBSYSTEM=module
USEC_INITIALIZED=660855

UDEV  [3274.661122] add      /devices/virtual/misc/eprdcontrol (misc)
ACTION=add
DEVNAME=/dev/eprdcontrol
DEVPATH=/devices/virtual/misc/eprdcontrol
MAJOR=10
MINOR=57
SEQNUM=1689
SUBSYSTEM=misc
USEC_INITIALIZED=660901

Это вывод udevadm при выполнении rmmod eprd.ko ; insmod eprd.ko

Что приложить к посту ещё, о боги, чтобы вы мне подсказали решение?


sudo udevadm test /class/misc/eprdcontrol

...
Reading rules file: /lib64/udev/rules.d/99-fuse.rules
Reading rules file: /lib64/udev/rules.d/99-ntfs3g.rules
rules contain 196608 bytes tokens (16384 * 12 bytes), 15277 bytes strings
9581 strings (77425 bytes), 8106 de-duplicated (63624 bytes), 1476 trie nodes used
device 0x14bf1f0 has devpath '/devices/virtual/misc/eprdcontrol'
device 0x14a9e30 filled with db file data
handling device node '/dev/eprdcontrol', devnum=c10:57, mode=0600, uid=0, gid=0
can not stat() node '/dev/eprdcontrol' (No such file or directory)
created empty file '/run/udev/data/c10:57' for '/devices/virtual/misc/eprdcontrol'
ACTION=add
DEVNAME=/dev/eprdcontrol
DEVPATH=/devices/virtual/misc/eprdcontrol
MAJOR=10
MINOR=57
SUBSYSTEM=misc
USEC_INITIALIZED=4238732006
Unload module index

alextk ()

а тулзе не надо дать какой-то сетап, запустить какую-нить утильку, чтобы она тебе девайс создала? далеко не каждый драйвер сам по себе стартует и создаёт девайсы. тем более виртуальные.

Iron_Bug ★★★★★ ()
Ответ на: комментарий от Iron_Bug

Этот должен. Получилось сделать ноду руками mknod /dev/eprdcontrol c 10 57.

static struct miscdevice _eprd_misc = {
	.minor = MISC_DYNAMIC_MINOR,
	.name = "eprdcontrol",
	.nodename = "/dev/eprdcontrol",
	.fops = &_eprd_ctl_fops
};

static int __init eprd_init(void)
{
	int r;
	/* First register out control device */

	EPRDINFO("version    : %s", EPRD_VERSION);
	r = misc_register(&_eprd_misc);
	if (r) {
		EPRDERR("misc_register failed for control device");
		return r;
	}
	/*
	 * Alloc our device names
	 */
	init_devicenames();
	mutex_init(&ioctl_mutex);
	zeroblock = kmalloc(BLKSIZE, GFP_KERNEL);
	memset(zeroblock, 0, BLKSIZE);
	return 0;
}

...

module_init(eprd_init);

Должна создаваться нода-то.

alextk ()
Ответ на: комментарий от true_admin

Да, это помогло.

Тулза не моя, я её лишь под >=3.16 допиливал. А нормальных примеров misc_register не нашёл.

Спасибо ещё раз обоим.

alextk ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.