Benq S6 EC per tutti

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!

Una via per Tartaglia

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`.

Repressione e prospettive

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 ...

Filosofia agricola

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.

Scogliera rossa

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.

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.

Sulla democrazia, dalla Cina

In traduzione qui due post apparsi su BBS cinesi che stanno facendo molto discutere. Non mi sembra che nessuna delle due argomentazioni sia particolarmente profonda, la seconda in special modo sembra un discorso che potrebbe stare su un editoriale di stampo liberal-progressista su un nostro giornale, ed e` tutto dire.

Pero` questo passaggio m'e` piaciuto e lo riporto:

I often think about whether the people want democracy or a stable and plentiful life? After much thinking, the answer has to be the latter. Any form of democracy is ultimately just an ideology, a configuration of the system, a means whose ultimate end is to bring world peace and bountiful living. Therefore, the ultimate standard for any kind of democracy has to be based upon the standard of living of the people and the stability of the world. Any democracy that allows the people to live in peace and abundance is good; any democracy that causes disturbances around the world or leave the people unfed is bad.

Therefore, democracy must not be made absolute. We should not say that "democracy is good thing" just as we should not say that "democracy is a bad thing." The key is how much do the people themselves benefit. Such a standard is reliable and trustworthy. It is a lot better than the empty discussion about democracy that lead absolutely nowhere.

Fisica terrorista!

Dall'ultima press release del CERN:

A person arrested in Vienne, France, on 8 October under suspicion of links to terrorist organizations is a physicist who has been working on analysis projects with the LHCb experiment at CERN since 2003. He was not a CERN employee and performed his research under a contract with an outside institute. His work did not bring him into contact with anything that could be used for terrorism: CERN is a particle physics research laboratory whose research addresses fundamental questions about the universe. None of our research has potential for military application, and all our results are published openly in the public domain. CERN is providing the support requested by the French police in this enquiry.

A parte ovviamente distruggere il sistema solare coi buchi neri :P