È possibile chiamare ioctl
da un modulo del kernel Linux? Qualcuno può fornire un esempio di come viene utilizzato?Come usare ioctl() dallo spazio del kernel in Linux?
risposta
Puoi provare a chiamare sys_ioctl
.
Viene esportato se il kernel è compilato con CONFIG_COMPAT
.
Oppure, se si dispone del driver del dispositivo struct file_operations
, è possibile chiamare direttamente il gestore ioctl
.
Tuttavia, l'handle di ioctl si aspetterebbe che i parametri del puntatore si trovino nello spazio degli indirizzi del processo attualmente in esecuzione, non nello spazio degli indirizzi del kernel. copy_from_user
verrebbe utilizzato per leggerli. Se si danno dei puntatori allo spazio degli indirizzi del kernel, copy_from_user
avrà esito negativo. Non vedo come potresti aggirare questo.
Edit:
Se si chiamerà gestore ioctl tra sottostante Codice di copy_from_user
non potrà mai fallire.
mm_segment_t fs;
fs = get_fs(); /* save previous value */
set_fs (get_ds()); /* use kernel limit */
/* system calls can be invoked */
set_fs(fs); /* restore before returning to user space */
Il gestore ioctl in file_operations è stato deprecato. Riesci a capire il modo più nuovo di usare ioctl? – iammurtaza
Puoi elaborare come get_fs() e set_fs() magicamente permettono allo spazio del kernel di eseguire chiamate di sistema, e come dopo questo "copy_from_user()" non crea più un problema? –
'set_fs' influenza il meccanismo che convalida che gli indirizzi passati a' copy_to_user' sono effettivamente nello spazio degli indirizzi dell'utente corrente. Fa pensare al kernel che lo spazio degli indirizzi corrente sia lo spazio degli indirizzi del kernel. – ugoren
- 1. Shutdown (incorporato) linux dallo spazio del kernel
- 2. Configura i parametri del trigger LED dallo spazio del kernel
- 3. btrfs ioctl: ottiene i checksum dei file dallo spazio utente
- 4. Come mmap un buffer del kernel Linux nello spazio utente?
- 5. Esegui un programma nello spazio del kernel in Linux
- 6. In che modo Linux sa quale ioctl deve chiamare?
- 7. Come accedere alla memoria dello spazio utente dal kernel Linux?
- 8. mprotect() come funzionalità all'interno del kernel Linux
- 9. Simboli del kernel Linux esportati
- 10. Come config da immagine del kernel Linux
- 11. Come codificare un modulo del kernel Linux?
- 12. Come velocizzare la compilazione del kernel Linux?
- 13. come utilizzare CryptoAPI nel kernel Linux 2.6
- 14. Programmazione del modulo del kernel Linux: makefile
- 15. Spazio utente vs driver di spazio kernel
- 16. Posso usare strtok() in un modulo Kernel Linux?
- 17. Come viene mappata l'anatomia della memoria Spazio del kernel
- 18. streaming DMA in PCIE driver del kernel linux
- 19. Come caricare automaticamente un modulo del kernel in Gentoo Linux?
- 20. Come configurare il kernel Linux in Buildroot?
- 21. Organizzazione delle intestazioni del kernel Linux
- 22. Copertura del codice kernel Linux - GCOV
- 23. Stile di codifica del kernel Linux
- 24. dove viene eseguito il codice del driver del dispositivo? Spazio del kernel o spazio utente?
- 25. per lo sviluppo del kernel linux
- 26. Compilare l'errore del kernel Linux xt_CONNMARK.h
- 27. Kernel Linux Invalidazione voci TLB
- 28. Linux segnale di modulo del kernel sul processo userspace ucciso
- 29. unlocked_ioctl vs ioctl normale
- 30. In quale contesto Kernel Thread viene eseguito in Linux?
In realtà non si dovrebbe fare cose del genere. Se fai una ricerca, troverai del codice dipendente dall'implementazione per come eseguire un syscall arbitrario dallo spazio del kernel, ma per favore pensa se c'è un modo per realizzare il tuo vero obiettivo senza rompere il modello in questo modo. –