quarta-feira, 15 de agosto de 2012

Módulo nls_utf8.ko para o Toshiba Thrive 10" (US HC 3.2.1)

Aviso: você precisa de uma ROM rooted para montar compartilhamentos com o módulo cifs (ver Um tablet mais útil).

Pacotes necessários no Fedora 17 64-bit:

yum -y install make gcc ncurses-devel glibc.i686 ncurses-libs.i686 libstdc++.i686 zlib.i686 tar bzip2 unzip

Preparativos

/etc/udev/rules.d/51-android.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0666"
(0930 é o código da Toshiba)

Colocar temporariamente o SELinux no modo permissive:

# setenforce 0

Etapa 1 - Toolchain e ferramentas

$ mkdir android && cd android
$ wget http://dl.google.com/android/ndk/android-ndk-r8b-linux-x86.tar.bz2
$ tar -xvf android-ndk-r8b-linux-x86.tar.bz2
$ export CCOMPILER=$(pwd)/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-

$ wget http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz
$ tar -xvf android-sdk_r20.0.3-linux.tgz
$ android-sdk-linux/tools/android update sdk -u -t platform-tool
$ export PATH=$PATH:$(pwd)/android-sdk-linux/platform-tools

Etapa 2 - Copiar a configuração do kernel
Dispositivo plugado e com a opção "Depuração USB" habilitada. ("Definições -> Aplicações -> Desenvolvimento" no Android 3.x)

$ adb pull /proc/config.gz

Etapa 3 - Compilação

Download dos fontes: [Source Code] Thrive HC 3.x Kernel Source Code (baixe apenas o arquivo AT105_GPL_Source.zip)

$ unzip AT105_GPL_Source.zip
$ tar -xvf gpl_src.tar.gz
$ tar -xvf gpl_src/kernel.tar.gz

$ zcat config.gz > kernel/.config
$ cd kernel
$ make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig
$ make ARCH=arm CROSS_COMPILE=$CCOMPILER menuconfig

Fazer as seguintes modificações na configuração:

- General setup -> Local version - append to kernel release (-00020-g3d351b6) -- deve bater com a versão usada no aparelho (uname -a)
- General setup -> Automatically append version information to the version string < >
- File systems -> Native language support -> NLS UTF-8 <M>

Compilar:

$ make ARCH=arm CROSS_COMPILE=$CCOMPILER CFLAGS_MODULE=-fno-pic modules
$ ../android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-debug fs/nls/nls_utf8.ko

O módulo estará em fs/nls/nls_utf8.ko

Etapa 4 - Configuração

Envie para o aparelho:

$ adb remount
$ adb push fs/nls/nls_utf8.ko /system/lib/modules/nls_utf8.ko

Instale o CifsManager e crie uma conexão assim:


Existe um bug que faz o programa não funcionar se a opção iocharset=utf8 for colocada onde deveria ser, em "Options". A gambiarra de colocar junto ao nome resolve.

Nas opções, configure para carregar o módulo de suporte ao UTF-8 (o módulo cifs é embutido no kernel da Toshiba):


E era isso. O ponto de montagem /sdcard/windows é o seu compartilhamento. Caracteres especiais serão exibidos corretamente.

Download do módulo: nls_utf8-Thrive-US_HC_3.2.1.zip

Você não é obrigado a usar o adb. Transfira o arquivo nls_utf8.ko como quiser para o aparelho (cartão SD, pendrive, sinal de fumaça). Use um gerenciador de arquivos que permita escrever na pasta /system (que precisará ser remontada no modo rw). Ou use algum terminal qualquer:

$ su
# busybox mount -o remount,rw /system
# busybox cp /sdcard/nls_utf8.ko /system/lib/modules
# busybox mount -o remount,ro /system
# exit

Usei o diretório /system apenas por padronização. Você pode deixar o arquivo em qualquer outro lugar (ex. /sdcard), bastando adaptar a configuração do CifsManager.

Meu objetivo principal em ter o módulo cifs funcionando foi para acessar vídeos do PC sem a necessidade de copiá-los para o tablet antes. O que determinará se os vídeos rodarão bem através da rede é o seu bitrate. Wireless G tem uma banda, na prática, pouca coisa maior de 2MB/s, o que é suficiente para praticamente qualquer Rip SD. Vídeos em HD costumam ter bitrate maior e engasgarão por falta de banda. Talvez seja possível contornar esse problema (no XDA Developers tem algumas dicas para melhorar o desempenho do módulo cifs), mas no momento falta vontade para continuar pesquisando. :-)

[Atualização - 06/10/2012] O chip BCM4329 do Thrive suporta até Wireless N. Nem havia me dado conta. Hora de começar a pensar em trocar de roteador.

Recentemente a Toshiba atualizou o Android do Thrive 10" para o ICS 4.0.4 (rooted pelo dalepl). A configuração do kernel usado nele (2.6.39) não tem mais o módulo cifs embutido. Como o código fonte ainda não apareceu (alôôô, Toshiba!), continuarei no Honeycomb. Quando sair, será necessário compilar além do nls_utf8.ko o cifs.ko também.

Nenhum comentário:

Postar um comentário