Puncte:0

Nu se poate utiliza/găsi gettimeofday în kernelul Ubuntu

drapel hu

Folosesc Ubuntu 20.10 cu sursa kernel-ului 5.8.0-59.66

Trebuie să obțin ora curentă a zilei (din epocă) în nucleu. Folosind fie RHEL 7.9, fie CENTOS 7, m-am bazat pe funcția gettimeofday().

Pe scurt, documentația pare să indice că funcția există în Ubuntu -

http://manpages.ubuntu.com/manpages/bionic/man2/gettimeofday.2.html

în cadrul căruia se spune să includă următoarele

   #include <sys/time.h>

Acest fișier sau de fapt directorul „sys” nu pare să existe în arborele sursă a nucleului meu. Dacă fac o „găsește” la time.h, găsesc câteva, inclusiv ~/include/linux/time.h, dar nu conține definiția funcției.

Oare imi scapa ceva aici? Sau poate există o metodă mai bună și/sau actualizată pentru a obține timpul în modul gettimeofday?

Funcționează bine pe celelalte moduri de kernel ale mele non-Ubuntu. Dar aceasta este prima mea experiență cu Ubuntu.

Am neglijat să adaug eroarea de compilare.

eroare: declarația implicită a funcției âgettimeofdayâ 
[-Werror=declarație-implicit-funcție]
 1329 | gettimeofday(&time);

Codul care utilizează această funcție este

struct tm timp;      
gettimeofday(&time);
local_time = (u32)(time.tm_sec );

Vă rugăm să rețineți că acesta nu este codul exact în versiunile RHEL și Centos. Am făcut modificări minore pe baza erorilor compilatorului, cum ar fi time.tv_sec devenit time.tm_sec și, prin urmare, nu este dovedit.

Cu toate acestea, cred că prima problemă este că nu aveți definiția pentru gettimeofday? Sau aș putea greși...

TonyB avatar
drapel za
Ne poți arăta codul tău...?
TonyB avatar
drapel za
Pe sistemul meu ubuntu 20.04, sys/time.h se află aici: ` /usr/include/x86_64-linux-gnu/sys/time.h` și conține următorul comentariu (printre altele) despre gettimeofday() ... „Această funcție în sine este semi-învechită; majoritatea apelanților ar trebui să folosească în schimb time sau clock_gettime.”
rhg910 avatar
drapel hu
Excelent. Îl voi încerca în seara asta și voi răspunde oficial mâine.
drapel us
Secțiunea 2 a paginilor de manual este pentru apeluri de sistem din spațiul utilizatorului. Astfel de funcții nu sunt, în general, disponibile în cadrul nucleului în sine. În general, modulele nucleului pot folosi numai `` și `` anteturi; `Anteturile ` nu fac parte din nucleu.
drapel us
https://stackoverflow.com/questions/50349294/getnstimeofday-is-an-implicit-declaration-in-system-call-when-linux-time-h-i sugerează că ar trebui să utilizați `getnstimeofday` din ``.
rhg910 avatar
drapel hu
Aș închide această postare așa cum mi s-a răspuns dacă aș vedea bifa la care se face referire în paginile de ajutor. În stadiul actual, răspunsul lui TonyB mă îndrumă în direcția corectă, la fel ca și al lui Nate.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.