Bonjour à tous !!
Pour ceux qui suivent, ce journal fait suite à un autre demandant le soutien de personnes pour développer un driver.
Finalement, ce driver existait déja, et on peut d'ailleurs le trouver sur
http://www.emota.com.br/wireless/extra/Am1771.tar.bz2(...)
Ma première question est qu'en pensez vous? Il me semble plutôt étrange, et pas forcément open source, et un pdf contenu dans le fichier possède comme entête AMD Confidential, ce qui tenderais à prouver que ce driver a été en quelque sorte "dérobé" au gentils gars d'AMD, qui font des gentils drivers pour linux.
Bref, la question n'est pas là, le driver date de Aout 2003 et est en conséquence pas du tout compatible 2.6, ce qui crée mon désarroi pour une utilisation de tous les jours (pire que rebooter pour jouer sous windows, rebooter sur un 2.4 pour utiliser ma carte wifi... ;-)
Donc, auriez-vous un site, ou encore mieux des conseils permettant de passer simplement un driver en 2.6, à la condition que le driver mentionné au dessus soit GPL, car on va pas se faire du mal avec des trucs illégaux...
Je suis bien tomber sur lwn.net, mais les explications ne sont pas assez étoffés à mon goût, et il n'expliquerait pas, juste par exemple, pourquoi (attention, passage effrayant), entre le 2.4 et le 2.6
la structure pci_dev à perdu un champ void* driver_data, sans raison apparente, et SURTOUT, comment réussir à ce séparer de ce champ (un peu trop utilisé à mon goût dans ce driver)
Merci.
# Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 2.
mais un drivers 2.4 recent et bien ecris ce porte facilement sur un 2.6.
Quand tu le compile tu as quoi d'autre comme message d'erreur ?
La structure pci_dev->driver_data etait une zone de stockage que le driver utilisait pour ces donnes a lui et a ca sauce.
en general on faisait un kmalloc d'une structure et l'adresse de resultat etait mémorisée dans pci_dev->driver_data.
Pour s'en debarasser remplace toute les references vers une variable globale de la structure en question.
Quand au modification du driver, si on te donnne les sources , que tu les modifie et ne les redistribue pas ca m'etonnerait que tu ai des soucis legaux.
[^] # Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
Mais cela passe par des macros, alors pour transformer cela, c'est pas forcément gagné.
merci d'aider, je te plussoie!
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
[^] # Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
# Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
J'ai réussit a me dépatouiller pour le driver_data, merci, mais maintenant, problème suivant, cette fois ci c'est du C :
On a cette structure et cette définition de type :
On a cette fonction qui utilise la structure ci-dessus :
Et on a ce message d'erreur à la compilation :
gcc -DCONFIG_KMOD -DEXPORT_SYMTAB -DMODULE -D__KERNEL__ -DLINUX -DCONFIG_PROC_FS -I/home/lastnico/Am1771/Linux/../Include -I/usr/src/linux/include -Wall -DNAUTILUS_CFG_PLATF_X86 -DNAUTILUS_CFG_PCI -DNAUTILUS_SYSTEM_IS_MAC_SME_TARGET -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=`uname -m` -malign-functions=4 -fno-omit-frame-pointer -Os -I/home/lastnico/Am1771/Linux/../Include -I/usr/src/linux/include -IInclude -I../Include -c -o obj/x86/2.6.1/Khal.o "Khal.c"
cc1: warning: -malign-functions is obsolete, use -falign-functions
Khal.c: In function `khal_create_instance':
Khal.c:641: error: request for member `blktra_spinlock' in something not a structure or union
make[1]: *** [obj/x86/2.6.1/Khal.o] Erreur 1
A votre avis, quel est la solution ?
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
[^] # Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 1.
au lieu de
spin_lock_init(&(*ppKhal_dev->blktra_spinlock));
essaie
spin_lock_init(&( (*ppKhal_dev)->blktra_spinlock));
[^] # Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
Ah oui, est-il possible de casser du matos avec un driver miteux??
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
[^] # Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 1.
ce qui m'etonnerait de la part d'amd a vrai dire
# Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
Une ligne
spin_unlock_irg(¤t->sigmask_lock);
ne passe pas la compilation, et me dit que current ne possède pas d'attribut sigmask_lock.
Le problème dans tout ca, c'est que current est une variable introuvable, dnas le sens ou elle est défini nul part dans le code, et je ne peut pas savoir si sigmask_lock est réellement contenu dans l'éventuel structure représenté par la variable current.
Est-ce une variable par défaut, ou j'ai mal cherché?
Merci.
PS: Cette variable se retrouve un peu partout dans le fichier Linux/Kthread/Kthread.c pour les précisions...
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
# Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
En faisant un insmod Nautilus.o
Il me dit :
insmod: error inserting 'Nautilus.o': -1 Invalid module format
Que faireeuuhh!!!
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
[^] # Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 1.
[^] # Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 1.
http://lwn.net/Articles/driver-porting/(...)
[^] # Re: Porter un driver sur un 2.6
Posté par Nicolas Ternisien (site web personnel) . Évalué à 1.
Ya t il une manière différente de le compiler avec le 2.6, ou pourrait on par exemple, l'intégrer au source du noyau, pour qu'il soit compiler de la même manière que les autres drivers???
Sinon, pour lwn.net, j'y suis depuis tout a l'heure, et il ne semble pas k'il y est de chose particulier à faire...
Forum Software Reviews: Comparez et testez les logiciels de forums Internet!
[^] # Re: Porter un driver sur un 2.6
Posté par TheBreton . Évalué à 1.
a la norme ton module qui viens du 2.4.xx
doc consultable en ligne a:
http://www-106.ibm.com/developerworks/linux/library/l-inside.html(...)
Driver porting to Linux 2.6
The 2.6 kernel has brought along with it a pretty significant list of changes for driver developers. This section highlights some of the important aspects of device driver porting from the 2.4 to 2.6 kernel.
First, the kernel build system has been improved for quicker builds compared with 2.4. Improved graphical tools have been added: make xconfig (requires Qt libraries) and make gconfig (requiring GTK libraries).
The following are some of the highlights of the 2.6 build system:
Creates arch-zImage and modules by default when just make is issued
For parallel make, make -jN is the preferred choice
make is not verbose by default (set KBUILD_VERBOSE=1 or use make V=1 to change this)
make subdir/ will compile all the files within subdir/ and below
make help will provide the make targets supported
make dep need not be run at any stage
The kernel module loader has also been completely reimplemented in 2.5, which means that the module-building mechanism is much different compared to 2.4. A new set of module utilities is needed for module loading and unloading (please see Resources for a download link for those). Old 2.4 makefiles will no longer work as of 2.6.
The new kernel module loader is the work of Rusty Russel. It makes use of the kernel build mechanism and produces a .ko (kernel object) module object instead of an .o module object. The kernel build system compiles the module first and then links to vermagic.o. This creates a special section in the object module that contains information like the compiler version used, the kernel version, whether kernel preemption is used, and so on.
Now let's take an example and analyze how the new kernel build system should be used to compile and load a simple module. The module concerned is a "hello world" module and is similar to 2.4 module code except that module_init and module_exit need to be used instead of init_module and cleanup_module (kernel 2.4.10 modules onwards use this mechanism). The module is named hello.c and the Makefile is as follows:
Listing 3. Example driver makefile
KERNEL_SRC = /usr/src/linux
SUBDIR = $(KERNEL_SRC)/drivers/char/hello/
all: modules
obj-m := module.o
hello-objs := hello.o
EXTRA_FLAGS += -DDEBUG=1
modules:
$(MAKE) -C $(KERNEL_SRC) SUBDIR=$(SUBDIR) modules
This makefile uses the kernel build mechanism to build the module. The compiled module will be named module.ko and is obtained by compiling hello.c and linking with vermagic. KERNEL_SRC indicates the kernel source directory and SUBDIR indicates the directory where the module is located. EXTRA_FLAGS indicate any compile-time flags that need to be given.
Once the new module (module.ko) is created, it can be loaded and unloaded by using the new module utilities. Older module utilities used in 2.4 cannot be used for loading and unloading the 2.6 kernel modules. The new module loading utility tries to minimize the occurrence of race conditions that may occur when a device is opened while the corresponding module is being unloaded, but after the module has made sure that no one is using it. One of the reasons for these race conditions is that the module usage count is manipulated within the module code itself (via MOD_DEC/INC_USE_COUNT).
In 2.6, the module need not do this step of increasing/decreasing the reference count. Instead, this is now done outside of module code. Any code that tries to reference the module has to call try_module_get(&module), and upon success can access the module; this call will fail if the module is being unloaded. Correspondingly, references to the module can be released by using module_put().
# As-tu reussi?
Posté par xavier thomas . Évalué à 1.
Aurais-tu reussi ton port?
J'ai acheté cette carte trop rapidement, alors si tu as reussi et que tu peux m'envoyer les sources modifiees je serais un homme comblé.
merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.