Making Lululemonade

Why do this?

This is about me documenting all my failed attempts at trying to gain control over the MIRROR. As I am writing this, I have not succeeded at all. I have finally succeeded. But, maybe writing this will help capture what I am doing and maybe someone else will take the helm and help out. Also, one of the fun but challenging things was learning along the way. It seems like the barrier to understanding some of this is quite high. I wanted to make this as easy to follow and explain as much I could for others. I will first write the successful method and then go back and list all the things that didn’t work

What is the MIRROR?

My partner bought the MIRROR, which is an exercise device. This was before Lululemon bought them, before they discontinued the sale of it, and before they killed the content. She didn’t use it much (I knew that was going to happen), so now it just hangs there. It weighs 30Kg. It was a nightmare to hang and required a few trips to the hardware store to get the right hammer drill. But now that it’s hanging it does look a nice mirror.

When the mirror is off, it looks like a regular mirror. When it is on, it can show videos of workouts. So it’s basically a mirror with a TV inside it. However, it requires an app to interface with it; so you cannot just stream whatever you want to it.

When my partner stopped using it, it turned into a nice looking mirror that was useless otherwise. It wasn’t broken but obviously wasn’t being taken full advantage of. Like a broken escalator which turns into stairs (side note actually a broken escalator is not stairs a failed escalator is awful), the MIRROR just turns into a mirror. I wanted to use it for something else. For what, I wasn’t sure but I wanted to be able to display whatever I wanted on it.

Here we go

I hope to make this write-up as basic as possible. One thing I struggled was a lot of the things I read to get this done were complex and hard to follow and would assume a lot of prior knowledge. I hope to make this as accessible to people as possible. That being said, the approach is not trivial and not simple. Requires hardware access, some specialized hardware, and some persistence. Perhaps someone much more capable than me can turn this into a single-click. It seems the easier approach is to replace the internal board as done here

Note: There are at least two version of the Mirror, this will only work on the NXP IMX8MM version of the board. Mirror board

My general approach was: Use JTAG to modify live memory to gain access to the system via ADB with privileges. Once there dump eMMC. Using the eMMC image, extract the Secondary Program Loader (SPL) to load our own U-Boot which then can be used to load our own OS.