I can’t compile dahdi anymore after today upgrade to fedora Kernel 5.0.3-200.fc29.x86_64.
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.o
/usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.c: In function ‘Oct6100UserGetTime’:
/usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.c:38:2: error: implicit declaration of function ‘do_gettimeofday’; did you mean ‘do_settimeofday64’? [-Werror=implicit-function-declaration]
do_gettimeofday(&tv);
^~~~~~~~~~~~~~~
do_settimeofday64
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:277: /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.o] Error 1
make[2]: *** [scripts/Makefile.build:492: /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x] Error 2
make[1]: *** [Makefile:1557: module /usr/src/phones/dahdi-linux-master/drivers/dahdi] Error 2
make[1]: Leaving directory ‘/usr/src/kernels/5.0.3-200.fc29.x86_64’
make: *** [Makefile:74: modules] Error 2
A little help requested please.
Thanks.
Primary error messages needed, not just the make statuses.
[root@ns dahdi-linux-master]# make
make -C drivers/dahdi/firmware firmware-loaders
make[1]: Entering directory ‘/usr/src/phones/dahdi-linux-master/drivers/dahdi/fi
rmware’
make[1]: Leaving directory ‘/usr/src/phones/dahdi-linux-master/drivers/dahdi/fir
mware’
make -C /lib/modules/5.0.3-200.fc29.x86_64/build SUBDIRS=/usr/src/phones/dahdi-l
inux-master/drivers/dahdi DAHDI_INCLUDE=/usr/src/phones/dahdi-linux-master/inclu
de DAHDI_MODULES_EXTRA=" " HOTPLUG_FIRMWARE=yes modules DAHDI_BUILD_ALL=m
make[1]: Entering directory ‘/usr/src/kernels/5.0.3-200.fc29.x86_64’
Makefile:189: ================= WARNING ================
Makefile:190: ‘SUBDIRS’ will be removed after Linux 5.3
Makefile:191: Please use ‘M=’ or ‘KBUILD_EXTMOD’ instead
Makefile:192: ==========================================
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_adpcm_chan.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_channel.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_chip_open.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_chip_stats.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_conf_bridge.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_debug.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_events.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_interrupts.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_memory.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_miscellaneous.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_mixer.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_phasing_tsst.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_playout_buf.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_remote_debug.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_tlv.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_tone_detection.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_tsi_cnct.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/octdeviceapi/
oct6100api/oct6100_api/oct6100_tsst.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/apilib/bt/oct
api_bt0.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/apilib/largma
th/octapi_largmath.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/apilib/llman/
octapi_llman.o
CC [M] /usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.
o
/usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.c: In func
tion ‘Oct6100UserGetTime’:
/usr/src/phones/dahdi-linux-master/drivers/dahdi/oct612x/oct612x-user.c:38:2: er
ror: implicit declaration of function ‘do_gettimeofday’; did you mean ‘do_
settimeofday64’? [-Werror=implicit-function-declaration]
do_gettimeofday(&tv);
^~~~~~~~~~~~~~~
do_settimeofday64
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:277: /usr/src/phones/dahdi-linux-master/dri
vers/dahdi/oct612x/oct612x-user.o] Error 1
make[2]: *** [scripts/Makefile.build:492: /usr/src/phones/dahdi-linux-master/dri
vers/dahdi/oct612x] Error 2
make[1]: *** [Makefile:1557: module/usr/src/phones/dahdi-linux-master/drivers/
dahdi] Error 2
make[1]: Leaving directory ‘/usr/src/kernels/5.0.3-200.fc29.x86_64’
make: *** [Makefile:74: modules] Error 2
Same problem with 5.0.4-200.fc29.x86_64
Hi David,
What do you mean by “Primary error messages”?
Looks like it was there, but so garbled that I didn’t see it when skimming the log. It was the one about the implicit declaration of do_gettimeofday.
Whilst it is good to have the full log context, it also helps to extract just the most likely to be relevant part, as people don’t spend much time looking through logs.
Generally if you are building for an unsupported OS, you will need to look into the code itself. Start by seeing if there is such a function in the new kernel, and if not research how it has been replaced, then modify the source code accordingly. I’d only go through that process if I actually needed to use that version of DAHDI with that kernel, in real life.
The problem is that do_gettimeofday() was deprecated and is now removed from linux kernel 5.
Fixing linux time limit 2038.
It’s now replaced with ktime_get_real_ts64() or ktime_get_seconds().
With this structure:
struct timespec64 {
time64_t tv_sec; /* seconds /
long tv_nsec; / nanoseconds */
};
Just ran into this one with kernel version 5.0.10-1.el7.elrepo.x86_64
Seeing the original do_gettimeofday was a wrapper I just wrote my own and dropped it into the files I was getting errors about.
.c files
void do_gettimeofday(struct timeval *tv)
{
struct timespec64 ts;
ktime_get_real_ts64(&ts);
tv->tv_sec = ts.tv_sec;
tv->tv_usec = ts.tv_nsec;
}
.h file
void do_gettimeofday(struct timeval *tv);
As one community member to another it’d be great if you submitted a patch with this to the Asterisk project.
There are patches here:
https://issues.asterisk.org/jira/browse/DAHLIN-368
tv->tv_usec = ts.tv_nsec/1000;