{"id":1284,"date":"2013-08-13T19:41:55","date_gmt":"2013-08-13T17:41:55","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=1284"},"modified":"2013-08-13T19:41:55","modified_gmt":"2013-08-13T17:41:55","slug":"wifi-sonido-y-mas","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=1284","title":{"rendered":"Wifi, sonido y mas"},"content":{"rendered":"<p><strong>Actualizado.<\/strong> Despu\u00e9s de mucho pelearme con <a href=\"https:\/\/blog.rastersoft.com\/?p=1218\" target=\"_blank\">mi tablet<\/a>, finalmente he conseguido que funcionen casi todos los dispositivos. Tambi\u00e9n he pulido el proceso de instalaci\u00f3n de Linux; de hecho hay bastantes cosas que cambiar del <a href=\"https:\/\/blog.rastersoft.com\/?p=1253\" target=\"_blank\">art\u00edculo anterior<\/a>, as\u00ed que vamos all\u00e1.<\/p>\n<h4>El fichero SCRIPT.BIN<\/h4>\n<p>En primer lugar quer\u00eda disponer del fichero script.bin original de mi tablet, y no de uno creado para otro dispositivo, porque obviamente pod\u00eda haber alg\u00fan par\u00e1metro (velocidad de memoria, puertos de dispositivos, etc) que tuviese un valor diferente, evitando que funcionase alg\u00fan dispositivo. De hecho, una vez que consegu\u00ed utilizarlo, el sonido funcion\u00f3 autom\u00e1ticamente (antes no detectaba ninguna tarjeta de sonido).<\/p>\n<p>El proceso para obtener dicho fichero bin no fue sencillo: dicho fichero est\u00e1 en la flash interna de la tablet, pero por desgracia no ten\u00eda acceso a ella desde Linux (no detecta dicho dispositivo) ni desde Android (lo detecta, obviamente, pero no tengo permisos de acceso por no tener la tablet rooteada. Adem\u00e1s, al ser la partici\u00f3n de arranque, no se monta una vez lanzado Android, por lo que tampoco est\u00e1 disponible desde \u00e9ste). Tras muchos intentos encontr\u00e9 la soluci\u00f3n: utilizar el\u00a0<a href=\"http:\/\/developer.android.com\/tools\/help\/adb.html\" target=\"_blank\">ADB (Android Debug Bridge)<\/a>. Esto permite acceder a un dispositivo Android desde un PC. Para ello, una vez instalado el kit de desarrollo de Android, basta conectar la tablet al PC a trav\u00e9s de un puerto USB, ir al directorio <em>sdk\/platform-tools<\/em> y ejecutar:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    sudo .\/adb start-server\n    .\/adb shell\n    cat \/dev\/block\/mmcblk0p1 &gt; punto_de_montaje_de_tarjeta_SD\/particion1.img\n    exit\n    sudo .\/adb kill-server<\/pre>\n<\/div>\n<p>El primer comando lanzar\u00e1 como root el servidor ADB, que se conectar\u00e1 a nuestro dispositivo, y el segundo lanzar\u00e1 una shell como root en \u00e9l. El tercero, ejecutado ya desde la shell del dispositivo, volcar\u00e1 la primera partici\u00f3n de la flash en el fichero <em>particion1.img<\/em> de la tarjeta SD. Por \u00faltimo, salimos de la shell y desactivamos el servidor ADB.<\/p>\n<p>En ocasiones <em>adb<\/em> no encuentra nuestro dispositivo. Si tecleando\u00a0<em>.\/adb devices<\/em> no aparece ning\u00fan dispositivo detectado, es posible que\u00a0<em>adb<\/em> no tenga a nuestro fabricante en su lista. Para a\u00f1adirlo manualmente hacemos un <em>lsusb<\/em>, y vemos el identificador de nuestra tablet. Digamos que es AAAA:BBBB (dos n\u00fameros en hexadecimal de cuatro cifras cada uno). S\u00f3lo tenemos que editar <em>~\/.android\/adb_usb.ini<\/em> y a\u00f1adir en \u00e9l 0xAAAA, reiniciar el servidor adb, y listo.<\/p>\n<p>Ahora s\u00f3lo tenemos que llevar el fichero <em>particion1.img<\/em> a un PC con linux y montar dicha partici\u00f3n, por ejemplo en <em>\/mnt<\/em>:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    sudo mount -o loop particion1.img \/mnt<\/pre>\n<\/div>\n<p>Ah\u00ed encontraremos el fichero <em>script.bin<\/em>, que podremos convertir en un fichero <em>.fex<\/em> mediante la utilidad <em>bin2fex<\/em>, que encontraremos en el repositorio <a href=\"https:\/\/github.com\/linux-sunxi\/sunxi-tools\" target=\"_blank\">sunxi-tools<\/a>. De hecho es necesario hacerlo para poder hacer un par de modificaciones, sin las que nuestro Linux no arrancar\u00eda desde la tarjeta SD. En concreto \u00e9stos son los cambios:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">@@ -12,7 +12,7 @@\n pll4_freq = 960\n pll6_freq = 720\n power_start = 0\n-storage_type = 2\n+storage_type = 1\n\n [pm_para]\n standby_mode = 0\n@@ -445,7 +445,7 @@\n sdc_wp =\n\n [mmc2_para]\n-sdc_used = 1\n+sdc_used = 0\n sdc_detmode = 3\n bus_width = 8\n sdc_cmd = port:PC06&lt;3&gt;&lt;1&gt;&lt;3&gt;&lt;default&gt;\n@@ -510,7 +510,7 @@\n usb_id_gpio =\n usb_det_vbus_gpio =\n usb_drv_vbus_gpio = port:power203&lt;1&gt;&lt;0&gt;&lt;default&gt;&lt;0&gt;\n-usb_host_init_state = 0\n+usb_host_init_state = 1\n\n [port_pm]\n restrict_1a = 0<\/pre>\n<\/div>\n<p>El primero cambia el tipo de almacenamiento de Flash a SD. El segundo especifica que no se active la memoria Flash interna (si se activa, no arranca el sistema). Por \u00faltimo, el tercero activa desde el principio el segundo USB, necesario para que funcione la red WiFi.<\/p>\n<p>Existe una <a href=\"http:\/\/linux-sunxi.org\/Fex_Guide\" target=\"_blank\">lista con todas las opciones de un fichero FEX<\/a>, \u00fatil si se quieren hacer m\u00e1s cambios manuales.<\/p>\n<p>Una vez hechos estos cambios ya podemos generar el fichero <em>script.bin<\/em> final, siguiendo el m\u00e9todo indicado en el art\u00edculo anterior.<\/p>\n<h4>El kernel<\/h4>\n<p>En el n\u00facleo tambi\u00e9n hay que hacer algunos cambios. Para empezar, hay que utilizar la versi\u00f3n 3.4, en lugar de la 3.0, porque es la que tiene soporte para la tarjeta de red:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    git clone -b sunxi-3.4 https:\/\/github.com\/linux-sunxi\/linux-sunxi linux-3.4-sunxi\n    cd linux-3.4-sunxi<\/pre>\n<\/div>\n<p>De todas formas, el chip que lleva esta tablet es el Realtek RTL8188etv. Aunque en teor\u00eda es compatible con el driver para la familia RTL8188, en la pr\u00e1ctica hay que a\u00f1adir una l\u00ednea para que reconozca el identificador USB de este chip concreto. Aunque ya envi\u00e9 el parche a la lista de correo, lo a\u00f1ado aqu\u00ed porque no se cuanto tardar\u00e1n en a\u00f1adirlo:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">diff --git a\/drivers\/net\/wireless\/rtl8188eu\/os_dep\/linux\/usb_intf.c b\/drivers\/net\/wireless\/rtl8188eu\/os_dep\/linux\/usb_intf.c\nindex 5f4390a..df9d488 100644\n--- a\/drivers\/net\/wireless\/rtl8188eu\/os_dep\/linux\/usb_intf.c\n+++ b\/drivers\/net\/wireless\/rtl8188eu\/os_dep\/linux\/usb_intf.c\n@@ -185,7 +185,8 @@ static struct usb_device_id rtw_usb_id_tbl[] ={\n #endif\n #ifdef CONFIG_RTL8188E\n        \/*=== Realtek demoboard ===*\/           \n        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)},\/\/Default ID        \n+       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)},\/\/rtl8188etv ID (szenio 1207 tablet)\n #endif\n        {}      \/* Terminating entry *\/\n };<\/pre>\n<\/div>\n<p>Una vez aplicado este cambio de una \u00fanica l\u00ednea, podemos ya proceder a configurar el n\u00facleo. Para ello partimos de la configuraci\u00f3n gen\u00e9rica para el A13:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    make ARCH=arm a13_defconfig\n    make ARCH=arm menuconfig<\/pre>\n<\/div>\n<p>Estas son las opciones que he modificado:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    General Setup\n        POSIX message queues=Y\n    Device Drivers\n        Network Device Support\n            Ethernet (10 or 100Mbit)=N\n            Wireless LAN\n                Realtek 8188E USB WiFi=M\n        Character Devices\n            Non-standard serial port support=N\n            Serial drivers\n                8250\/16550 and compatible serial support=N\n        Graphics support\n            Console Display driver support\n                Map the console to the primary display device=Y\n            Bootup logo=Y\n    Security Options\n        Enable the securityfs filesystem=N<\/pre>\n<\/div>\n<p>Una vez hecho, podemos ya proceder a compilarlo, pero con el compilador que utilice la gnueabihf (que utiliza coma flotante por hardware, en lugar de la gnueabi, como hac\u00eda en el art\u00edculo anterior). Para ello primero necesitamos instalar esta versi\u00f3n del compilador:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    sudo apt-get install gcc-4.7-arm-linux-gnueabihf gcc-arm-linux-gnueabihf<\/pre>\n<\/div>\n<p>y ya podemos compilar el n\u00facleo en s\u00ed:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage\n    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules\n    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules_install<\/pre>\n<\/div>\n<h4>Los ficheros boot.cmd y boot.scr<\/h4>\n<p>El \u00faltimo cambio respecto al art\u00edculo anterior est\u00e1 en el fichero <em>boot.cmd<\/em> (y su fichero hijo <em>boot.scr<\/em>). Este fichero contiene los par\u00e1metros de arranque del n\u00facleo, y es b\u00e1sicamente un <em>script<\/em> para <em>U-Boot<\/em>. En nuestro caso, crearemos el fichero <em>boot.cmd<\/em> en la partici\u00f3n <em>VFAT<\/em> de nuestra tarjeta SD con este contenido:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    setenv bootargs console=ttyS0,115200 root=\/dev\/mmcblk0p2 rootwait panic=10 ${extra}\n    fatload mmc 0 0x43000000 script.bin\n    fatload mmc 0 0x48000000 uImage\n    bootm 0x48000000<\/pre>\n<\/div>\n<p>y lo compilaremos con:<\/p>\n<div class=\"mycode\">\n<pre class=\"mycode\">    mkimage -C none -A arm -T script -d boot.cmd boot.scr<\/pre>\n<\/div>\n<p>Y listo. Si en alg\u00fan momento queremos cambiar las opciones de arranque de nuestro n\u00facleo, s\u00f3lo tendremos que editar el fichero boot.cmd, a\u00f1adirlas en la primera l\u00ednea y recompilarlo. Existe una p\u00e1gina con todas las <a href=\"http:\/\/linux-sunxi.org\/Kernel_arguments\" target=\"_blank\">opciones del n\u00facleo espec\u00edficas de sunXi<\/a>.<\/p>\n<h4>Encender y apagar el sistema<\/h4>\n<p>De momento no est\u00e1 activa la gesti\u00f3n de energ\u00eda, por lo que si se hace un <em>halt<\/em> o un <em>shutdown -h now<\/em>, el sistema parecer\u00e1 apagarse, pero en realidad seguir\u00e1 encendido. En estos casos, para apagarlo \u00abde verdad\u00bb es necesario mantener pulsado el bot\u00f3n de encendido durante seis o m\u00e1s segundos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Actualizado. Despu\u00e9s de mucho pelearme con mi tablet, finalmente he conseguido que funcionen casi todos los dispositivos. Tambi\u00e9n he pulido el proceso de instalaci\u00f3n de Linux; de hecho hay bastantes cosas que cambiar del art\u00edculo anterior, as\u00ed que vamos all\u00e1. El fichero SCRIPT.BIN En primer lugar quer\u00eda disponer del fichero script.bin original de mi tablet, &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=1284\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Wifi, sonido y mas<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,7],"tags":[],"class_list":["post-1284","post","type-post","status-publish","format-standard","hentry","category-cacharreo","category-tutoriales"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1284"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/1284\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}