tarm / serial

BSD 3-Clause "New" or "Revised" License
1.61k stars 452 forks source link

mipsle compile #59

Closed dfense closed 6 years ago

dfense commented 7 years ago

Hi,

Your library looks solid and can use on linux np. However, I did most recently purchase some new IoT Omega2 processors from onion.io and they could be quite popular.

I have been writing programs in GO and running on it w/no problem. Runs great, small and tight. I was hoping to get some serial port development going on it, and of course, seem to be quite a few platform specific items breaking.

Your serial lib seems the closest. I try to compile the simple default sample you provide with the library, and get the following error using this compile syntax.

GOOS=linux GOARCH=mipsle go build -compiler gc serial.go

# github.com/tarm/serial
src/github.com/tarm/serial/serial_linux.go:105: unknown field 'Ispeed' in struct literal of type syscall.Termios
src/github.com/tarm/serial/serial_linux.go:106: unknown field 'Ospeed' in struct literal of type syscall.Termios

Anything I can do to help you support this platform ?

tarm commented 7 years ago

Looks the same as this issue: https://github.com/golang/go/issues/18866

Looks like there are some suggested approaches in that thread.

I would be open to patches that specialize with build constraints based on GOARCH (we have build constraints based on GOOS and CGO right now, but not GOARCH).

ljubomirb commented 6 years ago

the same issue with GOARCH=mips (using Go 1.9.2)

EDIT: after a whole day of try and error, and after trying several other serial port packages for GO, I've found that package: "github.com/jacobsa/go-serial/serial" works for MIPS, however, I needed to cross-compile c++ program (included in comments there) to test it on my MIPS platform (in my case, ar7xxx). After that, I was able to find out that constants to be changed there are:

original LINUX
    kTCSETS2 = 0x402C542B
    kBOTHER  = 0x1000
    kNCCS    = 19

changes for AR7xxx
       TCSETS2 = 0x8030542B
       BOTHER  = 0x00001000
       NCCS    = 23

After that, that package works. However, this is way complicated, time consuming, and not portable (one would have to cross compile c++, and manually change constants... etc etc). I hope this information will help you fix this package, since otherwise it works fine. I'm guessing it's just a matter of some constants somewhere, but...

nocko commented 6 years ago

This is still broken on mipsle and mips with the same error that OP reported.

After the merged patch, the missing fields are still referenced.

tarm commented 6 years ago

@nocko I believe this is compiling as expected on mips. I just pushed a change to the travis.yml file that adds cross compile targets for arm, mips, and mipsle and those at least compile (I have not personally tested mips, but arm and x64 are in production).