Dissecting A Firmware Image

dissecting-a-firmware-image

[Leland Flynn] did a great job of picking apart the firmware image for a Westell 9100EM FiOS router. Unfortunately he didn’t actually find the information he was looking for. But he’s not quite done poking around yet either. If you have never tried to make sense of an embedded Linux firmware image this serves as a great beginner’s example of how it’s done.

He was turned on to the project after port scanning his external IP and finding a random login prompt which he certainly didn’t set up. Some searching led him to believe this is some kind of back door for Verizon to push automatic firmware updates to his router. He figured why not see if he could yank the credentials and poke around inside of the machine?

He started by downloading the latest firmware upgrade. Running ‘hexdump’ and ‘strings’ gives him confirmation that the image is based on Linux. He’s then able to pick apart the package, getting at just the filesystem portion. His persistence takes him through extracting and decompressing three different filesystems. Even though he now has access to all of those files, broken symlinks meant a dead-end on his login search.

[CNLohr]’s Microscope Slide Linux AVR Minecraft… Thing

We’ve been following [CNLohr]’s process of creating an AVR-powered microscope slide running Linux and interfacing redstone circuits in Minecraft to real world electronic for a while now, but we’re really at a loss for words on how it works. Well, now there’s a video explaining everything you want to know about this amazingly complicated and overwrought thing.

The device is powered by an AVR microcontroller and Ethernet controller running [Fabrice Bellard]’s JSLinux in a browser. [CNLohr] added a few bits to JSLinux allowing him map the x86 IO ports emulated inside JSLinux to the AVR’s IO ports. This allows him to query the status – both analog and digital – using just a browser. Very cool, but [CNLohr] can also run his Minecraft server optimized for 8-bit devices on this microscope slide server to create a bridge between real electronics and redstone circuits.

To sum up what’s going on here, [Bellard] created an x86 emulator in JavaScript, and put Linux on it. [CNLohr] is serving this from a microcontroller attached to a circuit built on a microscope slide so he can blink an LED from within Minecraft. It’s the most beautifully over engineered and useless thing we’ve ever seen, basically.

In the video after the break, you can see [CNLohr]’s overly convoluted walk through of what’s going on with this microscope slide server. As a little bonus, you can also catch a glimpse of Hackaday at 00:20 in [CNLohr]’s most visited / new tab thingy in Firefox. We’re honored, really.

Continue reading “[CNLohr]’s Microscope Slide Linux AVR Minecraft… Thing”

BASH Games

Get serious about your shell scripting skills and maybe you can pull this one off. It’s a game of snake played in a BASH shell. It seems like a coding nightmare, but the final product turns out to be organized well enough for us to understand and took less than 250 lines of code.

[Martin Bruchanov] started on the project after pining for an old DOS game called Housenka. It’s another version of the classic Snake game which we’ve coded ourselves and seen in several projects including this head-to-head version using musical recorders as controllers. When using a terminal emulator capable of ANSI sequences the game is displayed in color using extended characters.

We give [Martin] bonus points for the way he wrote about his project. It describes the mechanics most would be interested in, like how the user input is captured and what drives the update function and food generation. The rest of the details can be gleaned by reading through the code itself.

Building An Inexpensive Squeezebox Client Replacement

squeezebox-replacement-built-on-the-cheap

[Andrew] is a fan of the audio quality provided by the Squeezebox hardware. Like many he was unhappy to hear that the devices were being discontinued, but he figured out a way to build a Squeezebox client clone for less than he could have bought an original.

He set several goals for the build. Most notably he wanted the system to be low-power, noiseless, and to support audio quality of at least 96 kHz at 24 bits. What he came up with is the Pogoplug seen in between the two speakers above. It can be acquired for under $20 and it runs embedded Linux. Another member of the Squeezebox community had been working on a custom distro called SqueezePlug to turn these types of devices into Squeezebox clients. After flashing the distro and tweaking the settings [Andrew] has accomplished his goals. The one caveat is the lack of an audio out port. Above he’s using some cheap USB speakers, but higher-fidelity is possible by choosing a more expensive external USB device.

This will work nicely with that Squeezebox server you built from a Raspberry Pi.

Turning A Tiny Router Into A Webradio

tplink

While the hacking zeitgeist is focused nearly entirely on all those new ARM dev boards that include the Raspberry Pi, some people out there are still doing it old school by modifying existing electronics to suit their needs. [Peter] picked up one of those very inexpensive TP-Link 703n wireless routers we’ve seen before and modified it into a standalone web radio, complete with volume and tuner knobs.

The TP-Link 703n is a wireless router smaller than a credit card available from the usual Chinese resellers for about $20. Able to run OpenWRT, this very inexpensive piece of hardware can be transformed into a device comparable to the Raspberry Pi; a complete Linux system with a few GPIO pins.

[Peter] took his 703n router and added an ATtiny85 connected to two pots and the internal UART. This, along with a script to read the values from the pots, tells the router what station to tune into and what volume to play it. The audio is handled by a USB soundcard with an internal speaker, making [Peter]’s build one of the smallest purpose-built Internet radios we’ve seen.

You can see [Peter]’s radio in action after the break.

Continue reading “Turning A Tiny Router Into A Webradio”

Adding An LCD Screen Terminal For TP-Link Routers

Routers running embedded Linux offer quite a bit of power depending on what you need to do. To extend the usefulness of his TP-Link router [Roman] built a rig that adds an LCD screen to display the terminal. But it ended up being quite a bit more powerful than that.

The first portion of the project was to build a USB video card for the display. [Roman] went with an STM32 development board which resolves the USB device end with the QVGA screen driver (translated). This seems like it would be the lion’s share of the project, but he still needed a driver on the router to interface with the device. This thrust him into the world of USB-class drivers (translated). It even included building graphics support into the kernel of OpenWRT. The final piece of the puzzle was to write a frame buffer (translated) that would help regulate the output to the screen. The result works so well he is even able to play games using ScummVM. See for yourself in the clip after the break.

Continue reading “Adding An LCD Screen Terminal For TP-Link Routers”

Is Entropy Slowing Down Your Android Device?

071210_1705_AndroidDev11.jpg

[Lambgx02] got tired of his Android device getting bogged down and decided to dig down to the cause of the issue. His investigation led him to believe that entropy is causing the slowdown. He believes that his workaround reduces 90% of the lag on the average Android device.

So how is it possible that entropy is causing the problem? It seems there is a bottleneck when an app requests a random number from the Linux kernel running at the lowest level of the device. Android is set up to use /dev/random for all random number requests, but [Lambgx02] says that location has a very shallow pool of numbers available. When they run out the kernel has to reload with a new seed and this is blocking the app that requested the data from continuing.

His solution was to write his own app that seeds /dev/random once every second using a number from /dev/urandom. He mentions that this might cause a security vulnerability as seeding the random data in this way is not quite as random. There may also be issues with battery life, so make sure to monitor performance if you give it a try.

[via Reddit]