Codeanpassung für aacraid Linux Treiber für Kernel 4.x

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/codeanpassung-fuer-aacraid-linux-treiber-fuer-kernel-4-x_246745/page_1 - zur Vollversion wechseln!


The Prophet schrieb am 27.07.2016 um 11:32

Hi liebe Leute,

nachdem der Adaptec / Microsemi Support leider nicht in der Lage ist mir zu helfen und ich ein Programmier Noob bin, hätte ich eine bitte an euch. Das DKMS Package von Adaptec läuft nur bis Kernel 3.x. Jemand im Debian Forum hat die Sourcen angepasst, damit sie auch unter Kernel 4.x kompiliert werden können. Jedoch habe ich aufgrund eines neueren Compilers das Problem das Package bei mir zum laufen zu bringen (obwohl es ws. nur kleine Probleme sind). Hier mal das make.log:

Code: BASH
DKMS make.log for aacraid-1.2.1.50663 for kernel 4.6.4-gentoo (x86_64) Wed Jul 27 09:41:41 CEST 2016 make -C /lib/modules/4.6.4-gentoo/build M=/var/lib/dkms/aacraid/1.2.1.50663/build modules make[1]: Entering directory '/usr/src/linux-4.6.4-gentoo' CC [M] 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.o /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:3366:25: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] .change_queue_depth = aac_change_queue_depth, ^ 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:3366:25: note: (near initialization for 'aac_driver_template.change_queue_depth') 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:3386:5: error: unknown field 'use_blk_tags' specified in initializer .use_blk_tags = 1, ^ 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_probe_one': /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4013:13: error: implicit declaration of function 'scsi_init_shared_tag_map' [-Werror=implicit-function-declaration] error = scsi_init_shared_tag_map(shost, shost->can_queue); ^ 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_error_detected': 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4313:3: error: implicit declaration of function 'aac_release_resources' [-Werror=implicit-function-declaration] aac_release_resources(aac); ^ /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_resume': 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4389:2: error: implicit declaration of function 'aac_acquire_resources' [-Werror=implicit-function-declaration] aac_acquire_resources(aac); ^ cc1: some warnings being treated as errors make[2]: *** [scripts/Makefile.build:292: 
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.o] Error 1 make[1]: *** [Makefile:1429: _module_/var/lib/dkms/aacraid/1.2.1.50663/build] Error 2 make[1]: Leaving directory '/usr/src/linux-4.6.4-gentoo' make: *** [Makefile:202: aacraid_dkms_build] Error 2

Der nette Herr aus dem Debian Forum hat mir auch folgendes gesagt:

Zitat
Für aac_change_queue_depth musst du die Präprozessor-Anweisung abändern, dass er ab der Kernel-Version 4.0 in den else-Zweig geht. Für die anderen Fehler sollten Funktionsdeklarationen am Anfang der Datei reichen.

Das ist zwar ein ziemlich genauer Hinweis, trotzdem schaffe ich das leider nicht umzusetzen. Vl. erbarmt sich jemand und kann mir helfen. Anbei das c file um das es geht.

Danke im Voraus!
Gruß Christian


mat schrieb am 27.07.2016 um 12:00

Ich hab mir den Code mal angesehen. Mit sovielen unbekannten Include-Files kann man leider nur per Trail and Error an die Sache herangehen.

Aber ich hab mal so ziemlich alles gemacht, was dir empfohlen wurde. Es gibt nur ein Problem: scsi_init_shared_tag_map - die Funktion sollte eigentlich problemlos in scsi_tcq.h deklariert und definiert werden (ist eine inline-Funktion direkt im Header-File). Kannst du mal den Inhalt von der Datei auch posten?

Hier das neue c-File, versuch mal und schau, welche Fehler nun weg sind:


The Prophet schrieb am 27.07.2016 um 13:48

Hi, danke! Das File scsi_tcq.h ist nicht im package dabei!? Ich werde gleich testen.

Sieht jetzt so aus:

Code: BASH
DKMS make.log for aacraid-1.2.1.50663 for kernel 4.6.4-gentoo (x86_64) Wed Jul 27 13:56:20 CEST 2016 make -C /lib/modules/4.6.4-gentoo/build M=/var/lib/dkms/aacraid/1.2.1.50663/build modules make[1]: Entering directory '/usr/src/linux-4.6.4-gentoo' CC [M] /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:3390:5: error: unknown field 'use_blk_tags' specified in initializer .use_blk_tags = 1, ^ /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_probe_one': /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4017:13: error: implicit declaration of function 'scsi_init_shared_tag_map' [-Werror=implicit-function-declaration] error = scsi_init_shared_tag_map(shost, shost->can_queue); ^ /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_error_detected': /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4317:3: error: implicit declaration of function 'aac_release_resources' [-Werror=implicit-function-declaration] aac_release_resources(aac); ^ /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_resume': /var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4393:2: error: implicit declaration of function 'aac_acquire_resources' [-Werror=implicit-function-declaration] aac_acquire_resources(aac); ^ cc1: some warnings being treated as errors make[2]: *** [scripts/Makefile.build:292: /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o] Error 1 make[1]: *** [Makefile:1429: _module_/var/lib/dkms/aacraid/1.2.1.50663/build] Error 2 make[1]: Leaving directory '/usr/src/linux-4.6.4-gentoo' make: *** [Makefile:202: aacraid_dkms_build] Error 2


mat schrieb am 27.07.2016 um 14:01

Strange, weil die sollte ein Teil von Linux sein: https://github.com/torvalds/linux/b...scsi/scsi_tcq.h

Hat das make-Script den Include-Path der Kernel-Sourcen drinnen?


The Prophet schrieb am 27.07.2016 um 14:07

ah ok, dachte du meinst vom aacraid package selbst.

Makefile und scsi_tcq.h anbei.


mat schrieb am 27.07.2016 um 15:01

Ok, der Fehler mit scsi_init_shared_tag_map liegt daran, dass das define drumrum falsch ist. Die Funktion gibt es nämlich nur im Kernel-Source von < 4.4, es steht aber 4.7.


The Prophet schrieb am 27.07.2016 um 15:07

das hab dann wohl ich verbrochen. Ich bessere das mal aus.


mat schrieb am 27.07.2016 um 15:19

Nimm dieses File, das sollte passen:


mat schrieb am 27.07.2016 um 15:19

Die "implicit declaration"-Fehler kommen weil CONFIG_PM nicht im Make-Script definiert ist.


The Prophet schrieb am 27.07.2016 um 15:24

jetzt sieht es schon besser aus:

Code: BASH
DKMS make.log for aacraid-1.2.1.50663 for kernel 4.6.4-gentoo (x86_64)
Wed Jul 27 15:23:12 CEST 2016
make -C /lib/modules/4.6.4-gentoo/build M=/var/lib/dkms/aacraid/1.2.1.50663/build modules
make[1]: Entering directory '/usr/src/linux-4.6.4-gentoo'
  CC [M]  /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_error_detected':
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4313:3: error: implicit declaration of function 'aac_release_resources' [-Werror=implicit-function-declaration]
   aac_release_resources(aac);
   ^
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_resume':
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4389:2: error: implicit declaration of function 'aac_acquire_resources' [-Werror=implicit-function-declaration]
  aac_acquire_resources(aac);
  ^
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:292: /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o] Error 1
make[1]: *** [Makefile:1429: _module_/var/lib/dkms/aacraid/1.2.1.50663/build] Error 2
make[1]: Leaving directory '/usr/src/linux-4.6.4-gentoo'
make: *** [Makefile:202: aacraid_dkms_build] Error 2


mat schrieb am 27.07.2016 um 15:24

Hab dir das Makefile angepasst. Ich hab die Präprozessoranweisung (-DCONFIG_PM) aber in die COMMON_FLAGS geworfen. Wahrscheinlich sollte man eher abfragen, ob die entsprechenden Prerequisites dafür vorhanden sind und es zu den AAC_FLAGS dazugeben. Aber probiers mal:


The Prophet schrieb am 27.07.2016 um 15:28

Code: BASH
DKMS make.log for aacraid-1.2.1.50663 for kernel 4.6.4-gentoo (x86_64)
Wed Jul 27 15:27:32 CEST 2016
make -C /lib/modules/4.6.4-gentoo/build M=/var/lib/dkms/aacraid/1.2.1.50663/build modules
make[1]: Entering directory '/usr/src/linux-4.6.4-gentoo'
  CC [M]  /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_error_detected':
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4313:3: error: implicit declaration of function 'aac_release_resources' [-Werror=implicit-function-declaration]
   aac_release_resources(aac);
   ^
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c: In function 'aac_pci_resume':
/var/lib/dkms/aacraid/1.2.1.50663/build/linit.c:4389:2: error: implicit declaration of function 'aac_acquire_resources' [-Werror=implicit-function-declaration]
  aac_acquire_resources(aac);
  ^
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:292: /var/lib/dkms/aacraid/1.2.1.50663/build/linit.o] Error 1
make[1]: *** [Makefile:1429: _module_/var/lib/dkms/aacraid/1.2.1.50663/build] Error 2
make[1]: Leaving directory '/usr/src/linux-4.6.4-gentoo'
make: *** [Makefile:202: aacraid_dkms_build] Error 2


mat schrieb am 27.07.2016 um 15:41

Hast du eigentlich als Kernel-Option CONFIG_PM=y angegeben? Das ist das Power Management für alles mögliche im Kernel. Wenn nicht, dann könnte man die beiden Funktionen sowieso rausschmeißen.


mat schrieb am 27.07.2016 um 17:22

Hier ist noch eine Version von linit.c, die den Fehler mit den impliziten Funktionsdeklarationen behebt, wenn CONFIG_PM nicht aktiviert ist. Bzw. werden diese Funktion aktiviert, wenn CONFIG_PM als Präprozessoranweisung im Makefile landet:


The Prophet schrieb am 29.07.2016 um 10:57

danke, bekomme aber noch immer die gleichen Fehler wenn ich das modul laden möchte.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025