Aigor

[TUTORIAL]Compilare moduli per dsm 6.1

Recommended Posts

Questo Howto serve SOLO per compilare moduli di kernel che non sono già inclusi nella release standard di Synology

Non serve per costruirsi una immagine di boot da mettere su chiavetta USB.

 

Per poter raggiungere il nostro scopo abbiamo bisogno di 4 ingredienti.

Una linux box, non importa la distribuzione

Tutti i pacchetti necessari alla compilazione del kernel, in base alla distro, googolate per sapere come installarli.

Un minimo di competenza in linux

Sorgenti del kernel e delle toolchains.

Piccola digressione, i toolchain sono tutti gli strumenti che mi permettono di compilare un kernel, o anche dei programmi, su una linux box che però dovranno girare in un ambiente diverso da quello su cui sto sviluppando/compilando.

In gergo questo ci chiama cross compilazione e funziona anche con architetture diverse, per esempio potrei sviluppare su X86 e voler ottenere un eseguibile che giri su raspberry.

N.B. le schermate che seguono sono prese dalla mia macchina sulla quale c'e' Centos7 senza ambiente grafico, ma valgono per qualunque sistema unix/linux.

 

N.B.2 Non scrivo ogni singolo passaggio confidando che sappiate di cosa parliamo e che abbiate una certa dimestichezza con linux, quindi non spiegherò come editare e altre cose così basilari, se non le conoscete, questo howto non fa per voi, oppure, googolate per sapere i passaggi base.

 

Cominciamo, come vedete abbiamo bisogno di questi 2 pezzi, ossia i sorgenti e i famosi toolchain.

-rw-r--r--.  1 root root 300814480 14 mar 04.25 braswell-gcc493_glibc220_linaro_x86_64-GPL.tar
-rw-r--r--.  1 root root  78099976 15 mar 04.46 linux-3.10.x.txz
root@dev-linux:~#

Questi sono i link

https://downloads.sourceforge.net/project/dsgpl/Synology%20NAS%20GPL%20Source/15047branch/braswell-source/linux-3.10.x.txz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdsgpl%2Ffiles%2FSynology%2520NAS%2520GPL%2520Source%2F15047branch%2Fbraswell-source%2F&ts=1490265668&use_mirror=netix

https://downloads.sourceforge.net/project/dsgpl/DSM%206.1%20Tool%20Chains/Intel%20x86%20Linux%203.10.102%20%28Braswell%29/braswell-gcc493_glibc220_linaro_x86_64-GPL.txz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fdsgpl%2Ffiles%2FDSM%25206.1%2520Tool%2520Chains%2FIntel%2520x86%2520Linux%25203.10.102%2520%2528Braswell%2529%2F&ts=1490265766&use_mirror=netix

per farne il download da console dovrete usare wget che di norma è presente in quasi tutte le distro, eventualmente leggete come installarlo in base alla distro che avete.

Una volta scaricati entrambi i pacchetti, gli dovete cambiare nome, wget li chiama come tutto il link, quindi prima di qualunque cosa cambiategli nome.

Sistemati i nomi dobbiamo scompattare il toolchain nella cartella /usr/local ( non e' obbligatorio usare per forza questa cartella, ma poi dovrete ricordarvi dove lo avete installato )

Una volta scompattato otterrete qualcosa di simile a questo.

 

root@dev-linux:/usr/local#ls -l
totale 94104
drwxr-xr-x. 3 root root       17  5 nov 16.38 bin
drwxr-xr-x. 8 root root     4096 15 ago  2013 x86_64-pc-linux-gnu
root@dev-linux:/usr/local#

come potete vedere c'e' una cartella che si chiama x86_64-pc-linux-gnu

drwxr-xr-x. 8 root root     4096 15 ago  2013 x86_64-pc-linux-gnu

Dove ci sarà tutto il necessario per compilare kernel e moduli.

siccome non mi piace digitare comandi lunghi ho aggiunto l'alias in basso nella mia .bashrc se non sapere come si fa, google e' vostro amico

alias dsm6.1make='make ARCH=x86_64 CROSS_COMPILE=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-'

Sostanzialmente la riga dice che quando digito "dsm6.1make" questo comando dovrà essere espanso con tutta la pappardella che sta dopo il simbolo "="

Ricordate quando dissi di segnarsi dove avevamo installato le toolchain ? ecco, se ci fate caso questo comando si riferisce proprio a quella cartella, quindi se le installate da un altra parte, semplicemente dovrete sostituire /usr/local/ con la cartella dove lo avete installato.

 

Veniamo ai sorgenti del kernel vero e proprio, una volta scaricati vanno scompattati da qualche parte in modo che abbiate una cartella come questa.

root@dev-linux:~#ls -l
totale 546856
drwxr-xr-x. 26 root root      4096 21 mar 18.37 linux-3.10.x
root@dev-linux:~#

Se andate a vedere dentro i sorgenti trovate una cartella che si chiama synoconfigs al cui interno ci sono le configurazioni per il kernel che synology usa nei suoi prodotti, come potete vedere troviamo braswell, broadwell, bromolow e così via, fate riferimento alla vostra synology per sapere di che architettura si tratta.

root@dev-linux:~/linux-3.10.x/synoconfigs#ls -l
totale 1044
-rwxr-xr-x. 1 root root 104078 23 feb 13.42 avoton
-rw-r--r--. 1 root root  42522 14 feb 17.25 back-porting-records
-rw-r--r--. 1 root root 105510 23 feb 13.42 braswell
-rw-r--r--. 1 root root 105948 23 feb 13.42 broadwell
-rw-r--r--. 1 root root 105611 23 feb 13.42 bromolow
-rw-r--r--. 1 root root 103555 23 feb 13.42 cedarview
-rw-r--r--. 1 root root 103184 23 feb 13.42 dockerx64
-rw-r--r--. 1 root root 106337 23 feb 13.42 grantley
-rw-r--r--. 1 root root    317 15 mar 04.35 Kconfig
-rwxr-xr-x. 1 root root   5842 15 mar 04.35 Kconfig.basic
-rw-r--r--. 1 root root  22639 15 mar 04.35 Kconfig.devices
-rw-r--r--. 1 root root  18956 15 mar 04.35 Kconfig.fs
-rw-r--r--. 1 root root   2068 15 mar 04.35 Kconfig.misc
-rw-r--r--. 1 root root   1492 15 mar 04.35 Kconfig.network
-rw-r--r--. 1 root root    922 15 mar 04.35 Kconfig.platform
-rw-r--r--. 1 root root 104946 23 feb 13.42 kvmx64
-rw-r--r--. 1 root root 101368 23 feb 13.42 x86_64
root@dev-linux:~/linux-3.10.x/synoconfigs#

Supponiamo che abbiate l'acrchitettura braswell e che siate nella cartella

linux-3.10.x/synoconfigs

Ora dobbiamo copiare la configurazione che ci interessa in modo da farla digerire al kernel che intendiamo compilare, il,comando è quello che vedete.

Cosa dice?

copia il file braswell nella cartella supriore chiamando .config

root@dev-linux:~/linux-3.10.x/synoconfigs#cp braswell ../.config

Perché .config? per due motivi, il primo, lo standard vuole che sia il nome del file per la configurazione del kernel, il secondo, perché in ogni sistema unix/linux i file che iniziano con il "." ( punto ) sono file nascosti e per visualizzarli bisogna usare il comando

ls -a -l

che dice di listare tutti i file disponendolo in colonna

root@dev-linux:~/linux-3.10.x#ls -a -l
totale 50540
drwxr-xr-x.  26 root root     4096 28 mar 13.50 .
dr-xr-x---.  14 root root     4096 28 mar 13.49 ..
drwxr-xr-x.  33 root root     4096 16 mar 16.48 arch
drwxr-xr-x.   3 root root     4096 21 mar 17.24 block
-rw-r--r--.   1 root root   105510 28 mar 13.50 .config
-rw-r--r--.   1 root root    18693 29 lug  2015 COPYING
-rw-r--r--.   1 root root    95317 29 lug  2015 CREDITS
drwxr-xr-x.   5 root root     8192 21 mar 18.37 crypto
root@dev-linux:~/linux-3.10.x#

 

Ora veniamo alla configurazione vera e propria, il comando che vedete lancia la configurazione a menù del kernel, quindi qui spetta a voi decidere quali moduli includere

root@dev-linux:~/linux-3.10.x#dsm6.1make menuconfig

Finita la configurazione dobbiamo compilare i moduli con il seguente comando

root@dev-linux:~/linux-3.10.x#dsm6.1make modules

Finita la compilazione i moduli si troveranno nelle rispettive cartelle del kernel e si chiameranno "qualcosa.ko" senza doppi apici, se già sapete come si chiama il modulo che vi serve, copiatelo semplicemente nella vostra synology, altrimenti dovrete andare a cercare TUTTI i moduli e, per comodità, copiarli in una cartella della macchina su cui state compilando, nel mio caso la cartella si chiama

/root/newmodules/

Il comando per cercare tutti i moduli all'interno del tree del kernel e copiarli in una cartella, è quello che vedete, questo va lanciato dalla cartella che contiene sia la cartella dei sorgenti del kernel che la cartella dove andranno i moduli

root@dev-linux:~#find ./linux-3.10.x/ -iname "*.ko" -type f -exec cp -p {} ./newmodules/ \;

 

 

Tutto qua, se notate passaggi poco chiari, o qualcosa che non capite, fatemelo notare.

Non rispondo a messaggi del tipo: "come faccio ad aggiungere un alias nella mia .bashrc? e dove si trova sto file? "

Come detto prima si presume che conosciate due cose di linux, se non le conoscete, semplicemente questo howto non vi serve.

Ciao! Miao! Bau! :grin:

Edited by Guest
  • Like 1

Share this post


Link to post
Share on other sites

Complimenti bel tutotial, questo metodo funziona anche per i driver kernel?, mi spiego, vorrei integrare il driver intel_pstate per lq cpu, mi confermi che la procedura è la stessa anche per questo?

Share this post


Link to post
Share on other sites

Ciao,si funziona per ogni modulo kernel.

 

Inviato dal mio PLK-L01 utilizzando Tapatalk

Share this post


Link to post
Share on other sites
Complimenti bel tutotial, questo metodo funziona anche per i driver kernel?, mi spiego, vorrei integrare il driver intel_pstate per lq cpu, mi confermi che la procedura è la stessa anche per questo?

Questa è la procedura standard per compilare i moduli kernel, però ce ne possono essere alcuni che richiedono proprio un kernel tutto nuovo, in questo caso dovresti sostituire anche il bzImage nella chiavetta usb, e qui la faccenda si fa un zinzinello più complessa.

 

Grazie per l'apprezzamento :grin:

Share this post


Link to post
Share on other sites
Tutorial bellissimo, grazie Aigor

 

Per installare la DSM 6.1 che bootloader hai usato?

Ti ringrazio, il bootloader 1.02 Alpha, occhio che è in alpha stage, quindi non è sicuro al 100% che non dia problemi.

Io sono ancora su DSM 6.0 per ora non mi occorrono le nuove caratteristiche del 6.1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now