Blog‎ > ‎

Go Lang @ ARM

pubblicato 15 lug 2014, 13:15 da Massimiliano D'Ambrosio
Dopo aver seguito il Talk su Go alla Better Embedded 2014, dove veniva indicato come un buon linguaggio per le piattaforme embedded, ho deciso di cominciare a darci un occhiata...
Per sapere di più su questo linguaggio di programmazione partite da golang.org e qui trovate un libro online poi basta https://www.google.it/search?q=golang

Partiamo dai sorgenti:

Tra i pacchetti della versione stabile “wheezy” della GNU/Debian c’e` la vecchia versione 1.0 di Go, pertando ho preso i sorgenti 1.3 (ultima versione) e compilati per le board ARM che uso.  

I binary sono stati compilati per ARMv5, ARMv6 e ARMv7 dai sorgenti http://golang.org/dl/

I file compressi contengo la directory originale dei sorgenti + tutti i file compilati.


i binary:

ARMv7 // filename:golang1.3_bbb_arduinotre_udoo_pcduino3_ARMv7.tar.gz

sono stati compilati sulla BeagleBone Black. Sono stati provati anche su Arduino TRE, pcDuino e UDOO.

Possono andare bene su tutti gli ARM con set istruzioni v7, per esempio i Cortex A... // i piu` diffusi


ARMv6 // filename:golang1.3_raspberrypi_ARMv6.tar.gz

compilati sulla Raspberry Pi ver B.  E` compatibile con il set istruzioni ARMv6, come gli ARM11… // anche se ormai e` poco usato.


ARMv5 // filename:golang1.3_arietta_ARMv5.tar.gz

compilati sulla piccola Arietta G25 128MB. Avendo prestazioni limitate e sufficienti per alcuni settori, stata lunga nella compilazione, +90min. Oltre ad alcune modifiche alla partizioni che erano in tmpfs e occupavano memoria ed erano piccole. Per la compilazione serviva spazio e momoria.

E` compatibile con il set istruzioni ARMv5, tipo ARM9. // ci sono diverse piccole board con set.


Installazione:

Non c’e` una vera installazione, basta decomprime il file in una directory, per esempio nella propria HOME


  1. decomprimere il file
    ~$ tar zxvf golang1.3_versione_della_propria_board_arm

  2. Impostiamo la variabile ROOT della directory di Go
    ~$ export GOLANG=PATH_DIRECTORY/go

  3. // ora il path di Go in modo che trovi l’eseguibile go
    ~$ export PATH=$PATH:$GOROOT/bin

  4. i comandi export (righe 2 e 3) vanno inserite anche ine proprio .profile in modo che vengano settate le variabile al login.


Se si preferisce possiamo creare un link simbilico a go in /usr/bin invece di usare il path del punto 3

~$ sudo ln -s PATH_DIRECTORY/go/bin/go /usr/bin/go

~$ sudo ln -s PATH_DIRECTORY/go/bin/gofmt /usr/bin/gofmt


PATH_DIRECTORY va sostituita con il path in cui avete decompresso il file golang1.3_

Per esempio se PATH_DIRECTORY == alla propria directory HOME

~$ export GOROOT=$HOME/go
~$ export PATH=$PATH:$GOROOT/bin


Hello World!


~$ nano helloworld.go


package main


import (

       "fmt"

       "os/exec"

       "net"

)


func main() {

       fmt.Println("\nHello World!")

       cmd, cmdargs := "uname", "-a"

       out, err := exec.Command(cmd ,cmdargs).Output()

       

      if err == nil {

          fmt.Printf("Mi chiamo %s\n", out)

       } else {

          fmt.Println("\nops! non ricordo il mio nome. Qualche cosa non va richiamando il comando" , cmd)

       }

       

       fmt.Println("Chiamo il mondo...")

       conn, err := net.Dial("tcp","www.google.com:80")

       if err == nil {

          fmt.Println("...wooow! sei connesso con il mondo. Ho chiamato www.google.com Mi ha riposto con ", conn," ... ... Go :-)\n")

       } else {

          fmt.Println("...ops! Nessuna risposta dal Mondo!")

       }

       

}



// esegui il codice

~$ go run helloworld.go


// se tutto e` ok allora compilalo con

~$ go build helloworld.go


// eseguilo con

~$ ./helloworld



Go Go Go...

golang_binary_arm



Comments