I moduli del kernel ed i firmware

Quante volte ci siamo imbattuti in frasi del tipo “hai installato i dirver per la periferica X?”

In GNU/Linux questa è un’operazione che non serve quasi mai, vediamo perchè.

I driver per l’hardware sono a corredo del kernel, in forma di “moduli” caricabili al momento dal kernel stesso, a seconda della tipologia di periferica collegata.

Per chiarirci le idee facciamo un esempio pratico.

Analisi del firmware

Ho sotto mano questo adattatore usb bluetoth D-Link DBT-122 leggo sull’etichetta.
Cosa succede se lo collego alla porta USB?, vediamo nel dettaglio:

per vedere i messaggi dal kernel usiamo il comando dmesg in una finestra di terminale
[ 690.450391] usb 4-1: new full-speed USB device number 3 using uhci_hcd
[ 690.611575] usb 4-1: New USB device found, idVendor=07d1, idProduct=f101
[ 690.611580] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 690.611582] usb 4-1: Product: D-Link DBT-122
[ 690.611583] usb 4-1: Manufacturer: Broadcom Corp
[ 690.672323] Bluetooth: Core ver 2.21
[ 690.672343] NET: Registered protocol family 31
[ 690.672343] Bluetooth: HCI device and connection manager initialized
[ 690.672347] Bluetooth: HCI socket layer initialized
[ 690.672349] Bluetooth: L2CAP socket layer initialized
[ 690.672354] Bluetooth: SCO socket layer initialized
[ 690.720471] usbcore: registered new interface driver btusb
[ 691.012060] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 691.012062] Bluetooth: BNEP filters: protocol multicast
[ 691.012065] Bluetooth: BNEP socket layer initialized
[ 691.047618] Bluetooth: RFCOMM TTY layer initialized
[ 691.047624] Bluetooth: RFCOMM socket layer initialized
[ 691.047630] Bluetooth: RFCOMM ver 1.11

Analizziamo questo output:

le prime 4 righe ci dicono come il kernel ha riconosciuto l’hardware in questione, si appoggia ad un database dei codici identificativi dei produttori e dei modelli, ha anche identificato correttamente la pennetta con il suo nome esatto!

Oltre ad informarci che il chipset è Broadcom.

Le restanti linee ci informano sulle caratteristiche fornite e se l’inizializzazione è andata a buon fine.

con il comando lsusb (lista i dispositivi usb) otteniamo:
~> lsusb
Bus 002 Device 002: ID 04b8:0885 Seiko Epson Corp. Stylus NX230 Series
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 15a4:9016 Afatech Technologies, Inc. AF9015 DVB-T USB2.0 stick
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0079:0006 DragonRise Inc. Generic USB Joystick
Bus 004 Device 003: ID 07d1:f101 D-Link System DBT-122 Bluetooth
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

alla riga evidenziata compare  il nostro adattatore riconosciuto, come facciamo invece a scoprire quale modulo (ovvero Driver) è utilizzato?

il comando lsmod ci viene in soccorso:
:~> sudo lsmod | grep usb <__ qui ho filtrato la lista a dispositivi USB (grep usb)
root's password:
btusb 49152 0
btrtl 16384 1 btusb
btbcm 16384 1 btusb
btintel 16384 1 btusb
bluetooth 532480 29 bnep,btbcm,btrtl,btusb,rfcomm,btintel
dvb_usb_af9015 36864 0
dvb_usb_v2 36864 1 dvb_usb_af9015
dvb_core 131072 1 dvb_usb_v2
rc_core 32768 4 rc_msi_digivox_ii,dvb_usb_v2,dvb_usb_af9015
usblp 20480 0
usbhid 53248 0
usbcore 270336 8 btusb,usblp,uhci_hcd,ehci_hcd,ehci_pci,usbhid,dvb_usb_v2,dvb_usb_af9015
usb_common 16384 1 usbcore

vediamo che i moduli (driver) caricati sono btusb, btbcm, bnep, btrtl. Altri listati sono di altri dispositivi tuner DVB_T e basi usb.

Dall’output del comando dmesg sappiamo che per questo dispositivo non è stato necessario caricare nessun firmware (non vi sono righe che lo indicano) in caso ne servisse come facciamo a saperlo?

Di seguito osserviamo meglio l’output del precedente dmesg
[ 13.107225] usb 1-2: dvb_usb_v2: found a 'Afatech AF9015 reference design' in cold state
[ 13.169539] usb 1-2: dvb_usb_v2: downloading firmware from file 'dvb-usb-af9015.fw'
[ 13.223140] usb 1-2: dvb_usb_v2: found a 'Afatech AF9015 reference design' in warm state
[ 13.606360] usb 1-2: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[ 13.718182] usb 1-2: DVB: registering adapter 0 frontend 0 (Afatech AF9013)...
[ 14.281671] input: Afatech AF9015 reference design as /devices/pci0000:00/0000:00:1a.7/usb1/1-2/rc/rc0/input10
[ 14.281842] rc0: Afatech AF9015 reference design as /devices/pci0000:00/0000:00:1a.7/usb1/1-2/rc/rc0
[ 14.281847] usb 1-2: dvb_usb_v2: schedule remote query interval to 500 msecs
[ 14.281850] usb 1-2: dvb_usb_v2: 'Afatech AF9015 reference design' successfully initialized and connected
[ 14.281884] usbcore: registered new interface driver dvb_usb_af9015

è un tuner DVB_T alla riga 2 carica il firmware necessario.

Alcuni firmware sono proprietari e di base non sono inclusi nelle distribuzioni più sensibili alla filosofia free software per cui potrebbero non essere installati di default.

Per fortuna openSUSE ci viene incontro e possiamo installare anche il firmware extra presente nel repo non oss (non open source software) per fare questo apriamo YAST -> gestione pacchetti e digitare nel box di ricerca “firmware” Si otterrà una lista di pacchetti.

Il primo è Firmware del kernel se non è già installato lo selezioniamo e confermiamo.

Il sistema installerà il pacchetto dei vari firmware che coprono la maggior parte dei dispositivi comuni tipo schede wifi ethernet e vari dispositivi.

ricollegando il dispositivo possiamo verificare con dmesg se è riconosciuto ed configurato correttamente.

Nella maggior parte dei casi il processo è trasparente e non ci accorgiamo minimamente di tutta la questione “drivers”.

Spero che questo articolo/mini-guida a sia stato d’aiuto, se avete commenti e/o integrazioni da fare contattatemi sul forum, rispondo alla sezione hardware

31 commenti su “I moduli del kernel ed i firmware

  • luglio 25, 2017 at 1:18 pm
    Permalink

    anche da yast->Informazioni_Hardware si possono avere queste infomazioni, peccato che manchi come in windows un indicazione/segnalazione di “mancanza-driver”: Bisogna andare nella sottosezioni “driver” di ogni componente per sapere (Driver=Attivo)se il driver è attivo (lo segnalerei come bug).
    Comunque io carico sempre kernel-firmware , che risolve il 90% dei problemi.
    la lista completa firmware è qui:
    https://software.opensuse.org/search?utf8=%E2%9C%93&q=firmware&search_devel=false&search_unsupported=false&baseproject=openSUSE%3ALeap%3A42.2

  • luglio 25, 2017 at 1:28 pm
    Permalink

    sarebbe bello un sistema che fa auto-analisi dell’Hardware e suggerisca i pacchetti da caricare, questo lo si potrebbe proporre alla OpenSuse come anche un formato file (basterebbe un XML ma il lato complicato è il configuratore) che sapendo il nome del PC automaticamente configuri in modo ottimale OpenSuse, esempio eseguendo “packardbell-k101.confi” su pakard bell k101 automaticamente carica i moduli kernel appositi (descritti nel file .confi), metta in blacklist quelli errati, aggiusti le varie configurazioni PC, ecc. Potrebbe essere utilizzato anche per periferiche, come per esempio stampanti, “Epson101.confi” automaticamente installa e configura la epson 101.

    • luglio 25, 2017 at 5:50 pm
      Permalink

      Una cosa simile già provvede yast, salvo hardware particolari, se un firmware é presente, verrà automaticamente installato, cin relative eventuali utility, se c’è un id hardware corrisoindente. Su alcuni hardware no.

      Esempio nvidia.. se attivi i repo ufficiali e dai zypper dup, riconoscera la periferica ed installera il corretto driver, o il mio mouse logitech, ha in automatico é stato installato lomoco dopo aver riconosciuto l’hardware. Ma alcune periferiche, come alcune schede broadcom, richiedoni spesso installazione manuale

    • luglio 25, 2017 at 5:55 pm
      Permalink

      si, ma quello che intendo io è proprio che tu tramite il file che dice che macchina possiedi gli dici che deve essere impostato in quel modo. In questo caso basterebbe istallare la distro (esempio OpenSuse) e poi installare la configurazione di quel PC e magicamente sarebbe tutto OK senza cercare, analizzare, sapere che hardware possiede, ecc.

    • luglio 25, 2017 at 5:59 pm
      Permalink

      Tante macchine esistono 🙂 l’idea e sicuramente carina, ma considerando che i problemi si rilegano a pochi hw (ed esiste anche le informazioni hardware ds interfaccia) non so se valga la pena 🙂 tanto alla fine si tratta sempre di wifi o periferiche particolari 🙂

    • luglio 25, 2017 at 6:08 pm
      Permalink

      però quando capita è un dramma specie per l’utente non molto avanzato e un impedimento per l’installatore che porta alla classica frase “Linux è difficile” oppure “ma non esistono i driver per Linux” cosa che con l’istallazione su diverse macchine NON è vero, quindi avrebbe un ottimo effetto propagandistico.

    • luglio 25, 2017 at 6:11 pm
      Permalink

      Basterebbero lo usassero come windows molto spesso. Aprono system informazioni, guardano il modello, aprono yast immettono marca e cercarno il firmware. Diciamo che molti si incartano perché partono dal presupposto, che é difficile.

      Le stesse operazioni, se non conosci l’hardware, vanno fatte anche in Windows 🙂

    • luglio 25, 2017 at 6:13 pm
      Permalink

      Salvo hardware veramente rari non supportati, quindi solo col simbolino di windows, e allora si, li e effettivamente più difficile, ma la mentalità giusta é, stai cercando di installare un hardware non supportato dal produttore per linux

    • luglio 25, 2017 at 6:14 pm
      Permalink

      in windows esiste il pacchetto per quella macchina che contiene i vari driver d’istallazione che fanno anche configurazioni. Dunque la mia sarebbe un idea più avanzata di quella Windows.

    • luglio 25, 2017 at 6:17 pm
      Permalink

      Non e piu difficile di windows quindi, lo diventa solo quando vuoi fare cose oltre, tipo installare hardware non supportati o ti cimenti nella bash che oggi non é essenziale, la difficoltà é quindi una sensazione, che parte secondo me dalla percezione che spesso gli stessi utenti linux danno. Una persona nuova, chiede, e viene spiattellato righe di bash da copiare ed incollare o subito si parte dal presupposto della compilazione del modulo. Ormai per me, operazioni da advanced users che non andrebbero riferiti come metodi standard perche é ovvio, si spaventa le persone

    • luglio 25, 2017 at 6:17 pm
      Permalink

      Il pacchetto c’è perché viene fornito dai produttori 🙂 giustamente

    • luglio 25, 2017 at 6:19 pm
      Permalink

      Quindi andrebbe contattato i produttori di inserire un xml.

      Ma il problema é, se compri una macchina supportata non hai problemi, se la macchina ha hardware non supportato, quindi non é nell’intenzione del produttore che sia supportata da linux, l’xml a quel punto serve a ben poco

    • luglio 25, 2017 at 6:21 pm
      Permalink

      Io quando mi trovai il pc in mano subito verificai, ed e un hp che supporta ufficialmente linux, funziona ready to go.

      Il problema quindi é sempre alla fonte, il supporto da parte dei produttori

    • luglio 25, 2017 at 6:23 pm
      Permalink

      Io tante volte in windows ai tempi mi trovai a usare software di system information per scovare lhardware a windows sconosciuto, e cercare il driver sul web, sono operazioni comuni su ogni pc. Diverso é se é ub portatile o si ha tutti i cd dei driver di installazione.

    • luglio 25, 2017 at 6:23 pm
      Permalink

      il pacchetto è fornito dai produttori in Win, invece il “pacchetto” (il file per configurare) per Linux andrebbe fornito dagli utenti (ma anche i produttori trarrebbero vantaggio facilitando la strada Linux) che già hanno quella macchinae già lo hanno risolto in un contenitore (repo) . quindi dovrebbe essere il più semplice possibile da costruire.

    • luglio 25, 2017 at 6:24 pm
      Permalink

      La gente deve capire che non é difficile, tutto qua, partono da un presupposto, non capisco la pretesa che Linux debba essere più facile di altri sistemi per non essere difficile

    • luglio 25, 2017 at 6:25 pm
      Permalink

      “non capisco la pretesa che Linux debba essere più facile di altri sistemi per non essere difficile” se noti la frase contiene una contraddizione

    • luglio 25, 2017 at 6:25 pm
      Permalink

      Beh parli di uno share, ci sta, un po’ complesso da gestire senza errori

    • luglio 25, 2017 at 6:26 pm
      Permalink

      Nessuna contraddizione 🙂 la contraddizione é nella cosa in se, non nella frase

    • luglio 25, 2017 at 6:29 pm
      Permalink

      Nel senso che bisogna rendere linux esempio, più facile di windows, per far si non risulti difficile.

      Vedo nuovi utenti che si impallano sulle cose più semplici perché partendo dal presupposto, sia difficile, partono a cercare le soluzioni più difficili, quando hanno la soluzione sotto agli occhi, da interfaccia grafica

    • alexraffa
      luglio 26, 2017 at 7:38 am
      Permalink

      Sarebbe bello! Per fortuna non è necessario! in Linux i moduli sfanno parte del kernel e la stragrandissima maggioranza sono già nell’albero del kernel, (a parte hardware esotico o iperspecializzato) e quindi si può dire che se un dispositivo quando collegato se funziona OK, altrimenti probabilmente non funzionerà mai. Discorso diverso per eventuali firmware (che non sono drivers/moduli, ma software che va caricato nel dispositivi perchè funzioni).
      Produttori tipo epson che forniscono dei pacchetti da installare in realtà contengono del firmware e magari qualche libreria proprietaria per il dispositivo.

    • agosto 30, 2017 at 11:28 am
      Permalink

      Serena Boschetti Linux di piu difficile nion ha proprio nulla , da sempre è windows il SO in assoluto più articolato e complesso. E la pretesa di trasformare linux in un clone windows , è semplicemente assurda . Il problema driver è un non problema , perfettamente identico per qualsivoglia SO , se. il produttore hardware li rilascia anche per linux , ci sono basta scaricarli ed installlarli. I driver in linux sono parte modulare delllo stesso kernel , indipendenemente da che ne facciano già parte nativa o si debba far ricorso a driver proprietari., anche i driver proprietari in linux vengono resi disponibili in formato sorgente , compito poi della propria distribuzione compilarli ed inserirli come moduli nel kernel in uso. E l’ autoanalisi è presente da lunghi anni in tutti i SO , non è esclusiva di alcun SO . Linux non è ne nato ne creasciuto come alternativa ai SO di Microsoft ,ma bensi come alternativa gratuita e opensource ai sistemi operativi unix base , con il preciso motivo di conservarne sia il più alto livello di compatibilità ambiente che stabilità e sicurezza .

    • agosto 26, 2017 at 5:48 pm
      Permalink

      Sardi, sono icon pack scaricabili, che poi metto nella relativa cartella in home, però ho modificato il set mescolando vari pack (ci sonno vari set nel download)

    • agosto 26, 2017 at 6:35 pm
      Permalink

      Sono fuori casa ma se cerchi sardi icons trovi il sito e il link del download che rimanda a sourceforge

Lascia un commento