Arduino on Linux

i'm trying to make arduino work from the command line on my fedora core 6 box. since there are no avr-gcc rpms available at the time of writing for fedora, i compiled them myself.
using the instructions from here: Arduino Playground - CommandLine i'm trying to compile a simple example code, but i'm getting errors:

avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
        --change-section-lma .eeprom=0 -O ihex foo.elf foo.eep
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make: [foo.eep] Error 1 (ignored)

avr-objdump gives the following output:

$ avr-objdump -h foo.elf 
foo.elf:     file format elf32-avr
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00001050  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000096  00800060  00001050  000010e4  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000009b  008000f6  008000f6  0000117a  2**0
                  ALLOC
  3 .stab         00002280  00000000  00000000  0000117c  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      000016fd  00000000  00000000  000033fc  2**0
                  CONTENTS, READONLY, DEBUGGING

the versions of the software i'm using are the following: avr-binutils-2.17, avr-gcc-4.1.1, avr-gcc-g++-4.1.1, avr-libc-1.4.5.

$ avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ./configure --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib --target=avr --disable-libssp --enable-languages=c,c++ --disable-libmudflap --disable-libiberty --disable-libstdc
Thread model: single
gcc version 4.1.1

any help would be appreciated.

i figured it can be a problem of avr-binutils, although the program can be uploaded regardless of the error.

objcopy.c should be patched at about line 1421:

    if (bfd_count_sections (obfd) == 0)
    {
      non_fatal (_("there are no sections to be copied!"));
      return FALSE;
    }

FALSE can be changed to TRUE to avoid the error.

reference: http://2313.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=39014&start=0&POSTNUKESID=9c998e6153cb4e6bba14ec5311d6cc05

gabor: the error seems to be appearing in a command to build a file you don't really need. You can modify the Makefile to not build it at all. Change line 127 from:

build: elf hex eep

to:

build: elf hex

And change line 136 from:

upload: $(TARGET).hex $(TARGET).eep

to:

upload: $(TARGET).hex

This will be fixed soon.

Hi,
I just compiled everything needed to run arduino on Linux by myself and it works fine.

I just missed the hint to build an avr-g++ either - but that was a minor problem to be fixed easily.

Just follow blindly step by step the buildprocess of an avr-environment, install some JRE, jikes, RXTX, build the usb-serial kernel module, get the IDE via the subversion repository, set up pathes and environment variables and smile happily at your blue-ish IDE. :slight_smile:

Now I have to wait for the actual board as I just placed my order two hours ago.

Just to report some success... (Slackware 11.0)

mellis, thanks for your help.

on the other hand, i'm planning to submit the avr rpms to fedora repositories. if they got excepted users will be able to install avr development tools easier in the future in fedora.

Hey All,
I had a little trouble getting things to run on Ubuntu Edgy AMD64. I had to install the package "librxtx-java" first. Then I had to fix the CLASSPATH reference to the local copy of RXTXcomm.jar. It needs to point to "/usr/share/java/RXTXcomm.jar". Next I had to make two changes to the dist/arduino script. I had to again, swap the reference to the installed RXTXcomm.jar and then I had to change the LD_LIBRARY_PATH to point to /usr/lib instead of the {cwd}/lib so that it will find the correct .so files.
I can supply patches if needed.

Everybody running Ubuntu Linux: forget about compiling the software
The only working Howto for me was: Arduino Playground - Debian
It is simple and up to date ...
:sunglasses:

Hi I am a total Newbie to Linux I have SuSE 8.2 Personal Edition. I could not get Ubuntu to work on my machine. I am currently working with it in the Windows Environment and want to expand my horizons.

I downloaded the latest version of the Arduino software and "unpacked" it onto my desktop and can't get it to run. I read the installation instructions and to be honest - just don't understand what they are trying to tell me. :-/.

Remember that I am a total Newbie to Linux and I would really appreciate the help.

Is there a reason why you still use SuSE 8.2 ?
This is really old, no patches anymore.

Have you tried the installation instructions I wrote for openSUSE ?
( Arduino Playground - OpenSUSE )

madworm,

Thanks for the reply. I downloaded and installed openSuSE 10.3.

Please take no offense, but I just don't understand the installation instructions. I am a total newbie here. :-/ I think I downloaded the right files.

arduino-0012-linux.tgz
avrdude-5.5.tar.gz.sig
avrdude-5.5.tar.gz
avr-libc-1.6.4.tar.bz2.sig
avr-libc-1.6.4.tar.bz2
avr-binutils-2.13.2.1nb2.tgz
cross-avr-gcc-4.1.3_20070724-15.x86_64.rpm

I tried to install them through YaST but just don't know how.

If you have a step by step procedure like the installation of the 10.3 OS that would be great.

Thank you for your help :slight_smile:

ok.

  • open a console in X
  • type:
su
  • enter the root password
  • type:
yast2
  • start the module for installation sources
  • make sure these repositories are added and active:
http://download.opensuse.org/distribution/10.3/repo/oss/
http://download.opensuse.org/distribution/10.3/repo/non-oss/
http://download.opensuse.org/update/10.3/
  • start the software installer module
  • in the search field type AVR and press the search button
  • select these packages: avrdude, avr-libc, cross-avr-binutils, cross-avr-gcc
  • press accept
  • yast2 will download and install the stuff
  • start the user/group manager module
  • edit the users who need to use the arduino software
  • select the group 'UUCP' in the group membership tab. this will grant access to the usb port (/dev/ttyUSB*) and press OK/FINISH
  • quit yast2
  • in the console type:
find /opt/cross/bin/ -iname "avr*" -exec ln -s -t /usr/local/bin/ {} \;
  • close the root console
  • RESTART X (logoff/logon)
  • as a normal user, open a console window
  • extract arduino-0012-linux.tgz to the desired folder
  • change to that directory
  • type:
./arduino
  • the IDE should start.

Thank you so much - I'll give it a shot

madworm,

Thank you so much for your help!!

I ended up getting a DVDROM for $10 for the local computer parts store so I could load the full version had everything going fine except I could not find the repositories you mentioned:

http://download.opensuse.org/distribution/10.3/repo/oss/
http://download.opensuse.org/distribution/10.3/repo/non-oss/
http://download.opensuse.org/update/10.3/

Then I noticed that those looked like websites. Lacking a wireless card I hauled the machine upstairs and plugged it straight in to the router, reinstalled the software and there it was (I ended up installing the 11.0 version). The finding of the AVR packages was as simple as you said!

I did notice that I have to log into the terminal with "su" to have full access. But maybe that is something for later.

I found that running Arduino with Linux is actually easier to configure than in windows since the port setting actually says "usb":smiley:

Again thank you for your help and time.

Sparky

Hi everyone,
i have a problem with the arduino ide on archlinux. It works perfectly except that it doesn't upload the code to the board. The system correctly create a symlink in /dev/ttyUSB0 to /dev/tts/USB0, so the problem is not ftdi_sio, all the modules needed for connecting arduino are loaded. It give me always "/dev/tts/USB0 not found, have you selected the right port from Tools -> Serial port?". I know the file to exists, and Tools -> Serial port is grayed out, i can't select the port from there. I changed the voice on .arduino/preferences.txt. I tryed the following:

  1. Changing RXTXcomm.jar and rxtxSerial.so in the arduino folder with the one's downloaded from rxtx.org

  2. Removing RXTXcomm.jar and rxtxSerial.so and installing them system wide (yes, is almost the same as before, but I'm trying everything -_-)

  3. chmod 666 on /dev/tts/USB0. Still not working.

  4. chown myuser /dev/tts/USB0.

  5. adding my user to groups uucp, tty and lock. Still nothing.

Even launching the ide as root doesn't make the things work as they should.

Do you have any clue?

Thanks.

Hi,
I'm not sure if the RXTX-lib can deal with symbolic links to devices. Tried this briefly, didn't work.
Is there a reason archlinux creates the device-file as /dev/tts/USB0? Sounds very strange to me....

Eberhard

From what I know, is not RXTX-lib that have to deal with symlinks, but the o.s. Also I don't see the problem, is the device /dev/ttyUSB0 or /dev/tts/USB0 the point is that udev can see arduino and link it to a device. I tried to set serial.port in preferences.txt in both ways, but every time the arduino ide say it can't find that port. A friend of mine solved it with a chmod on /dev/tts/USB0, and the ide's "serial port" menù is grayed out no more. This didn't work for me. This sound very strange to me.

I had looked into this myself as I wanted my FTDI 232 cable to always appear as /dev/boarduino.

I found that I could get the port to show up in Arduino's Serial menu by manually adding 'boarduino' to the list of device names in RXTXCommDriver.java (starting at line 519 for version 2.1.9). Of course this means that I had to compile RXTX myself.

In the end I decided not to complicate my installation and went back to using precompiled RXTX files from the rxtx.org site.

On reading the INSTALL file you could try using

java -Dgnu.io.rxtx.SerialPorts=/dev/tts/USB com.foo.MyApp

where com.foo.MyApp is the arduino java app.

DISCLAIMER: I haven't tried this so have no idea if it will work for you

HTH

Ver

Regards

1 Like

Hi Ver

I had looked into this myself as I wanted my FTDI 232 cable to always appear as /dev/boarduino.
....

In the end I decided not to complicate my installation and went back to using precompiled RXTX files from the rxtx.org site.

On reading the INSTALL file you could try using

java -Dgnu.io.rxtx.SerialPorts=/dev/tts/USB com.foo.MyApp

where com.foo.MyApp is the arduino java app.

DISCLAIMER: I haven't tried this so have no idea if it will work for you

This works fine for a single board, thanks for the tip.

I wish I could set a search-prefix for the rxtx-lib that way.
Udev creates a symlink Arduino.[SerialNumber] for all my boards.
If I could tell rxtx : "search for all devices starting with 'Arduino.' "
that would be great...

Some more background information is here

Eberhard

2 Likes

You can... but you have to modify the RXTX source code. I did have /dev/boarduino and /dev/arduino (former was for my FTDI 232 cable plugged into a boarduino and the latter for the duemilanove). You need to look at RXTXCommDriver.java starting from line 519 for version 2.1.9.

I had this working with arduino ver 0014 iirc and java sdk 32bit . I then scrapped that as I wanted to get arduino/java/rxtx working completely with x86_64 and I couldn't compile rxtx.

HTH

1 Like