Добрый день!
Использую ФПСУ/IP-клиент под Fedora 31. После обновления ядра с ветки 5.5 до 5.6, а потом и 5.7, не проходит сборка модуля ядра:
Поиск в Интернет дал решение:
После чего модуль собирается и работает.
Планируется ли внести изменение для ядер > 5.5 в официальную сборку ?
Использую ФПСУ/IP-клиент под Fedora 31. После обновления ядра с ветки 5.5 до 5.6, а потом и 5.7, не проходит сборка модуля ядра:
Код:
[root@hp14 Drivers]# make
make -C /lib/modules/5.7.9-100.fc31.x86_64/build M=/usr/lib/Amicon_ip-client/Drivers modules
make[1]: вход в каталог «/usr/src/kernels/5.7.9-100.fc31.x86_64»
CC [M] /usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.o
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c: В функции «KERN_DrvGetCurFtime»:
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c:353:24: ошибка: неизвестное имя типа «time_t»; имелось в виду «ktime_t»?
353 | struct rtc_time ctm; time_t ctime = get_seconds(); rtc_time_to_tm(ctime, &ctm);
| ^~~~~~
| ktime_t
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c:353:54: ошибка: неявная декларация функции «rtc_time_to_tm»; имелось в виду «rtc_ktime_to_tm»? [-Werror=implicit-function-declaration]
353 | struct rtc_time ctm; time_t ctime = get_seconds(); rtc_time_to_tm(ctime, &ctm);
| ^~~~~~~~~~~~~~
| rtc_ktime_to_tm
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c:356:21: ошибка: размер «mtm» в памяти неизвестен
356 | struct timespec mtm; getnstimeofday(&mtm);
| ^~~
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c:356:26: ошибка: неявная декларация функции «getnstimeofday» [-Werror=implicit-function-declaration]
356 | struct timespec mtm; getnstimeofday(&mtm);
| ^~~~~~~~~~~~~~
/usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.c:356:21: предупреждение: неиспользуемая переменная «mtm» [-Wunused-variable]
356 | struct timespec mtm; getnstimeofday(&mtm);
| ^~~
cc1: некоторые предупреждения считаются ошибками
make[2]: *** [scripts/Makefile.build:267: /usr/lib/Amicon_ip-client/Drivers/AmiNFFltKern.o] Ошибка 1
make[1]: *** [Makefile:1732: /usr/lib/Amicon_ip-client/Drivers] Ошибка 2
make[1]: выход из каталога «/usr/src/kernels/5.7.9-100.fc31.x86_64»
make: *** [Makefile:41: all] Ошибка 2
Поиск в Интернет дал решение:
Код:
[root@hp14 Drivers]# diff -ui AmiNFFltKern.c.orig AmiNFFltKern.c.patched
--- AmiNFFltKern.c.orig 2020-07-17 00:03:19.302795909 +1000
+++ AmiNFFltKern.c.patched 2020-07-23 12:51:48.826571218 +1000
@@ -350,10 +350,10 @@
void __calling_convention KERN_Sleep(int ms) { msleep(ms); }
#include <linux/rtc.h>
void __calling_convention KERN_DrvGetCurFtime(int *sec, int *min, int *hour, int *mday, int *mon, int *year, unsigned long long *microsec) {
- struct rtc_time ctm; time_t ctime = get_seconds(); rtc_time_to_tm(ctime, &ctm);
+ struct rtc_time ctm; ktime_t ctime = get_seconds(); rtc_time64_to_tm(ctime, &ctm);
*sec = ctm.tm_sec; *min = ctm.tm_min; *hour = ctm.tm_hour; *mday = ctm.tm_mday; *mon = ctm.tm_mon; *year = ctm.tm_year + 1900;
if(microsec) {
- struct timespec mtm; getnstimeofday(&mtm);
+ struct timespec64 mtm; ktime_get_ts64(&mtm);
*microsec = ((unsigned long long)mtm.tv_sec) * 1000000 + (((unsigned long long)mtm.tv_nsec) >> 10);
}
}
После чего модуль собирается и работает.
Планируется ли внести изменение для ядер > 5.5 в официальную сборку ?