Ich versuche einen Treiber zu reparieren, der im Kernel 3.16.0-69 auf d_alias oder d_u.d_alias verweist. Das Makro sucht nach den Kernel-Versionen und verwendet die entsprechende Version.C Preprozessor KERNEL_VERSION Referenz Fehlerkorrektur
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) || LINUX_VERSION_CODE == KERNEL_VERSION(3,12,49) || LINUX_VERSION_CODE == KERNEL_VERSION(3,16,67)
//946e51f2bf37f1656916eb75bd0742ba33983c28, move d_rcu from overlapping d_child to overlapping d_alias;
//SLES 12.1 (3.12.49) back port it too
dentry = hlist_entry(p, struct dentry, d_u.d_alias);
#else
dentry = hlist_entry(p, struct dentry, d_alias);
#endif
Das Problem, das ich habe, ist, dass, wenn ich KERNEL_VERSION (3,16,0) es für 3.16.0-69 aber Pausen für 3.16.0-30 funktioniert. Wie kann ich den Bugfix-Teil des Kernels, die 69 oder 30 in diesem Beispiel, referenzieren. Ich habe es versucht und es funktioniert nicht.
Ich versuche, dies richtig zu beheben, wie ich dies beibehalten muss, bis der Anbieter es behebt.
'0-69' ist' -69', die Werte sind ganze Zahlen. Sie können Versionen, die klein sind, nicht mit diesem Makro vergleichen –
[getting-kernel-version-from-linux-kernel-modul-at-runtime] (http://stackoverflow.com/questions/8030758/getting-kernel-version- from-linux-kernel-modul-at-runtime/8030951 # 8030951) führte mich zu folgendem. '(LINUX_VERSION_CODE> = KERNEL_VERSION (3,16,0) && UTS_UBUNTU_RELEASE_ABI> 30)'. Nicht sicher, ob das der beste Weg ist – stephenc01
Muss es zur Kompilierzeit getan werden? – Harry