Androidos tablethez külső bluetooth

Fórumok

Van egy fasza kis kínai tabletem, ami arra a célra még jó is lehetne amire szeretném...
Egy gond van vele, nincs benne bluetooth ami pedig kellene nekem!
Viszont van rajta egy micrp USB port, amire gondoltam rádugok egy OTG kábelt, annak a végére pedig egy kis USB-s bluetooth egységet.

OTG kábelem nincs hozzá, hétfőn tudok venni.
Bluetoothom van, ilyen: http://www.sbsmobile.com/252_usb-dongle-bluetooth-adapter-v-20edr.html (Nem emlékszem, talán használtam valamikor Linux alatt is...)

A tableten 4.0.3-as Andoid fut. (Fene tudja lehet-e rá frissebbet rakni, mint mondtam, kínai vacak)

Szerintetek ha ezt így összebarkácsolom, akkor az Andoid fel fogja ismerni a bluetoothot és lehet használni? :)

Hozzászólások

Van rá esély, garancia nincs;)

// Happy debugging, suckers
#define true (rand() > 10)

Nem az Android verzión múlik, hogy lehet-e majd használni, hanem hogy mit fordítottak bele a kernelbe.
Mivel forrásod nincsen, ezért nem tudod megnézni a config fájlt, /proc/config.gz pedig valószínűleg szintén nincsen.

Ha mondasz egy konkrét típust a tablet-hez, akkor megpróbálok segíteni.
A kínai tabletek többségén az adb egyből root shellt ad, ott tudsz uj modult felmásolni nagyon egyszerűen. Megfelelő kernel verzióhoz tartozó drivert pedig vagy valahonnan keresel (google), vagy cross platform compiler-el gyártasz (arm-linux-gnueabihf a kulcsszó).
Ha nem ad root shellt, akkor sincs veszve semmi, a legtöbb tablet képes (az allwinner a13-ok közül mind és ez a legelterjedtebb is) nem csak belső nand-ról, hanem külső sd kártyáról is bootolni (ide a kulcsszó pedig sunxi linux). Ha a linux bebootolt, onnan szabadon eléred a nand összes particióját és lehet garázdálkodni:)

// Happy debugging, suckers
#define true (rand() > 10)

Konkrétan a tab ez a típus lenne.

ADB-vel belépve nem adott root shellt, de egy su kiadása után már root vagyok.

Most konkrétan azt kellene kideríteni mi is kell nekem, hogy a BT működjön.
Ha most rádugom, ennyi kerül csak a logba:

new full speed USB device number 10 using dwc_otg
device v1131 p1004 is not supported

Egyébként a dolog tuti működne, mert az Raspberrymre rádugva tökéletesen kezeli a kernel:

new full-speed USB device number 7 using dwc_otg
New USB device found, idVendor=1131, idProduct=1004
New USB device strings: Mfr=1, Product=2, SerialNumber=0
Product: ISSCEDRBTA
Manufacturer: ISSC
Bluetooth: Core ver 2.16
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
usbcore: registered new interface driver btusb

3.0.8-tcc
Tehát ez: https://github.com/cnxsoft/telechips-linux

Közben próbálkozok modult fordítani, ennek a leírásnak az alapján.

Meg is találtam mindent. Már a menuconfing-ig eljutottam.
Hogy mi kell a BT-hoz, azt ez alapján összeválogattam: http://www.thinkwiki.org/wiki/How_to_setup_Bluetooth#Configuring_the_ke…

Sajnos a végén a "make CFLAGS_MODULE=-fno-pic modules" parancsnál elhasal a dolog :(
Arra gyanakszom, azért mert nem úgy klónoztam githubról a kernelt, hanem zip-ben töltöttem. Panaszkodott is kicsomagoláskor a symlinkekre...
Megpróbálom klónozva githubról..

UPDATE:
Ez sem nyert.
Tehát így hasal el a fordítás:

$ make CFLAGS_MODULE=-fno-pic modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/lex.zconf.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --silentoldconfig Kconfig
CHK include/linux/version.h
UPD include/linux/version.h
CHK include/generated/utsrelease.h
UPD include/generated/utsrelease.h
Generating include/generated/mach-types.h
CC kernel/bounds.s
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mabi=aapcs-linux"
cc1: error: unrecognized command line option "-mno-thumb-interwork"
kernel/bounds.c:1: error: bad value (armv5t) for -march= switch
kernel/bounds.c:1: error: bad value (armv5t) for -mtune= switch
make[1]: *** [kernel/bounds.s] Error 1
make: *** [prepare0] Error 2

Pedig már érzem, hogy a célegyenesben vagyok :D

A gcc-arm-linux-gnueabi nincs benne a debian repomban... (Már elég öreg Debian, csak házi webservernek van használva)

A cross complier így van megadva a Makefile-ban:
CROSS_COMPLIE ?= /home/developer/androidbuild/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-

Fuu, meg fáá már.
Megadtam igy:
make CFLAGS_MODULE=-fno-pic modules CROSS_COMPILE=/home/developer/androidbuild/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-

No így már nem errorizál, csak hiányol:
libz.so.1: cannot open shared object file: No such file or directory

Pedig a zlib1g és zlib1g-dev csomag is fentvan...
És ott van a /usr/lib/ -ben.

Pedig most már nagyon érzem a célt :D

Update:
Szinte hihetetlen, de sikerült lefordítani!
Lehet nem lesz elég, de most már van egy plusz modulom: btusb.ko

Az öröm még korai, mert nem engedi betölteni :'(

insmod btusb.ko
init_module 'btusb.ko' failed (Exec format error)

Miééért? :'(

Bocs, mégis került dmesg-be, csak annyi szemetet tolt utána, hogy nem vettem észre.
Ez kerül be:

btusb: version magic '3.0.8-tcc+ preempt mod_unload ARMv7' should be '3.0.8-tcc preempt mod_unload ARMv7'

Tehát extraversionnak -tcc+ -t kellene megadnom a makefileban?
Mert jelenleg -tcc van megadva.

Nem! Pont fordítva. A + nem kellene oda.
Ami én fordítok annak végére kerül egy +.
Most hogy tcc+-t adtam meg, a dmesg azt írja: ...tcc++
Tehát még eggyel több lett.

Arra kellene rájönni, alapból miért kerül a végére a +
Belenéztem a makefile-ba, de nem találtam semmit ami hozzá biggyesztené

Update:
Elvileg ez megoldja a gondot: make LOCALVERSION=
Le is fordítottam így.

Átmásoltam a filet, ugyanúgy mint eddig a /nand/Downloads könyvtárba.
Belépek oda, majd insmod btusb.ko

init_module 'btusb.ko' failed (No such file or directory)

Még hibás volt megtalálta, most hogy elvileg jó, most nem? O.o

dmesg-be most ez került:
btusb: Unknown symbol hci_free_dev (err 0)
btusb: Unknown symbol hci_alloc_dev (err 0)
btusb: Unknown symbol bt_printk (err 0)
btusb: Unknown symbol hci_unregister_dev (err 0)
btusb: Unknown symbol hci_recv_framgemnt (err 0)
btusb: Unknown symbol hci_register_dev (err 0)

Egy ohci_hcd nevű modul alapból be van töltve.
Vagy ez más, merre van a menuconfigban? :)

Itt (http://forum.xda-developers.com/showthread.php?t=1280489), ezt írja:
Either compile the kernel and modules with arm-eabi-4.4.0 from android-ndk-r5b or earlier, or:
compile the modules only with "-fno-pic", then everything is working OK

Nos hát én pedig úgy csináltam. Igy néz ki a jelenlegi make-em:

make LOCALVERSION= CFLAGS_MODULE=-fno-pic modules CROSS_COMPILE=/home/developer/androidbuild/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-

Hát passz, még a végén itt kell feladnom :S

Átnéztem gyorsan a forrását, jó esélyel erre még szükség lesz: /net/bluetooth/bluetooth.ko :)
De hogy pontos legyek, egészen pontosan ezeket találtam még, amikre szükséged ehet:
/net/bluetooth/bnep/bnep.ko
/net/bluetooth/rfcomm/rfcomm.ko
/net/bluetooth/hidp/hidp.ko

Amire még szükség lehet, de valószínüleg van:
/compat/compat.ko

// Happy debugging, suckers
#define true (rand() > 10)

Jaj, igen a bluetooth.ko kellet! Most hogy azt betöltöttem, betöltötte a btusb.ko-t is.
Igaz most még fogalma sincs mit dugtam rá, ha rádugom a BT-t. (Eddig világított a BT-ban a LED, most villog :D )
Mindjárt lefordítom ezeket is amiket írtál és megnézem akkor tud-e valamit kezdeni vele :)

Update:
Betöltöttem őket, bár a compat.ko -t nem leltem még fel.
Viszont még mindig not supported device. Valami még hiányzik!! :D

Megnéztem, hogy ha az RPi-re dugom, akkor az miket tölt be. Ezeket:
btusb
bluetooth
rfkill

Az rfkill kivételével a többi már nekem is bevan töltve.
Sőt, már az összes bluetooth eszköz drivert is betöltöttem.

Talán az lehet a baj, hogy az uhci_hcd modul hiányzik?
Ezt viszont piszkosul nem találom a menuconfigban...

A mainline kernelben nagyon nincs ilyen vendor/product id kombó, viszont patchelt kernelben találtam rá utalást.
A btusb.c -ben a

static const struct usb_device_id blacklist_table[] = {

részt egészítsd ki ezzel:


{ USB_DEVICE(0x1131, 0x1004), .driver_info = BTUSB_WRONG_SCO_MTU },

// Happy debugging, suckers
#define true (rand() > 10)

Sajnos nem nyert.
Ugyanazt írja rá a dmesg.
Asszem én is hagyom mára.
De most már hogy bármilyen modult tudok rá fordítani, betölteni, nem kellene itt feladni :)

Megnéztem a raspberry kernelében a btusb.c-t (https://github.com/raspberrypi/linux/blob/rpi-3.12.y/drivers/bluetooth/…)
Ez sem tartalmazza azokat amiket írtál. De hát ugye mégis megy vele az bluetooth...

A segítséget pedig köszönöm!
Ha jutsz majd valamire, azt valahova feljebb írd be válaszként, mert már nagyon keskeny ez a dobozka :)

A hosszú szál folytatása:

Egyébként megfigyelve, a Raspberry kernel logját. Már azelőtt felismeri az eszközt, mielőtt betöltené a bluetooth modulokat:
...
[ 204.121811] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 204.121829] usb 1-1.2: Product: ISSCEDRBTA
[ 204.121845] usb 1-1.2: Manufacturer: ISSC
[ 204.248732] Bluetooth: Core ver 2.16
[ 204.250718] Bluetooth: HCI device and connection manager initialized
...

Tehát talán valami még a modulok előtt kellene a felismeréshez...

Ilyen mélységben már abszolút nem vagyok szakértője a dolognak, de egy helyen ezt írják:
Android used ueventd and not udev. Try looking under /system/usr/idc/ and /data/system/devices/idc/ to find or create an idc file for your device.

Mindjárt lecsekkolom mi van itt / mi kellhet ide..

Update:
Az itteni fájlokkal (alig van 1-2) nem igazán jutok semmire...

Mennyire van jelentősége nem tudom, de ha rádugom a BT-t, akkor létrejönnek új bejegyzések a /sys/class/rfkill/ -ben.
Ezekben meg is találhatók aztán a BT adatai, pl:
# cat /sys/class/rfkill/rfkill8/device/address
00:11:67:D5:85:C5
# cat /sys/class/rfkill/rfkill8/device/name
ISSCEDRBTA

Az a durva, ha így indítom:
hciconfig hci0 piscan

Akkor a másik tabletem meg is találja!

Viszont a hcitool scan -re ez nem találja meg a másik tabot.

Update 1:

Feltettem egy androidot Virtualboxba. Simán kezeli az is ezt a BT dodge-ot...
Bár semmilyen modult nem tölt be hozzá, gondolom bele van minden fordítva a kernelbe.

Update 2:

Szereztem egy másik BT dodge-t. Sajnos ezzel is ugyanazt produkálja.
Viszont ezt így rátudtam dugni a PC-re és ott is kísérletezgetni a hcitool-al.

Hát az van, hogy a hcitool scan a PC-n és a tableten is megtalálja a másikat.
Szóval látják egymást.

A legszebb amikor a másik tabon is bekapcsolom a BT-ot. Ekkor minden eszköz látja a másikakat :)

Most az a kérdés, ha már így mindenki lát mindenkit, akkor mi a jó fene kell még az androidhoz, hogy teljes értékű legyen a bluetooth?

Ami még fura az androidon futtatott hcitool scan-nél, hogy nagyon lassú, néha time out-ol is.
Illetve a scan eredményénél az eszközök nevét nem írja ki.

És ami nagyon érdekes, lát egy harmadik eszközt, amiről nem is tudom micsoda! Ezt sem a PC, sem a másik tab nem látja! :D

Hát igen, ezen a ponton túl már nekem sincs ötletem.
Talán valamilyen blueetooth kezelő program kellene. Talán a bluez?
Ilyet viszont nem találtam androidra. Illetve azt találtam, hogy asszem 4.3-tól valami bluedroid felel a bluetoothért. De van bluez is ezekre magasabb verziókra.
Kérdés, hogy akkor 4.0-ban (és alatta) mit ad teljes értékű BT támogatást...
Noh ezt kell kiderítenem most! :)