GNU Embedded Toolchain for ARM on Rasbian Jessie Lite

Shoot me. Shoot me now.

And if you don’t, don’t blame me.

~~~

I dislike GUIs for holding my coding environment, because they present me with new and therefore terrifying technology. So, I elected to put the mbed cli onto Raspbian Lite. This is already devoid of a GUI, and nothing could go wrong.

Gentle Reader, it went wrong. Mostly because the instructions for compiling from source were in a pdf which I couldn’t read without downloading it elsewhere, and by the time I had done that the schnapps I was taking medicinally had betrayed me.

Once I’d opened that, the instructions started with ‘install Ubuntu’ so I swore a bit and didn’t install Ubuntu. But I did apt-get install software-properties-common and that nearly worked. I didn’t have 7z on Rasbian Lite, and when I managed to get p7zip, I had to amend ./install-sources.h by hand, to take out mentions of 7z and add p7zip -d which got me to the point where I had everything installed and could start the build. At which point, more stuff broke.

‘This does not look like a tar archive’ is a bad message to get when you believe you are messing with tar archives. So, it was into build-common.sh to have a look-see.

I had a curious error that tar -cf – . which should – I thought – have compressed stuff, wasn’t. As far as I could read from the error message it was decompressing instead. Obviously I was not drunk enough. But there was a failure to find zlib, and that was the only thing that was compressed as a .tar.gz instead of a .tar.bz2. So I could do that by hand, right?

cd src
tar -xf zlibwhatever
cd -

Now we’re cooking with Calor.

Until there’s no usable m4 in $PATH. And I have no idea what m4 is.

So I install that:

apt-get install m4
sudo !!

!! is the most useful shortcut I have ever found. It’s the entire last line you typed. sudo !! is the thing I probably type most.

Then I attempt another build. I’m on a roll here!

./build-rerequisites.sh

And I wait. Clouds of text pass upward. My pi light blinks. I drink more. More scroll happens. I have no desk. I have no keyboard. The world is an illusion. I experience sudden horror as the scrolling stops but it is only a momentary pause for a large file. I recognise fragments of names. The word ‘pedantic’ catches my eye and I laugh. The ‘caution something or other about make check’ board scrolls past. I drink again. Makefiles are made. I hug the bottle. The scrolling is giving me a headache. Or else I am hung over. The lighting waxes and wanes as text pauses and passes on. I am at one with the Schnapps. The Schnapps is at one with me, but is also precariously balanced on the tin of shoe polish I am using as a coaster. Now we are checking the locale and it isn’t saying Drowned Ys or Property of Randolph J Carter, so I think we’re OK. ‘Making all in .’ is a travesty of grammar, but a wonderful statement from the command line. More drink. Sacrifice a goat to the old ones. Eat raw goat liver. I finish a conversation online and start another. The dragons drift by. I click things with a useless mouse. There is more scroll. The C compiler works. We check together, the computer and I, whether we are cross-compiling. … And then .configure aborts.

‘Compiler error reporting is too harsh for ./configure (perhaps remove -Werror).’

Well, there’s lovely.

I don’t know how to remove that, because I don’t know why or where it was set in the first place. Somewhere in the haze of alcohol I remember that I must already have the GCC working to make all this stuff, and I sigh and look up the error message because that’s the sensible thing, and sleeping could stop me from thinking.

A stack exchange discussion of this problem has something that cheers me up. “The compiler is too harsh simply because there is no compiler…” At least my problem is not that.

In looking up what might be going wrong I have scrolled away from the error messages and I don’t want to look for logs so I run this again. There is a pleasing object with the word polyhedron in the file name. And now we have found warnings. Makefile.in seems to ignore the datarootdir setting. Is that bad? And then a bit of scroll later we bork.

I read back up a bit. pushd allows one to play with the directory stack. So in one of those directories, perhaps, there is a ./configure.

ls build-mingw/zlib has a configure file. There is a configure log. The configure file tells me that
try
:
else .

So now I try to remember what try means. I scroll up to find what options $CC has. The irony of me doing the scrolling makes me smile. I have the horrible feeling that this is using CC not GCC and I have no idea what that means. The bottle is calling me again. I comment out the line that is forcing me to leave, because errors are fine because it is midnight and I am drunk. I do not expect this to go well, but I am interested in what will work. Probably that file will not be regenerated and this is all safe. Perhaps I should have checked at least the start and end of the configure log before I began. The cloud scrolls past again. I can smell hamsters. long long ints exist. doubles exist. I play with the refresh rate of the scroll by blinking. I converse online about novelty fish. I open up a different terminal to rest my eyes. I scroll back in time to find out that CC=gcc. I reach the point where we make all in . The tension is acutely bearable. I have no expectations. Hope is a deceiver. I lie to myself about not hoping. The conversation about novelty fish turns to gravel and rakes. I consider Phlebas, who was tall, and is now dead. I consider how I could have learned to get along with a GUI, but no, I had to do it my way. I look lovingly at the screen, now showing me built objects that will die when ./configure fails. I love these things. They do not know that hopes are liars. Maybe once I was like them.

Everything dies. I look up the ./configure, and sure enough it’s a generated file so I cannot change it. I’ve learned a thing. I look in the configure log and I’m apparently building some cross-compiling something-or-other for the windows toolchain so I re-start without that. I can live without windows. The pain of the GUI is enough that I am doing this to avoid windows.

./build-prerequisites.sh --skip_steps=mingw32

The temperature warning for the Pi comes on. I blow over the CPU, with the tenderness of Achilles teasing Patrokleos. The air is warm. I have enclosed the main board in too many breakout boards.

The objects are created again. They never complain about this. The temperature warning has not returned. .io files click in orderly procession down the screen. More scroll. Is this further than I have gone before?… exit 0. No errors. The little coloured directory indicator is a checkpoint flag. They are playing my tune.

Ladies and Gentlemen, we are halfway!

./build-toolchain --skip_steps=mingw32 holds no fears for me now. I believe!

I take a moment to marvel at the complexity of the compiler building a compiler. So many people worked on this. Hardly any of them need to be destroyed. I blow on the CPU again. I wonder if I have built this in the wrong place. Awww. Error 2. recipe for target failed up above somewhere. I can hear the Glory. I should probably sleep. The Pi can cool down overnight.

Dear reader, I came back to it in the morning, and tried again with TeX installed. Why TeX, I do not know. It seems to have been making make all fail, even though it was almost certainly optional in the minds of the writers. I added flex to give me gengtype-lex.c, and ran into what was probably a memory issue. So, I increased the swap file from 100MB to 400MB. df –total showed that I still had 10% of my space free. (At this point, I decided to build the toolchain on my desktop machine as well, to find out if it was just the Pi being awkward. It’s the Pi being awkward, *and* I failed to build on ARCH.) I installed bison, and increased the swap file to 800MB. The temperature warning light stayed on, meaning that the CPU was being throttled. However, finally, I ran out of space on the device. One last gambit was to decrease the swap file to 600, because I didn’t know if the installation of bison could fix the earlier issue. Again, I ran out of space. More in next week’s exciting episode, folks.

Making a Cat5 o’ Nine Tails

A cat of nine tails made from cat 5 cableThe traditional naval ‘cat’ was made of a thick piece of rope which had been unwound into its nine constituent strands, and knotted. It’s pretty hard to knot Cat 5, which usually bends in a radius 4 times its width. However, we can add modular connectors. To make this a really painful piece of kit, we’ll leave the protective boots off the connectors, but if you’re going to want to soften the blows, then remember to put a pair of boots onto each length of wire before you crimp the ends.

You will need a scalpel or Stanley knife, side clippers, a Cat 5 crimp tool, cable, and modular connectors. Most crimp tools have a cutter on them, but we’ll need the side cutters to tidy up the last end of cable anyhow, and they are less unwieldy than the whole big tool. Optionally, you may want a flat screwdriver or awl to help tighten the big end knot. First, grab several lengths of cable. Four will be about the length of your full two-arm span, and the fifth should be at least three times that, depending on how long you want your handle to be. The crimp tool cutters are ideal for cutting these. I have chosen black, but there is no reason you shouldn’t use another colour, or a mix of colours. You will definitely want see-through modular connectors, as you need to see inside the block while you are building it. Start with the shorter pieces of wire, and add ends to each.

Cat 5 cable with stripped end.The outer coloured layer is softer than the inside. Strip off about half an inch of outer cable by scoring lightly around with a sharp knife. It should then pull off easily. If there is fibre inside the cable, trim that off. Untwist the wire pairs inside, and flatten them into the order in the photo. (This is not the only order, but it’s one standard to prevent cross-talk.) This order, T568A Wiring, is Green-and-White, Green, Orange-and-White, Blue, Blue-and-White, Orange, Brown-and-White, Brown. The wires are stiff, but you can flex them forward and back in the fan, and that will help to straighten them. There is no need to strip them, because the crimp tool will punch metal through to the inner wires.

Cutting Cat5 EndsAt this point, the wire lengths will be different. Once all of the wires are aligned and held easily in one hand, trim the ends. You’ll want to push the whole wire as far as it goes into the connector, so the ends need to be the same length. If the wires are still trying to escape you, bend them back and forth gently until they ease into their new positions, before clipping. Take off as little as you can in squaring up, because you’re going to need much of that half inch inside the connector.

Uncrimped Cat5Now take the connector and push it gently over the coloured wires. There are channels inside the connector and each wire will, with only a little wiggling, go into a single channel. I’ve found it’s best to angle them very slightly, so they go in one at a time, but as long as they are all straight you shouldn’t have a problem. Push in gently at first, but make sure the whole wire beds down to the end, for the best electrical connection. Then push the coloured wire sheath up into the plastic housing. This will also be crimped down, but needs to be shifted up a little around the inner wires.

Crimp ToolThe cable will bed down into the crimp tool. Here you can see the ridges on the tool are pushing down on the metal that is part of the connector. That forces the metal into the inner wires, right through their coloured sheathing. If you have a crimp tool with a ratchet on, this is much easier. Otherwise, you’ll need a little dexterity in with your strength. Keep pushing the outer soft sheath into the connector while you close the crimp tool as far as it will go. The connector below has not yet been crimped, but shows how far the sheath needs to be for a decent bite.

Once you have the crimps finished for the shorter pieces, take the longer piece of Cat 5 and put a decorative knot most of the way towards one end. Leave one length that we will crimp later. A monkey’s fist knot is ideal. Start this by winding the wire three times around your fingers. You want it to be loose. Take the winding off your fingers and, again loosely, run the wire around the winding three times, to make a cross shape. Now feed the end inside your first loop, but outside your second loop, three times. Image below is courtesy of Wikipedia.

Monkey's FistTighten it slowly and carefully, by feeding the wire through the whole knot, repeatedly. Don’t try to close it all at once, or the knot will become shapeless, and don’t close it all the way yet. Get it most of the way closed, and arrange it as a rounded ball. As a purely decorative knot it can take a centre to ensure a spherical shape, but we’re going to rely on the strength of the cable to hold the shape for us.

Before you tighten the knot completely, feed the four shorter lengths of cable through it so they sit centrally. Arrange the shorter end of the uncrimped piece so that it is as long as the other tails, feeding the spare wire through the knot, and the reshaping it. The long bit, the working end, should still be considerably longer than the rest.

Take a hitch around the base of the whip with the working end, and then wind it loosely around the nine other strands, to make a handle. Take another hitch at the end then feed the working end back down as a tenth strand, inside the windings, and then tighten them until everything is held snug. As with the monkey fist knot, you may have to tighten and move the wires repeatedly, but the end result will be a tight, comfortable handle. Use the side clippers to take off any extra length from the working end once you’ve tightened it. Put on the last connector, and you’re done.

Cat CaseI made a presentation case for my Cat out of an ABS wall box and a laser cut front with hex bolts, but equally you could add a clip to the decorative knot, or have the whip unadorned. Just remember that if you do put pressure on the knot, you’ll be deforming it, as there was no room for an inner core once we passed the wire through it. If you do decide to add a core, let me know in the comments how that went, so I can update this post.

Happy Making!

My Little Pi-ny

Dev Machine
Here’s the development machine. I love hardware that folds down almost as much as I love free hardware that I picked up because someone else didn’t need it, and this is a blend of the two.

Everything I have in this photo fits into the official touch screen box, along with a chunky battery and a spare USB lead for power. It’s a Pi 3 with blinkt hat, touch screen, Rii-diculously small keyboard on which yes, I genuinely type, and two Fold Holds (by Jonathan Woolf) to hold it all up and protect the screen when it’s packed. You might say the touch screen is overkill – I don’t have a GUI on the machine.

I’m going to design a hat to go on top, which will be able to fly out the unused pins currently covered by the blinkt, giving me breadboarded GPIO access. Nothing could possibly go wrong with that plan.

Clinkt

Pi Larson ScanningI may have got a little carried away.

The Blinkt hat has a perfectly* good python library which does everything you might reasonably want to do with a set of 8 APA102 lights. My problem there is the word ‘reasonably’. So, I re-wrote it in C++, because my soul has never seen the light of day.

(* nearly perfectly. Some might say that flushing the visible buffer by writing white pixels off the end of it is a little much if you decide to define the number of LEDs as 6 for testing and OW MY EYES.)

It’ll take arbitrary pixel length, just like the python library, but unlike the python library it’s built with the assumption you’ll want to make and use multiple patterns, and manipulate those patterns with regard to each other. I can cross over patterns based on whatever input I like, as long as I painstakingly craft that input and sanitise it myself.

The reason I wanted to dig deeper than the python framework was that the Raspberry Pi is my lightweight development machine. I have a laptop that fits into a box. More on that in the next post.

I’m reliably informed that it’s against the law to have a blinkt and not use it to output something something pop culture Davis Hasselhoff – so here is the Larson Scanner in use: Video 19-04-2017, 14 00 28

The C++ library is available at https://github.com/dianaprobst/clinkt. You’ll need the bcm28somethingorother library, but the README.txt has that information. If you want to use cheerlights or APIs you’ll also need libcurl.

init.d/wtf

When using a shell script in /etc/init.d to start up a command, make sure you put the shell script there, and not the compiled program.

It didn’t work anyhow, so I’m calling it as a cron job on reboot, but I’m pretty sure the point still stands.

ETA: Aaah. So, there are things called runlevels, and Rasbian is based on Debian, which has them. I’m more a systemd person, so I was looking at the wrong sort of help file.

Coding project

I need a small coding project, that will let me practice more than just simple procedural problems, but is not so massively complicated I die of it. I also, let’s be clear here, need sleep, food, and to remember what the inside of a bathtub looks like. Nevertheless, I’m looking for things in about that order.

I don’t know enough to know what an ideal project would be, which is making this hard.

Iterating Wobblebot (and a side project)

I’ve laid the cable track, planned the new screws and bought another identical to the second…

So, as it turns out, not all lead screws are the same, even when they are supposed to be. The first one I bought has a thread that’s at the right pitch, and the right height, but the trapezium shape is too narrow. This was leading to a huge backlash problem, which I thought I would have to deal with by making anti-backlash nuts. However, the other lead screw, which I had bought thinking it was a pair, doesn’t have that. There’s more metal, and it fits snugly in the nut I have. That means there’s hardly any backlash at all.

I’m still interested in making the anti-backlash nuts, and I have other uses for a tap for that shape of screw, so I’ve ordered a length that I’m going to try to tool into a tap, with the lathe and the mill. Clamping it is going to be a right beggar – I might enclose it in a thermoplastic and clamp that instead.