Octopus30.net >> Les discussions >> Scripts et astuces >> [Linux] driver Realtek r8168 sur kernel 3.0 en mode fainénant
Page 1
 
 

[Linux] driver Realtek r8168 sur kernel 3.0 en mode fainénant

07/08/2011 à 19:27:09
Au cas où le driver de la carte réseau realtek r8168 ne s'installe pas avec le noyau 3.0.
Tout d'abord, récupérer le driver 8.0.024 sur le site de realtek :
http://www.realtek.com.tw/DOWNLOADS/DOWNLOADSVIEW.ASPX?LANGID=1&PNID=13&PFID=5&LEVEL=5&CONN=4&DOWNTYPEID=3&GETDOWN=FALSE#2
Extraire ce fichier :
tar -xjf r8168-8.024.00.tar.bz2

Pour réutiliser l'autoinstalleur fourni avec driver, il suffit de remplacer la ligne 36 du fichier src/Makefile :
KEXT            := $(shell echo $(KVER) | sed -ne 's/^2\.[567]\..*/k/p')o

par
KEXT            := $(shell echo $(KVER) | sed -ne 's/^3\.[0]\..*/k/p')o


Ensuite, il suffit de lancer autorun.sh pour mettre à jour le driver.

Si le module r8168 ne se charge pas correctement et que votre noyau persiste à utiliser le module r8169, il faut exclure explicitement ce dernier module :
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
15/01/2012 à 20:35:43
Cette procédure n'est plus nécessaire depuis la version 8.0.025 ou 8.0.026 puisque le driver est maintenant générique tous noyaux.

Par contre, avec le noyau 3.2, il y a un bug dans le code qui empêche sa compilation.
Une solution est de remplacer la ligne 14285 du fichier src/r8168_n.c par :
addr = ( (void *) page_address(frag->page.p)) + frag->page_offset;

Source : http://code.google.com/p/r8168/issues/detail?id=8#c3
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
28/03/2013 à 22:10:59
Le driver 8.035 ne compile pas sur un kernel 3.8.
La solution consiste à modifier 3-4 lignes du source : http://code.google.com/p/r8168/issues/detail?id=12
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
20/05/2013 à 19:44:46, Édition : 20/05/2013 à 19:45:11 par Poulpe
J'en avais marre de devoir rebooter 2 fois à chaque update de kernel pour mettre à jour le driver réseau.

Du coup, j'ai paché le script autorun.sh d'install du driver pour ne plus le faire dépendre du uname -r.

Voila donc mon nouveau autorun.sh :
#!/bin/sh

# invoke insmod with all arguments we got
# and use a pathname, as insmod doesn't look in . by default

if [ ! -f Makefile_init ]; then
mv Makefile Makefile_init
fi
if [ ! -f src/Makefile_init ]; then
mv src/Makefile src/Makefile_init
fi

if [[ -z $1 ]]; then
kern_to_patch=`uname -r`
cp Makefile_init Makefile
cp src/Makefile_init src/Makefile
else
kern_to_patch="$1"
cat Makefile_init | sed -e "s#KFLAG := .*#KFLAG := 26x#" > Makefile
cat src/Makefile_init | sed -e "s:\$(shell uname -r):${kern_to_patch}:" > src/Makefile
fi

echo "kernel being updated : $kern_to_patch"

TARGET_PATH=$(find /lib/modules/${kern_to_patch}/kernel/drivers/net -name realtek -type d)
if [ "$TARGET_PATH" = "" ]; then
TARGET_PATH=/lib/modules/${kern_to_patch}/kernel/drivers/net
fi

if [ "${kern_to_patch}" = "`uname -r`" ]; then
echo
echo "Check old driver and unload it."
check=`lsmod | grep r8169`
if [ "$check" != "" ]; then
echo "rmmod r8169"
/sbin/rmmod r8169
fi

check=`lsmod | grep r8168`
if [ "$check" != "" ]; then
echo "rmmod r8168"
/sbin/rmmod r8168
fi
else
echo "Building for another kernel, skiping rmmod"
fi

echo "Build the module and install"
echo "-------------------------------" >> log.txt
date 1>>log.txt
make all 1>>log.txt || exit 1
module=`ls src/*.ko`
module=${module#src/}
module=${module%.ko}

if [ "$module" = "" ]; then
echo "No driver exists!!!"
exit 1
elif [ "$module" != "r8169" ]; then
if test -e $TARGET_PATH/r8169.ko ; then
echo "Backup r8169.ko"
if test -e $TARGET_PATH/r8169.bak ; then
i=0
while test -e $TARGET_PATH/r8169.bak$i
do
i=$(($i+1))
done
echo "rename r8169.ko to r8169.bak$i"
mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak$i
else
echo "rename r8169.ko to r8169.bak"
mv $TARGET_PATH/r8169.ko $TARGET_PATH/r8169.bak
fi
fi
fi

echo "DEPMOD ${kern_to_patch}"
depmod $kern_to_patch
if [ $? -ne 0 ]; then
echo "depmod failed"
exit 1
else
echo "depmod ok"
fi

if [ "${kern_to_patch}" = "$(uname -r)" ]; then
echo "load module $module"
modprobe $module
else
echo "patching another kernel, skiping modprobe"
fi

is_update_initramfs=n
distrib_list="ubuntu debian"

if [ -r /etc/debian_version ]; then
is_update_initramfs=y
elif [ -r /etc/lsb-release ]; then
for distrib in $distrib_list
do
/bin/grep -i "$distrib" /etc/lsb-release 2>&1 /dev/null && \
is_update_initramfs=y && break
done
fi

if [ "$is_update_initramfs" = "y" ]; then
if which update-initramfs >/dev/null ; then
echo "Updating initramfs. Please wait."
update-initramfs -u -k "${kern_to_patch}"
if [ $? -ne 0 ]; then
echo "initramfs failed"
else
echo "initramfs ok"
fi
else
echo "update-initramfs: command not found"
exit 1
fi
fi

echo "Completed."
exit 0




Et voila, il suffit de passer en paramètre le nom du kernel sur lequel on veut appliquer le driver réseau pour que tout soit compilé pour le prochain kernel et directement disponible sans avoir à lancer l'autorun après avoir eu la moitié des services dépendants du réseau plantés.
Par exemple :
./autorun.sh 3.9.3-whale
"Le pire, c'est quoi ? L'ignorance ou l'indifférence ? - Je sais pas ... et je m'en fous !"
Page 1
 
 
Octopus30.net >> Les discussions >> Scripts et astuces >> [Linux] driver Realtek r8168 sur kernel 3.0 en mode fainénant
 
Forum Octopus30 version 6.0.7 / Poulpe 2001-2019
Page générée en 61ms (9 requêtes SQL : 23ms)
Site enregistré à la CNIL sous le numéro 1002899