dasnakeの日記 RSSフィード

22-06-2010

Benq S6 EC per tutti 00:31

Un veloce preambolo: mi trovo in possesso di un MID Benq S6.

I MID sono quegli oggetti tipo mezzo iPad, piu` o meno con lo stesso senso e un terzo del costo, ma che hanno provato a commercializzare prima che Steve Jobs ci spiegasse che ne avevamo bisogno. Ovviamente erano basati su atom, con linux e software opensource (ma volendo, proprio volendo, ci puoi buttare su anche il buon vecchio finestre). Ovviamente non hanno avuto successo.

Il Benq S6 arriva con un sistemino midinux moolto vecchio, basato su un ibrido tra varie fedora e le repository originali sono offline. Per poterlo usare nel mondo moderno bisogna necessariamente cambiare distro.

L'affarino ha un hardware non proprio dei migliori, con il famigerato poulsbo gma500 (per giunta nella versione pacco ul11l), ma si risolve piu` o meno tutto. E` piuttosto simile ad altri MID uguali e c'e` un sacco di gente che s'e` sbattuta per far funzionare tutto a modino, compresa la riproduzione di video con l'accelerazione grafica (tipo questo tipo qui con le sue distro).

C'e` un grosso problema pero` che distanzia il benq s6 da tutti gli altri MID: la wifi, il bluetooth e il modem 3G sembrano funzionare solo e solo unicamente con la distro originale.

Il mistero si risolve leggendo un post qui dove viene spiegato che wifi e compagnia cantante e` comandata da uno switch hardware. Lo switch hardware ha il suo driver apposito, ma il tipo del post ci dice candidamente di cercare i sorgenti nel CD allegato al Benq S6 e ricompilarselo.

Facile vero? No, perche` i sorgenti non ci sono. Nada. Niet.

Allora che si fa, ci si arrende? Pare che molti abbiano intrapreso questa strada, dopo tutto il MID e` un oggetto inutile la meta` di un iPad e si puo` vivere anche senza.

Io non mi sono arreso, quindi mi sono messo a guardare un po' quello che c'e` a disposizione: il modulo del driver.

Modinfo mi dice

filename:       benqecif.ko
version:        2.1.8
description:    BenQ EC Interface
author:         Weichen Lin
license:        GPL
srcversion:     B9AE214E3CD0D70F5025980
depends:        
vermagic:       2.6.22.18-2 SMP mod_unload 586 

GPL! Il nome dell'autore! Lo trovo, scrivo, aspetto.

Niente.

"Use the source, luke" ma come si fa senza sorgenti? Tsk, mi direbbe un vero hacker, hai il binario, hai tutto.

Ok, prima di tutto vediamo che fa il driver: crea un po' di file sotto /proc/acpi/benq_ec_if dai nomi tipo "sysled" "wireless" "wirelesslanled" e cose cosi`. Da questo impariamo che e` un driver ACPI EC (Embedded Controller).

Cerco un po' di documentazione a giro e scopro che gli embedded controller sono una cosa piuttosto standard: ci si parla con un protocollo banale attraverso due ioport e si possono scrivere 256 registri da 8 bit. Fine. Il significato di questi 256 registri e quello che fa l'embedded controller quando ci scrivi non dipende solo dal chip usato (in tal caso avevo gia` il cacciavite pronto), ma anche da come e` stato programmato.

Uff. Un primo tentativo e` stato guardando come cambiavano i registri leggendoli tutti prima e dopo aver abilitato/disabilitato/acceso/spento con questo utilissimo script qui. Cosi` ho scoperto che i led si possono comandare scrivendo il registro 0xb0, carino (e non la maniera che aveva in testa benq, scopriro` dopo), ma poco utile.

E` giunta l'ora di fare l'hax0r, quindi passiamo benqecif.ko a fil di nm.

Quasi tutte le funzioni hanno un nome che dice tutto, ma soprattutto scopro che usa l'interfaccia ACPI per comunicare con l'EC! Infatti le uniche funzioni esterne al modulo che possono leggere/scrivere le porte sono le ec_write ed ec_read standard del kernel.

Bene, mi dico, objdump tutta la vita, cerco di ricostruire da quello che ho capito fin ora (sul registro 0xb0 ci stanno i led) anche le altre funzioni.

Purtroppo non trovo 0xb0 da nessuna parte (che sia nascosto in .rodata ? da qualche altra parte?) e scopro anche che la maggior parte delle funzioni con nome banali tipo benq_set_wirelesslanled che da quello che ho capito fin ora dovrebbe scrivere |= 0x8 su 0xb0 fa una sequenza di ec_read, ec_write, ec_write, ec_read. Il primo read mi torna, il primo write ovviamente si, l'ultimo read potrebbe essere un controllo, ma il secondo write? Uhmm, il protocollo e` piu` complesso che modificare bitmask!

Что делать?

A questo punto non rimane che scendere negli inferi. Mi leggo phrack e mi leggo il testo sacro di Silvio Cesare e capisco. Code injection nel modulo.

Alla fine non uso nemmeno l'artiglieria pesante, basta scriversi due funzioni di hook per ec_read/ec_write che scrivano con printk quello che stanno facendo, modificare con un hex editor i nomi delle funzioni in benqecif.ko, relinkare il tutto (relocatable object ftw) e sostituire il modulo col nostro codice con quello vecchio.

Facile. Dopo *due giorni* di studio extra su come sono compilate le funzioni acpi nel kernel (fastcall questo sconosciuto) riesco ad ottenere il risultato voluto: ogni volta che il driver propietario, binario, di cui non si trovano i sorgenti, vuole fare qualcosa mi scrive gentilmente sul log di sistema cosa sta cercando di fare in modo che possa prendere appunti.

Il risultato di tutto questo e` la scoperta che la misteriosa interfaccia esegue ogni operazione con lo stesso protocollo.

Per scrivere: legge il registro 0x60, scrive in 0x61 il valore dell'operazione (0 == spento, 1 == acceso, 2 == per i led che lampeggiano), scrive in 0x60 l'opcode dell'operazione, poi legge 0x60.

Per leggere: legge il registro 0x60, scrive in 0x60 l'opcode, legge 0x60, legge in 0x61 il valore richiesto.

Le letture di 0x60 devono sempre risultare 0x0 (valori diversi sono un errore, suppongo).

Gli opcode sono:

  • 0x2a get_wireless
  • 0x29 set_wireless
  • 0x28 get_hdspa
  • 0x27 set_hdspa
  • 0x42 set_sysled
  • 0x40 set_wirelesslanled
  • 0x41 set_wwanled
  • 0x43 set_chargingled
  • 0x2b set_gps (non c'e` gps nel benq s6, ma tant'e`)
  • 0x18 set_sd_cd (non ho ancora capito che fa, credo cambi controller mmc)
  • 0x16 set_keylock

Diverso dagli altri e` get_powerbutton, fa due letture in 0x46 e 0x47, ma ancora non ne ho capito il significato.

Comunque tanto basta: con lo script in perl di cui ho dato il link un po' sopra sono riuscito a replicare la sequenza per attivare la wifi sotto nMind 0.5 (dal blog di mindbuntu) e si accende!

E` fatta. Viva l'iniezione del codice nei moduli! Viva la rivoluzione!

15-12-2009 emendiamo vai, che l’originale fa schifo

Una via per Tartaglia 17:11

A Bologna c'e` via Zamboni. Questa via e` dedicata a Luigi Zamboni, studente morto in cella dopo aver tentato una sommossa contro lo stato Pontificio. Incidentalmente e` ritenuto l'inventore del tricolore della bandiera italiana.

A Bologna, all'altezza dell'incrocio tra via Zamboni e viale Filopanti - un bel viale, con gli alberi -, c'e` un'altra via Zamboni, dedicata pero` ad Anteo Zamboni.

A Milano c'e` via Tartaglia. Questa via e` dedicata a Niccolò Fontana detto Tartaglia, il celebre matematico italiano del sedicesimo secolo. Incidentalmente fu oggetto di un antico, ma attuale, scontro col barone accademico del tempo in cui ebbe la peggio.

A Milano, all'altezza dell'incrocio tra via Tartaglia e via Cenisio - una bella via, con gli alberi -, non c'e` un'altra via Tartaglia, dedicata pero` a Massimo Tartaglia, e spero in un futuro in cui non ci sara`.

MeloneMelone 2010/03/18 10:35 Ciao Dasnake,
Ho scoperto il tuo blog via FCosta. Sono decisamente in linea con i tuoi commenti. Ti ho anche citato in una recente diatriba con il giovane blogger di sinistra (http://www.francescocosta.net/2010/03/17/che-ne-valga-la-pena/#comment-11204)
Ho aggiunto con piacere il tuo blog ai miei feed. A risentirci presto.

Buona giornata
Melone

dasnakedasnake 2010/03/18 10:58 grazie mille, anch'io m'ero messo a spulciare il tuo blog, in verita`gia` dal precedente commento sul blog di fcosta. Condivido in toto latua critica al nostro giornalista (di sinistra?) e la sua risposta ne ha messo in luce tutti i limiti: poca voglia di mettere in discussione le proprie idee ed una pessima scelta di maestri. E` un peccato perche` non scrive male ed ha l'occasione di scrivere fuoridalla limititatissima sfera dei blog, purtroppo pero` quella rigidita` gli fa prendere cantonate clamorose e nessuna speranza di correggere il tiro.

05-11-2009 Chang’e

Repressione e prospettive 21:12

Da boingboing apprendo dell'esistenza di questo sito che si propone di tenere traccia di tutti i blogger minacciati dal governo, processati, incarcerati o appena rilasciati.

Chiaramente il primo della lista dei cattivoni e` il governo cinese con 34 blogger nei casini, seguito da Egitto (29) e Iran (23) (questi numeri tendono a variare, il sito e` in aggiornamento).

E tutto questo e` solo la conferma di una cosa che gia` sapevamo: il governo cinese e` piuttosto repressivo nei confronti degli internauti, l'egitto pure era un caso conosciuto, anche se tendiamo a dimenticarcene perche` Mubarak e` amicone di tutti dalle nostre parti, e l'Iran certo non stupisce.

Guardiamo pero` la cosa da un'altra prospettiva: la cina ha 338 milioni di internauti (fonte). Trecentotrentottomilioni di utenti e trentaquattro blogger nei casini.

Chiariamolo subito: un blogger non deve andare nei casini per il solo fatto di raccontare quello che pensa, nemmeno uno su dieci milioni.

Detto questo preferirei fare il blogger in Cina che a Monaco, secondo questa inchiesta: un blogger nei casini su ventimila utenti di internet. Ben 500 volte piu` repressivi della Cina!

;)

PS: Ho come il sospetto che i blogger nei casini siano piu` di 34, pero` ho come l'impressione che non arriveranno facilmente a 17000 ...

30-10-2009 tsar bomba

Filosofia agricola 10:50

Come sempre quando sono alle strette con una scadenza seria e inderogabile (la tesi di dottorato) mi sento attivo e pieno di idee che mi distraggono dall'obbiettivo principale.

In realta` l'idea che mi ossessiona in questo momento ce l'avevo gia` da qualche tempo, ma i tentativi fatti prima dell'estate erano stati piu` svogliati. Ora finalmente ho la motivazione giusta: perdere tempo e ritrovarmi con l'acqua alla gola per la consegna della tesi!

L'idea? Coltivare ortaggi e piante aromatiche con un sistema di coltura aeroponica.

Cosa mi spinge?

Da anni sto sviluppando alcune idee che non ho mai avuto il tempo di organizzare per bene e una di queste idee e` che le foreste siano molto piu` gradevoli dei campi arati. Poi i campi tendono ad essere tanta terra posseduta da pochi e lavorata da terzi, con tutte le conseguenze che la storia c'insegna, dalle rivolte contadine medioevali ai sussidi della comunita` europea.

Senza stare a farla troppo lunga (perche` ne ho tante di idee a proposito, ma confuse) sono convinto che la strada verso la societa` del futuro prospera ed egalitaria passi attraverso una rivoluzione radicale nei mezzi di produzione del cibo. In particolare dobbiamo fare fuori i campi arati.

Come? Con un uso abbondante di tecnologia. La piu` accessibile delle tecnologie e` la coltura idroponica, ancora meglio con quella aeroponica.

Dopo essermi informato un po' ho deciso che i miei argomenti da dopocena con gli amici sarebbero stati piu` forti se ci avessi provato sul serio, quindi mi sono attrezzato e ho iniziato a costruirmi il mio sistema aeroponico. Abbondando di tecnologia, ovviamente.

Alle prossime puntate foto e dettagli.

12-10-2009 interacting, grand-design spiral galaxy

Scogliera rossa 04:27

Sabato al Chicago Film Festival sono andato a vedermi Red Cliff.

Si tratta della versione da 154 minuti del colossal cinese Chi bi (280 minuti in due parti), in cinese con i sottotitoli.

f:id:dasnake:20091013040526j:image

La storia e` quella di uno dei capitoli delle cronache dei Tre Regni, un periodo fondamentale della storia cinese, molto romanzato nelle epoche successive. Una specie di Iliade cinese, ma piu` recente nel tempo (terzo secolo) e radicata piu` nella storia che nel mito.

A me personalmente il film e` piaciuto: non e` niente di incredibilmente emozionante dal punto di vista dei concetti espressi o della trama, c'e` pero` una regia discreta, attori perfetti, fotografia (soprattutto i colori) fantastica come ci ha abituato questo genere di cinema cinese e in buona sostanza un monte di botte.

La versione in due parti per un totale di 280 minuti forse sarebbe stata un po' un azzardo per il pubblico occidentale, ma io l'avrei preferita. In questa versione la parte finale e` una buona mezz'ora di battaglia, tipo l'ultimo capitolo del signore degli anelli, avrei gradito maggiormente un po' piu` di background e sottotrame come nella versione originale.

Consigliato.