Device or resource busy

My Model 01 has just arrived and I’m trying to flash the firmware, I get the following error:

stty: /dev/ttyACM0: Device or resource busy

Any suggestions?

Fixed with the following:

systemctl stop ModemManager.service

You are using Ubuntu? We discussed this a couple days ago when I was starting to work through a Linux install for writing up docs. Discussion here:

Stopping ModemManager may be a bit more extreme than needed; you can follow algernon’s advice to get ModemManager to just ignore the keyboard. :slight_smile:

2 Likes

Just encountered the same problem. Apparently this has been plaguing the arduino community on Ubuntu for a while:

https://forum.arduino.cc/index.php?topic=129647.0

Just to clarify for others who might come across this: This is only an issue when programming the Model01 (or other arduino devices), so disabling or even purging ModemManager really is a bit extreme and could lead to other problems (like wwan devices not working). So for those who need ModemManager, I highly recommend using the udev rules.

1 Like

… and in case you are as new to udev as you are to programming the Model01: Copy the udev rules linked above into a plain text file, save it under /etc/udev/rules.d/99-kaleidoscope.rules and execute

udevadm control -R

to reload the rules, then reconnect your Model01. No reboot needed.

1 Like

thanks for this detail! I was trying to find the specific commands yesterday for the linux install wiki page. :slight_smile:

I’m actually using OpenSuse. I was looking for a quick fix to get the firmware flashed. I’m going to go and add the udev rules now. Interestingly a forum search didn’t turn anything up.

1 Like

I updated the wiki article on installing Arduino on Linux to include the need for udev rules on Ubuntu. I also made a couple of other fixes so that the instructions actually work if you follow them.

2 Likes

If by that you mean this article, then I have some further suggestions. I’ve just tested this on Arch Linux and it didn’t go as well as it did on Ubuntu. I’m not sure wether just installing the udev rule without “udevadm control -R” actually works and more importantly: I’m very sceptical about the build process for the Model01 firmware just assuming, that it will always appear as /dev/ttyACM1. (On laptops with wwan devices it is likely, that this device will occupy several ttyACMn device nodes, blocking the Model01 from being assigned ttyACM1. On my laptop it got ttyACM3.)

Can someone point me to where I can find more information about contributing to the wiki, testing tutorials and the like?

Apologies if my forum search fu is weak.

2 Likes

Hi! I’m kind of the unofficial docs maven, and I would be overjoyed if you wanted to take on making the linux section of the wiki more robust. I have been bookmarking all the different conversations about linux variants and their various quirks and idiosyncrasies wrt building Kaleidoscope and installing it on the Model 01, and it’s kind of making my head swim.

I should probably write up a “contributing to the wiki” page for the wiki. hmm. Briefly, in a disorganized stream of consciousness style flow:

Anyone can just edit the wiki right now. We hope we are building the sort of community we can trust to be constructive and helpful with this shared resource. I monitor changes that are made and discuss or revise things that have issues, and so far the contributions have been stellar. :slightly_smiling_face:

For myself, I have cloned the wiki locally using the link below the sidebar on the wiki pages:

clone-the-wiki

and I do find the git desktop client useful for managing pushes and pulls. I’m on a Mac, and have found Haroopad to be the best application for editing and previewing Markdown. It is far from perfect, but github’s desktop tool plus Haroopad is the best toolset I’ve found for my purposes.

If you want to work through the web ui, you are welcome to create a new page to work on, and it will be live but not linked in the sidebar until explicitly added. There are right now several pages in development that are not linked in the sidebar, because for various reasons they are not ready for prime time, but I wanted them up on the site to test something. That’s one of the advantages of the sidebar- it gives us a public area to collaborate on drafts.

If you have any questions or suggestions, or want to chat about how to structure the linux page, hit me up with a message here, on twitter, or via email. I’m jennigma at gmail. :slight_smile: I would love to tech your docs, and have a fairly naive tester and an ubuntu install in the house. We could add more flavors if necessary- My partner’s day job is linux admin.

Welcome to thecommunity and thank you for your offer to contribute! Thanks for pointing out that we need to do a better job letting people know how to contribute.

1 Like

@squence, I think that “udevadm control -R” is accomplishing the same thing for you that disconnecting and reconnecting the Keyboardio is doing for me. Does that sound plausible to you?

I wasn’t exactly sure about this, so I looked it up and tested it:

  • Udev does not just re-read it’s config unless triggered by some kind of event.
  • It also does not retroactively apply changes to already configured devices unless triggered.

Running “udevadm control -R” constitues an event that triggers udev to re-read it’s config (but not retroactively apply it). Reconnecting a device also constitutes such a trigger (and in this case, the new config will be applied, obviously). So you were right, “udevadm control -R” wasn’t necessary. (I think it used to be, but I’m not 100% sure.)

Since I was browsing the manpage anyway…

Reconnecting the device is also not necessary. Adding the new udev rules and then running

udevadm trigger

seems to get the job done. (At least it creates the new device node /dev/model01. I haven’t tested wether it also gets ModemManager off your back, but it should. I’ll test that the next time I have reason to flash my Model01.)

Always nice to learn something new along the way.

1 Like