So rufen Sie IOCTL vom Kernel Space im Linux-Kernel nach Version 5.18 und für 64-Bit-Bogen anLinux

Linux verstehen
Guest
 So rufen Sie IOCTL vom Kernel Space im Linux-Kernel nach Version 5.18 und für 64-Bit-Bogen an

Post by Guest »

Guten Morgen,
Ich versuche, einen Linux -Geräte -Treiber aus der vorherigen Version (4.19) in den letzten Kerneln wieder aufzubauen, nämlich 6,1.22 auf eingebetteten Plattformen, ARM64 Arch.
Der Treiber verwalten ein TTY-Gerät. /p>
Der folgende Code versucht, die Verwaltung der Verwendung zusammenzufassen: < /p>

Code: Select all

    char device_name = "/dev/my-tty";
int open_mode = O_RDWR | O_NOCTTY;
struct file * file =  filp_open(device_name, open_mode, 0);
/* ... */
struct ktermios *ntermios;
int ldisc;

/* ... something on ldisc and ntermios ... */

fs = get_fs();
set_fs(get_ds());
int retval = file->f_op->unlocked_ioctl(file, TCSETS, (unsigned long)&ntermios));
set_fs(fs);

/* ... */

fs = get_fs();
set_fs(get_ds());
int retval = file->f_op->unlocked_ioctl(file, TIOCSETD, (unsigned long)&ldisc));
set_fs(fs);

/* ... */
In beiden Fällen beträgt der Rückgabewert der beiden Aufrufe an Unlocked_ioctl -14 (

Code: Select all

EFAULT< /code> /schlechte Adresse).
Das ist im Vorhandensein von Funktionen copy_from_user () < /code>, ... Das schlägt einfach fehl In mehreren Forum fand ich mehrere Details über die Entfernung von "set_fs ()"-Tanz, aber nichts über Lösung oder alternative Ansätze. Folgungen:

[*]https://lwn.net/articles/832121/
[*] Abschreibung von Kraft_Uaccess_Begin () in Linux KERNEL 5.19 /6.0? () 
und force_uaccess_end () , get_ds () , set_ds () , get_fs () sowie eingeben mm_segment_t sind nicht noch mehr vorhanden (zumindest für ARM64 -Arch). Starten Sie ein Gerät, wie ein Tty, aus Kernelraum?
Ist es noch möglich? > -dance? Ist der Ansatz, wenn überhaupt, völlig anders? /> < /ul>
Jeder Kommentar wird geschätzt. t erkannte den Typ einer möglichen Lösung/Arbeit.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post