Pregunta:
Problema con el controlador QinHeng CH9200 - Pi 2 (4.1.7-v7 +)
Elber CM
2015-12-14 23:25:59 UTC
view on stackexchange narkive permalink

El inglés no es mi idioma nativo, así que tenga paciencia.

Estoy usando un Rasp y el puerto Ethernet ya está ocupado, así que compramos un adaptador USB2.0 a Fast Ethernet, como este : https://www.jacobsparts.com/items/USB-LAN-04

La RasPi detecta el dispositivo QingHeng Electronics como se muestra en la siguiente captura de pantalla. Se supone que el Chipset es el CH9200.

enter image description here

Instalar los controladores en una computadora portátil con Ubuntu 14.04 fue fácil, pero los mismos pasos para el Rasp no funcionó. Aparentemente el problema es el Kernel, el CD con los controladores trae un "readme", que dice:

sudo Nota:

  1. Por favor, ejecute como root

  2. El rango de kernel de Linux soportado de 2.6.xa 3.8.x

  3. El módulo CH9x00 depende de los módulos mii y usbnet
  4. Si desea completar este módulo en el kernel, consulte seguido

    a. # cp ch9x00.c ~ / 2.6.25 / driver / net / usb /

    b. # cd> ~ / 2.6.25 / driver / net / usb /

    c. Makefile y Kconfig modificados para ch9x00.c

Instalar: # make # make load

Desinstalar: # make unload

Así que verifico la versión del kernel del rasp usando uname -a , da lo siguiente:

  Linux raspberrypi 4.1.7-v7 + # 817 SMP PREEMPT Sat 19 de septiembre 15:32:00 BST 2015 armv7l GNU / Linux  

Copio los archivos del controlador del CD a home / pi / linux , el comando sudo make devuelve lo siguiente:

  make -C /lib/modules/4.1.7-v7+/build M = / home / pi / linuxmake [1]: ** * /lib/modules/4.1.7-v7+/build: No existe el fichero o el directorio. Alto.Makefile: 13: la receta para los 'módulos' de destino falló hacer: *** [módulos] Error 2  

la salida de ls -l según el comentario de Diederik . Esto es antes de que usara el método linux-headers.

ls -l acording to Diederik comment

En los foros de Raspberry hay una solución posible en el séptimo post que lleva a instalar "linux-headers-3.10-3-rpi" y luego enlazar los módulos:

  sudo ln -s /lib/modules/3.10-3-rpi/build / lib / modules / 4.1.7-v7 + / build  

Esto me permite compilar los archivos , una vez allí intenté ejecutar sudo make load , pero esta vez la respuesta fue:

  modprobe miimodprobe usbnetinsmod ch9x00.koError: no se pudo insertar el módulo ch9x00.ko: Formato de módulo no válido Makefile: 16: la receta para la 'carga' de destino fallómake: *** [carga] Error 1  

También probé con "linux-headers-3.18.0-trunk-rpi2" porque están hechos para RasPi2, pero eso tampoco funcionó.

Gracias a Diederik de Haas por su respuesta y las actualizaciones, acabo de seguir sus pasos detallados, en el Paso 1 eligió el "Commit" publicado el 18 de noviembre con el "2a329e0", usando el Module7.symvers y el git_hash de esa fecha.

Paso 2 y 3 salieron bien, la compilación también, pero cuando llegó el momento de activar el módulo, obtuve el siguiente resultado:

Almost there

También probé con --force , finalmente publique el dmesg | tail en busca de pistas.

Update Dic 16

Cuando empiezo esta pregunta ya tengo un servidor web funcionando en RasPi (raspbian wheezy) usando tomcat7, que fue bastante difícil de configurar, así que hice un RasPi_14_12_16.img por seguridad, en esta imagen tengo la siguiente configuración que puede diferir de un ".img" estándar

1 - Tengo una red con ip estática ejecutándose en un módulo usb wifi.

2 - Cambia algunas reglas (rules.d - udev) para montar automáticamente usb con permisos completos.

3 - Se cambiaron las opciones de internacionalización a es_CO. UTF-8 UTF-8 y la interfaz SPI fueron deshabilitadas.

Acabo de cargar el ".img" una vez más y la información detallada para el procedimiento de acuerdo con mi kernel, es la siguiente:

1 - uname -a obtuvo el siguiente Linux raspberrypi 4.1.7-v7 + # 817 SMP PREEMPT Sáb 19 de septiembre 15:32:00 BST 2015 armv7l GNU / Linux

2 - gcc instalado (lo he eliminado anteriormente) sudo apt-get install gcc (funciona bien instalar otros paquetes)

3 - sudo apt-get update && sudo apt-get upgrade , Luego uname -r ---> still 4.1.7-v7+

4 - Luego obtengo el git_hash de mi Pi: zgrep '* firmware a partir de' /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz | head -1

* firmware a partir de 960832a6c2590635216c296b6ee0bebf67b2 ****

5 - Como el Paso 1 en la respuesta de Diederik : descargue (sin procesar -> clic derecho -> guardar enlace como ...) el Module7.symvers de https://github.com/raspberrypi/firmware/tree/2a329e0c7d8ea19c085bac5633aa4fccee0f21be/extra

6 - Como el Paso 2 en la respuesta de Diederik : Consiguió las fuentes del kernel y las puso en la carpeta rpf-linux-kernel: ~ $ git clone https: //github.com/raspberrypi/linux rpf-linux-kernel

también:

git checkout -b rpi-bootloader-4.1.7 960832a6c2590635216c296b6ee0bebf67b2 * *** make mrpropermake bcm2709_defconfigmake modules_prepare

7 - Como el Paso 3 en la respuesta de Diederik : Hice los enlaces virtuales usando: sudo ln -s / home / pi / rpf-linux-kernel / / lib / modules / $ (uname -r) / build

@DiederikdeHaas Sube el archivo ch9200.ko ​​( https: // drive .google.com / file / d / 0BxmrihUj-8tSa2YxUDAzY1NyNkU / vi ew? usp = sharing) y detalla los siguientes pasos para instalar el módulo:

1 - Para instalarlo, haga: sudo install -p -m 644 ch9200.ko ​​/ lib /modules/4.1.7-v7+/kernel/drivers/net/usb2 - Luego: sudo / sbin / depmod -a 4.1.7-v7 + 3 - Después de eso, puede cargar el módulo con: sudo modprobe ch9200

No publique preguntas duplicadas. Voy a borrar el otro.
Gracias @SteveRobillard no pude eliminar el otro porque el usuario cambió, perdón por el problema.
@DiederikdeHaas actualizó la pregunta y borró varios comentarios en Pregunta y respuesta, no puede eliminar el suyo. Cargue también ** ch9200.ko ​​** en mi unidad personal de Google y actualicé el enlace, ¿está de acuerdo?
@ElberCM Sí, está bien. _Idealmente_ ya no debería ser necesario, pero es mejor prevenir que lamentar ;-) Eliminaré algunos de mis comentarios.
Tenga en cuenta que he reescrito las instrucciones para que sean aplicables a `4.1.7-v7 +` y, en consecuencia, varias identificaciones ahora son diferentes de lo que se escribió antes (que se aplicaba a `4.1.13-v7 +`) y, por lo tanto, tampoco coinciden más con lo que ahora se indica en la Pregunta.
Hahahaha @DiederikdeHaas por qué hiciste eso, tu respuesta fue perfecta, también supongo que más personas usan a Jessie. Entonces borraré la última parte de mi pregunta.
Debido a que la versión exacta es crucial y las instrucciones para otra versión del kernel es ** muy ** probable que causen confusión. Dado el ir y venir que tuvimos, lo entendemos, pero para otros sería incomprensible. Ahora otros deberían poder seguirlo y aplicarlo a su propia situación ... con suerte :-P
One responder:
Diederik de Haas
2015-12-14 23:47:18 UTC
view on stackexchange narkive permalink

Importante: Siga estas instrucciones meticulosamente

Nota: El OP está utilizando Wheezy y la última versión del kernel de raspberrypi-bootloader entonces es 4.1.7-v7 + , mientras que en jessie esa versión es 4.1.13-v7 + ¡y esa es una diferencia crítica!
Si vas para aplicar estos pasos a su propia situación, ajuste los valores en consecuencia.

Paso 1: Obtenga el git_hash del firmware
Obtenga el firmware-commit-id: zgrep '* firmware a partir de' / usr / share / doc /raspberrypi-bootloader/changelog.Debian.gz | head -1 que devuelve 960832a6c2590635216c296b6ee0bebf67b21d50 o 960832a para abreviar.
En https://github.com/raspberrypi/firmware/commits/ master busca ese firmware-commit-id ( 960832a el 23 de septiembre de 2015 (la fecha es solo como ayuda adicional, lo único relevante es el firmware -commit-id)) y haga clic en Examinar el repositorio en este punto del historial y cambie al directorio adicional . Cuando esté allí, descargue Module7.symvers y guárdelo en su directorio de inicio (para Pi 1, descargaría Module.symvers ).
En en el directorio extra también encontrará un archivo git_hash que debe abrir y anotar la identificación ( 59e76bb7e2936acd74938bb385f0884e34b91d72 ) que ve allí. Este es el kernel-commit-id.

Paso 2: Prepare el kernel para la compilación del módulo
Obtenga las fuentes del kernel y colóquelas en rpf-linux -kernel carpeta:
git clone https://github.com/raspberrypi/linux rpf-linux-kernel
Esto descargará más de 1 GB de datos y luego procesará eso, lo que llevará un tiempo.

Para preparar las fuentes para la compilación del módulo del kernel, hay algunos otros pasos a seguir.
Primero debe verificar el código del kernel en el id. De confirmación del kernel exacto que encontró anteriormente. Siempre hago mi 'trabajo' en una rama separada en lugar de en 'maestro', ya que eso hace que sea más fácil comenzar de nuevo en caso de que las cosas salgan mal y se considera mejor práctica . Luego, limpia todo ( mrproper ), carga la configuración predeterminada para Pi 2 ( bcm2709_defconfig ) y prepara las fuentes para la compilación del módulo ( modules_prepare ):

  cd rpf-linux-kernelgit checkout -b rpi-bootloader-4.1.7 59e76bb7e2936acd74938bb385f0884e34b91d72make mrpropermake bcm2709_defconfigmake modules_prepare  
que debe

bcm2709_defconfig con bcmrpi_defconfig .

Ahora copie el archivo Module7.symvers que descargó anteriormente en el árbol del kernel y cámbiele el nombre a Module.symvers : cp ../ Module7.symvers Module.symvers
(para Pi 1, simplemente copie el Module.symvers en el árbol del kernel).

Paso 3 : Configure su sistema para la compilación del módulo del kernel
Cuando compila un módulo del kernel, el sistema de compilación busca en el directorio / lib / modules / <kernel-version> / build los encabezados / fuentes del kernel. Así que haga el enlace desde ese directorio build a nuestro directorio actual:
sudo ln -s / home / pi / rpf-linux-kernel / / lib / modules / $ (uname - r) / build

Cuando haga ls -l /lib/modules/4.1.7-v7+/build , debería obtener lo siguiente:
lrwxrwxrwx 1 root root 32 dic 15 21:38 /lib/modules/4.1.7-v7+/build -> / home / pi / rpf-linux-kernel /

Y ahora está listo para compilar un módulo del kernel.

Paso 4: Compilar el módulo del kernel
Tiene suerte porque alguien ha publicado el archivo fuente y un Makefile para compilar el módulo.
Para compilarlo, regrese a su directorio de inicio, clone el repositorio de git y cree / instale el controlador:

  cd ~ git clone https://github.com/xor-function/usb- ethernet-adaptercd usb-ethernet-adaptermakesudo make install  

Y luego para cargarlo, ejecute sudo modprobe ch9200 .
Como el ID de USB es parte del código del controlador, cuando conecte el dispositivo, debería detectarlo automáticamente y cargar el controlador.

¿No sería más fácil si subo el archivo `ch9200.ko` (el módulo del kernel en sí)?
el que considere será más útil. Por favor, ¿podría darme los pasos para instalar correctamente el "ch9200.ko"? Gracias de nuevo.
"Internet es para siempre" por eso voy a decir esto: Muchas gracias @DiederikdeHaas, te debo tres rondas de cervezas. Uno por tu ayuda, otro por tu destreza y el último y más importante por tu paciencia. Gracias de nuevo.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...