Как определить макрос при построении модуля ядра?

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Как определить макрос при построении модуля ядра?

Сообщение жучара »

Друзья! Жизнь сложилась так, что мне нужно выполнить команду (модуль ядра собрать):

Shell

$ sudo dkms build -m virtualbox -v 5.2.24 -k 5.10.0-1038.40-generic > /dev/null
Error! Bad return status for module build on kernel: 5.10.0-1038.40-generic (x86_64)
Consult /var/lib/dkms/virtualbox/5.2.24/build/make.log for more information.
$
Еcли разбираться с файлом /var/lib/dkms/virtualbox/5.2.24/build/make.log и лезть в исходники, то можно увидеть, что там компиляция идёт и не худо было бы определить макрос в файле /var/lib/dkms/virtualbox/5.2.24/build/vboxdrv/linux/SUPDrv-linux.c кода. Вот ошибка:

Shell

/var/lib/dkms/virtualbox/5.2.24/build/vboxdrv/linux/SUPDrv-linux.c:182:5: error: unknown field ‘ioctl’ specified in initializer
ioctl: VBoxDrvLinuxIOCtl,

А вот кучосек кода, где ошибка проявляется.
/** The file_operations structure. */
static struct file_operations gFileOpsVBoxDrvSys =
{
owner: THIS_MODULE,
open: VBoxDrvLinuxCreateSys,
release: VBoxDrvLinuxClose,
#ifdef HAVE_UNLOCKED_IOCTL
unlocked_ioctl: VBoxDrvLinuxIOCtl,
#else
ioctl: VBoxDrvLinuxIOCtl,
#endif
};
...Естессно, если тупо в лоб перед этим кодом определить #define HAVE_UNLOCKED_IOCTL 1 то ничего не получается, при каждой команде "dkms" этот макрос куда-то исчезает, файл /var/lib/dkms/virtualbox/5.2.24/build/vboxdrv/linux/SUPDrv-linux.c как будет заново переписывается.

Где-то этот макрос определить надо. Где же? man dkms говорит, что есть какой-то dkms.conf, а у меня их даже три:

Shell

$ sudo find / -type f -name "dkms.conf" ! -path "/home*" 2>/dev/null
/var/lib/dkms/virtualbox/5.2.24/build/dkms.conf
/etc/modprobe.d/dkms.conf
/usr/src/virtualbox-5.2.24/dkms.conf
$
В каждый из них я дописал строчку
HAVE_UNLOCKED_IOCTL=1
Бесполезно. Всё равно эта же ошибка "unknown field ‘ioctl’"
В общем, спасибо, кто откликнется. Астралинукс Орёл 2.12.44
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21114
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как определить макрос при построении модуля ядра?

Сообщение Bizdelnick »

Ответ был дан в https://unixforum.org/viewtopic.php?p=1351485#p1351485:
Bizdelnick писал:
22.02.2022 15:20
по запросу "HAVE_UNLOCKED_IOCTL" сразу же находится тикет #19845, в котором есть патч, который можно попытаться адаптировать к Вашей версии. Также можно не страдать и собрать более актуальную версию, где проблема совместимости с современными ядрами решена.
Зачем плодить темы с одним и тем же вопросом?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Re: Как определить макрос при построении модуля ядра?

Сообщение жучара »

Bizdelnick писал:
08.04.2022 01:24
Ответ был дан в Re: Устанавливаю пакет virtualbox неудачно и правлю неправильный файл, а потом при установке пакета он снова откатываетс:
Bizdelnick писал:
22.02.2022 15:20
по запросу "HAVE_UNLOCKED_IOCTL" сразу же находится тикет #19845, в котором есть патч, который можно попытаться адаптировать к Вашей версии. Также можно не страдать и собрать более актуальную версию, где проблема совместимости с современными ядрами решена.
Зачем плодить темы с одним и тем же вопросом?
не был дан. Там совсем про другое была тема. Тот ответ предполагал, не определение макроса, а перелопачивание всего и вся, наложение сразу нескольких тык скыть патчей не понять куда. Да и случай-то не мой в любом случае, там, как я могу судить ядро 5.9. а у меня 5.10. А мне нужно просто раз- и определить макрос. Всё. Я бы хоть на будущее научился его определять правильно в чужих проектах. И да я не понимаю, почему мне нужно переделывать ядро если я собираю невесть что, лишь бы собралось.

...Пока же сюда прописал просто:

Shell

$ cat /usr/src/virtualbox-5.2.24/include/revision-generated.h
#define VBOX_SVN_REV 128122
#define HAVE_UNLOCKED_IOCTL 1
$
Ошибка пока исчезла. Ерунда конечно, но я не знаю, как правильно, а кто знает, тот молчит.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21114
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как определить макрос при построении модуля ядра?

Сообщение Bizdelnick »

жучара писал(а):
08.04.2022 19:50
Тот ответ предполагал, не определение макроса, а перелопачивание всего и вся, наложение сразу нескольких тык скыть патчей не понять куда.
А по-другому и не получится.
жучара писал(а):
08.04.2022 19:50
А мне нужно просто раз- и определить макрос. Всё. Я бы хоть на будущее научился его определять правильно в чужих проектах.
Не нужно его определять в чужих проектах, не разобравшись, где, как и зачем он там определяется изначально. А если разобраться, то выяснится, что в разных проектах всё по-разному, и, как правило, решаются подобные задачи не так просто, как Вам хочется (не насильственным переопределением макроса, то есть).
Добавлено (21:28):
жучара писал(а):
08.04.2022 19:50
там, как я могу судить ядро 5.9. а у меня 5.10
Со всеми более новыми ядрами будет та же самая ошибка. Не исключено, что ещё и другие добавятся, конечно.
Добавлено (21:31):
жучара писал(а):
08.04.2022 19:50
я не понимаю, почему мне нужно переделывать ядро
Где это я предлагал Вам переделывать ядро?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1056
ОС: астралинукс

Re: Как определить макрос при построении модуля ядра?

Сообщение жучара »

Bizdelnick писал:
08.04.2022 21:24
Где это я предлагал Вам переделывать ядро?
зачем мне вам отвечать? Я чисто и честно пытался что-то там объяснить. И что же в ответ?
Bizdelnick писал:
22.02.2022 15:20
Вы серьёзно или шутите?
Bizdelnick писал:
23.02.2022 14:07
Вы надо мной пытаетесь издеваться или над самим собой?
Знаем мы, как вам отвечать. Нет уж. Пусть всё идёт, как идёт.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21114
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как определить макрос при построении модуля ядра?

Сообщение Bizdelnick »

iУведомление от модератора Bizdelnick
Тема закрыта поту что, во-первых, дублирует обсуждавшийся в другой теме вопрос, во-вторых, из-за нежелания ТС понимать данные ему ответы. Если кому есть что добавить — просьба продолжать в Устанавливаю пакет virtualbox неудачно и правлю неправильный файл, а потом при установке пакета он снова откатывается на.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: