compilazione di un modulo del kernel a 32 bit risultati del kernel Linux in__udivdi3 indefinito - come trovare il codice che lo utilizza?
"__udivdi3" [mymodule.ko] undefined!
"__umoddi3" [mymodule.ko] undefined!
Tutto è bene su sistemi a 64 bit. Per quanto ne so, la ragione di ciò è che la divisione integer a 64 bit e il modulo non sono supportati all'interno di un kernel Linux a 32 bit.
Come trovare il codice che rilascia le operazioni a 64 bit. Sono difficili da trovare manualmente perché non riesco facilmente a verificare se un "/" è largo 32 bit o 64 bit. Se le funzioni "normali" non sono definite, posso annullarle, ma qui non è possibile. C'è un altro buon modo per cercare i riferimenti? Qualche tipo di "codice macchina grep"?
Il modulo è composto da alcune migliaia di righe di codice. Non riesco davvero a controllare ogni riga manualmente.
per aggiungere un po 'di informazioni, do_div() è definito nell'intestazione. –
Sembra piuttosto ridicolo che Linux insista nel farti usare una brutta funzione per dividere, piuttosto che implementare semplicemente '__udivdi3' ecc. Sono facili da implementare, e se lo fai in asm, saranno molto più efficienti di le versioni di libgcc (forse 2-3 volte più veloce). –
@WilliBallenthin anche dopo aver usato, affrontare questo problema.so qualcuno mi suggerisce cosa fare per risolvere questo problema? –