Ich schreibe ein LKM und muss herausfinden, wo ein bestimmter Symlink hinweist. Grundsätzlich brauche ich die Funktionalität des syscall readlinkat
(oder readlink
) aber im Kernel-Space. Gibt es einen einfachen Weg, dies zu tun?
Die direkte Verwendung von readlinkat
funktioniert bei mir nicht, ich bekomme immer EFAULT (ich vermute, das liegt daran, dass mein Puffer offensichtlich im Kernel-Speicher und nicht im User-Space ist).
Erstens können Sie keine User-Space-Systemaufrufe ( readlinkat()
oder readlink()
) direkt in Ihrem Kernel-Modul verwenden. Stattdessen müssen Sie die exportierte Funktion / das Symbol im Kernel-Bereich verwenden.
Als nächstes möchten Sie vielleicht in die struct inode_operations schauen, die für die Dateisystem, das Sie verwenden. Sehen Sie sich auch generic_readlink()
an, die intern vfs_readlink()
aufrufen.
Tags und Links c linux-kernel symlink