Installing ChromeOS on Surface Go

I’m a tablet hopper. I love the idea of a tablet, but they always seem to fall short in one way or another. I’ve had a ton of Surface devices, iPads, and even a few Galaxy Tabs. My favorite device of all time is probably the first generation ThinkPad 10, but it’s just slow enough at this point that it’s not as fun as it once was. My current primary is a 10.5″ iPad Pro.

I do love the Surface lineup, but Windows 10 is a surprising shortcoming. Don’t get me wrong, I really like Windows 10, but from a tablet perspective, it’s a huge step back from Windows 8. Do note, however, that’s the only nice thing I’ll say about Windows 8.

What I’ve really been waiting for is a really good 10-11″ ChromeOS tablet. ChromeOS has a great core, Android support, Linux support for the apps you need, all wrapped up in easy updates and elegant consistency. Usually. The only devices in this form factor are the Acer Chromebook Tab 10, and the clone tablets that are based on that form factor. The ARM chip is somewhat anemic, but I’m mostly okay with that. My concern is the lack of supporting hardware — namely, decent cases, and nicely integrated keyboard designs. Once something comes out that fits that niche, I’m first in line.

Until then? Haxxxxx.

Enter Project Croissant. Croissant, formerly Chromefy, is a tool to convert a ChromiumOS image to a full ChromeOS image. ChromiumOS is the open source version of ChromeOS, consisting of most of what makes ChromeOS good, but missing closed source bits, including Android support. By utilizing a ChromeOS recovery image, Croissant can generate a ChromeOS image that can be installed on most anything with some reasonable driver support. Armed with this, I’m hoping to make a Surface Go, arguably one of the best form factors out there right now, a much more useful tablet for me.


What definitely doesn’t work:

  • Front and Rear Cameras
  • Power button to wake, but other touch events or keys seem fine

What’s fiddly:

  • Touch response is odd, a press event occurs even on light touches or drags
  • The type cover function key icons do not correspond to their ChromeOS functionality
  • Sleep still burns some battery

What really works:

  • Wi-fi and bluetooth seem to work splendidly
  • The stylus responds well, and the pen icon appears
  • The type cover attaches and disconnects as one expects, backlight works, everything is fine
  • The SD card mounts just fine
  • USB-C devices work exactly as they should
  • Audio output
  • Lid sensor with Type Cover

To create this image, I used another machine running Linux. This can be done in a virtual machine, or using a Linux live image.

  1. To begin, we need to gather dependencies
    1. Obtain from GitHub
    2. Obtain the nocturne 71 recovery image
    3. Obtain the caroline 71 recovery image
    4. Obtain the ArnoldTheBat R72 Special image
  2. We’ll also need to grab updated firmware for wi-fi and bluetooth support within Chromium/Chrome
    1. Retrieve an up to date firmware-6.bin from ath10k firmware
    2. Retrieve updated board.bin from Killer Networking wireless firmware
  3. With all of our dependencies gathered, we can actually create our installation image
    1. Uncompress each image into a directory
    2. Copy into the same directory
    3. Execute chromefy to create the image, using something similar to sudo bash chromiumos_image.img chromeos_11151.113.0_nocturne_recovery_stable-channel_mp.bin chromeos_11151.113.0_caroline_recovery_stable-channel_mp.bin
  4. Write the updated chromiumos_image.bin to a USB stick using Etcher or similar
  5. Upon completion, remove and reinsert the USB stick
  6. Insert updated firmware and configuration to our ChromeOS image
    1. Find the partition containing the rootfs, which may have automounted under /media/your-username/, and contains directories like ‘bin’, and ‘lib’
    2. Remove [path-to-rootfs]/lib/firmware/ath10k/QCA6174/hw3.0/board-2.bin
    3. Replace [path-to-rootfs]/lib/firmware/ath10k/QCA6174/hw3.0/board.bin with the previously downloaded file
    4. Replace [path-to-rootfs]/lib/firmware/ath10k/QCA6174/hw3.0/firmware-6.bin with the previously downloaded file
    5. Create [path-to-rootfs]/etc/modprobe.d/ath10k.conf and add options ath10k_core skip_otp=yto the file
  7. Unmount the mounted USB filesystems
  8. Get your Surface Go and running
    1. Within Windows, go to Settings > Update and Recovery > Recovery
    2. Under Advanced Startup, select Restart Now
    3. Navigate to Troubleshoot > Advanced, and select UEFI Firmware Settings
    4. Under Boot Configuration, disable Secure Boot and set USB Storage to the top of the boot order
    5. Select Reboot to boot from USB stick

This is a bit of the test front for the image. One is able to log in and poke around a bit within the USB live image. The installation process got a little hairy, though, at least for ArnoldTheBat 72 + Eve 71. Note that the first command run will blow away the copy of Windows installed on the Surface Go. There are instructions available on the Project Croissant GitHub README for doing multiboot. As I have the 64gb Go, multiboot makes no sense for me. Also note that the 128gb Go uses SSD instead of eMMC, so the device name is going to change, likely to some derivative of /dev/nvme0n1.

  • Execute /usr/sbin/chromeos-install –dst /dev/mmcblk0 –skip_postinstall
  • Reboot into a live image of Linux
  • Using Gparted, or similar, resize /dev/mmcblk0p3 (H-STATE) down one gigabyte
  • Remove /dev/mmcblk0p12, the EFI_SYSTEM partition
  • Create a new partition, 1gb, fat32, with a partition name of EFI_SYSTEM
  • Apply
  • Right click the EFI_SYSTEM partition and then “Manage Flags”
  • Select legacy_boot, boot, esp
  • Open a terminal
  • sudo mkdir /mnt/cros /mnt/efi
  • Insert the USB stick containing your ChromeOS image
  • Find the device of the USB stick, likely /dev/sdb, and replace sdx with the device found, and execute mount /dev/sdb12 /mnt/cros to mount the Chrome image’s EFI partition
  • Execute mount /dev/mmcblk0p12 /mnt/efi to mount the installed EFI partition
  • Execute cp -Rp /mnt/cros/* /mnt/efi/ to copy the EFI partition over
  • Reboot and remove the USB stick

Welcome to your new ChromeOS installation!

Migration and Merging

Hey, welcome to the new, largely the same as the old

Given that the Ambition Framework has gone to sleep, and I’ve largely stopped hobby development on Vala, it was about time that I both migrate my blog away from Parchment, and also merge together some of the other blogs I’ve maintained over the past few years.

While I’m not the biggest fan of WordPress, it provided two things that I really wanted out of a writing platform — a solid history of maintenance and security updates, and the ability to host comments without too much pain. Here we are.

Bigger than double DIN

A bigger write up later, but I had to share. This is a “double DIN” bezel/console — actually, VW Golf sized — from installed in a 2002 Audi TT, with a Joying JY-VL130 VW-focused Android-based head unit.

Random thoughts

Every day that I take off the engine cover and oil hasn’t exploded everywhere is a good day.

New Alternator

I had no idea alternators were so heavy. Dense little bastards, aren’t they?

Alternator change was mostly uneventful, except inconveniently placed — like everything else in this car. I followed this guide to get down in there. It was mostly uncovered during the timing belt work, but I really didn’t want to do the full disassembly, so the guide helped. While removing the vacuum reservoir tank (what the guide calls ‘the black canister’), I snapped a connector off the tank, which means that I had to replace the tank (8n0 131 541). Hooray plastic molding, and hooray Wolf Auto Parts.

Picked up a remanufactured alternator from Advance Auto Parts. Looks to be a rebuild in a Bosch housing. Everything lines up well and looks good, so we’ll see how long it lasts. I have the receipt if not. Bosch offers their own remanufactured units, but they don’t have any dealers in Minnesota, and don’t seem to sell online. Oh well. Out the door for under $130 for a nice looking, easily installed unit.

New on the left, old on the right. Have a weird feeling that the old one was original.

So, of course, this nice, new looking unit stands out a bit.


The big issue was that it would have been far easier to do while I was doing everything else, but I’m glad I did the timing belt beforehand. Reattaching the accessory belt blind, without removing the sound dampener or putting the car on jack stands was doable, but far easier when I remembered where everything was. The other issue was getting enough clearance without taking everything out that I had already taken out before. Most people seem to take out a vacuum reservoir tank that sits next to the passenger side headlight. Easy enough to remove — disconnect the hose tangle on top, remove one 13mm bolt, remove a vacuum line, remove. Except while trying to remove the self-clamping vacuum line, I broke the plastic piece it attaches to clear off the tank.


So, thanks Wolf Auto Parts for the quick delivery of a replacement tank. Pro tip – to remove this line, you can see the outline of a little button on the lip of this thing, about 1cm long, running along the lip. That has to be pushed in, and then the line can be removed safely and successfully. Save yourself the $35-$40 to replace the tank.

Needless to say, everything is a success. All my lights disappeared, and running voltage is perfect.

Timing Belt Service

After 3 years of ownership, finally had to do some real work on the TT, and when it rains, it pours — but more on that later. This Audi TT has one of the VW/Audi 1.8T variants, which means it uses a timing belt, and the replacement interval on these has dropped due to premature failure of the timing belt over the years. If the belt goes, so goes your engine — with bent valves at the very minimum. The manual states that it should be replaced every 105,000 miles, whereas the common knowledge now is 60-70k. I have no idea when it was done last, but if I’m going to do anything fun in the car, should probably take care of this.

The nice thing about owning a 15 year old car is that everything’s been done already by someone else, so I followed the excellent Timing Belt replacement guide by BlueTTop on the AudiWorld forum. I used the ECS Timing Belt kit with the Gates belt, and picked up a new Coolant Expansion Tank as mine was yellowed, and one 4-pin connector to replace a cracked housing on my 1st cylinder coil pack. Total replaced on the car included the aforementioned connector and coolant expansion tank, as well as the timing belt, accessory belt, tensioning pulley, tensioning dampener, water pump, and thermostat. For good measure, I also did an oil change.

I won’t go through every step of what I did, as the guide above did it far better than I, but just to highlight a few things…

Everything was dirty. This is almost-before, with the charge pipe removed, but most everything else still in place. Notice the very yellowed coolant expansion tank in the upper left.
Purchased an engine support bar from Harbor Freight for the occasion, as I’d have to either do that or get another jack, and felt this was safer if I had to buy something. Oddly, this was the most nerve wracking part for me, as I was so afraid of what would happen if something broke and the engine came loose. Note the trusty Bentley manual and what I’ve dubbed as “the tool tray” on the front of the car.
When draining your coolant, make sure the hose is on all the way, or you get a garage floor full of coolant. Doh.

The existing timing belt looks dry and old, but maybe the new one does already.
There is not a lot of room to work with these connectors, and I have a feeling this is already an aftermarket harness. The Lisle 57750 wire terminal tool kit from Amazon did a great job here, and way cheaper than the VW/Audi tool.

After everything was said and done, it sure looks a lot cleaner. I used Simply Green as I went to clean off parts as I disassembled and reassembled. I didn’t clean everything under the hood, as you can see by the battery tray, plastic surround, and some of the hoses.

Honestly, this was a lot of fun. It’s a 1-2 day job that took me about a month in between job and kids and time with family, but it was nice to just work on one piece at a time, especially when I needed something calming. There were frustrating parts — bolts that were nearly impossible to get to (hello, bottom thermostat housing bolt), missing tools (bought a torque wrench that only went up to 30 lb ft, while the engine needs 33 and 40, and the wheels need 89), things that didn’t make sense (is that supposed to spin or no?). There were also fantastic parts, like when the timing belt finally went on, every TDC mark lined up, and after a few spins, still lined up.

The test drive after went well, except for not putting quite enough coolant in. A new problem cropped up, though. On one of my drives, all of this lit up:

ABS, Brake, ESP, and Alternator. Not a good sign. VAG-COM doesn’t help me, as I have another persistent K1 Short to Ground issue that pulling fuses is not helping me track down. Battery is putting out 12.5, but testing the alternator gave me over 16V. I guess there’s the problem. Either it’s the voltage regulator on the alternator, or something else in the alternator, or both… Next up, replace the alternator!

New V6 rear valance!

In non-mechanical repairs, finally had a chance to replace two issues on my vehicle, and one looks pretty awesome. First one was replacing the passenger side lower grille, where most cars would have a fog light. It was missing, and there was just one big stupid looking hole in the front. Second, I replaced the rear valance (lower bumper, surrounding exhaust pipes) with the one that came with the upmarket V6 model. It wasn’t just for the look — at some point, someone rear ended this car, likely before I owned it, and it was cracked and snapped from the retaining bolts. I’m just happy I didn’t need a whole bumper.

It looks great. Ignore the fact that I’m in the reflection.

Adventures in “Going Elsewhere”

Just had to share.

I purchased the TT nearly three years ago, shortly after my son was born. Since then, it has gone to an actual shop once, and that was to do an oil change as we were mid move, and I didn’t have any of my stuff. When I bought it, the A/C blew cold air on a very hot day, which I was surprised and impressed with for a 165+k mile car. Unfortunately, by the next summer, it was gone.

I’ve tried a recharge kit, but the gas blew right out, leading me to believe there’s a leak somewhere. I bought a kit with dye, but the nozzle was too shallow for the low pressure port, so I got dye all around the port. Fine. I lack the tools or knowledge to do much of anything useful with air conditioning, so I brought it to a local shop to see if they could track down the issue.

They charge me $50 for the inspection, which I pay whether it gets repaired or not. I did not. Here’s what they found.

a) There’s a “big leak”, and they don’t know yet what’s doing it. My guess is that it’s the dye from my kit that they’re looking at, because if you listen to the noise of the gas leaving, it’s from the back of the engine, not the front. But, no dye at the back.

b) Even though they don’t know what’s leaking, they’re very sure I need a “freon temp sensor”, which will cost $108.57 for the part, and $96.60 in labor. Two issues. One, there’s no such thing as a refrigerant temperature sensor in the TT, only an ambient temperature sensor. There’s a coolant temperature sensor, but that has nothing to do with the HVAC. Chances are, they’re talking about the high pressure sensor which is in a static open state, which could be due to the leak *or* because the system is empty. Second issue, and this is minor, but stop calling it freon, as no car since about 1994 uses freon.

c) After they replace that, then they can evaculate and recharge the system for $172.62, and recheck to see where the leak is from.

In the end, they wanted $475.44 to diagnose, repair, and recharge, but no guarantees it’d work after.

I’ll just keep the top down, and worry about the switch later.

New intake

A little over a year ago, I decided it’d be neat to replace the intake on the TT, and while research brought me to the Modshack VTDA, they didn’t sell it anymore. I did find a K&N unit for a price I could afford, and made the switch. It completely replaced the stock airbox with a cone filter, a mini breather filter, and a big holder for the whole unit. It looked great, and sounded pretty awesome (extra woosh is better woosh), but there were two problems. First, it exacerbated a random CEL I was experiencing, and on longer trips, the wooshing got annoying, as I’m old.

Fast forward to today, and someone was selling a used VTDA on I jumped on it, and he shipped it super quickly. In a box, I got the VTDA… cylinder with a K&N filter inside, a mini breather filter, and some packing material. Browsed Google a bit until I found someone else who had installed it, and did the installation. Since the airbox already came out in the K&N install, the installation took me about 15 minutes, including a quick clean of the MAF sensor and devane of the MAF.

I’m super happy with how it looks, though the whole engine bay could use a cleaning, along with the VTDA. The best part, though, was the drive. It gave me the same level of breathing as the K&N did, but the sensor clean seems to have resolved my CEL and my hesitation, and the sound is still gently enhanced, but muffled a bit more so it’s not in my face when the top is down.
Highly recommended easy modification.
In the meantime, I never really finished project Audi Audio on the above, though I did take pictures. I may create a summary post, may not. Nevertheless, when I did the installation originally, I installed two amps to drive the speakers and the 8″ subwoofer. The sub was driven by an Alpine MRV-T320, and the speakers were driven by an Alpine MRP-F300. They both provided ample power for the installation, but I was always bothered by having two amps throwing off heat in the cramped shelf of a trunk of a roadster. I replaced those two with a Precision Power P900.5 five channel amplifier this weekend, and what a great replacement. The sound quality is great, the unit is super compact but still throws out the power I need, and it doesn’t give off more heat than one single of those Alpine amps.
I’ve also been working on cutting and moving things to make the TT head unit a double DIN unit. I started with a Nexus 7 install, but got frustrated with how finicky it was in terms of powering on and resetting, so I grabbed one of those inexpensive Chinese Android-based head units, since I have to custom cut anyway. I’ve completed the wiring, and cut the radio frame appropriately so that it’s mounted, stays there, and works well. I’m in the process now of altering the bezel to make it look like it belongs, and I’ll post progress there later.

Shopping for Cars

My current car, a 2013 Chrysler 200 Limited, is under a lease that will be up in June. I loved this car far more than I expected to, given the reviews on it, but I can provide more color to that later. The end story is that the residual value of my car (the amount I’d have to pay to purchase it) is going to be about $5,000 more than what it blue books for, so it makes precisely zero sense to purchase it. I have to find a new car.

I thought it’d be interesting, maybe only for my own historical purposes, to talk about the vehicles as I drive them and come to a conclusion. I managed to hit the local auto show a few weekends ago to pull my list under ten cars, but I’m still all over the place in terms of size, power, and price. Currently, in the running, I have:

  • 2016 Chrysler 200C – I liked mine so much, and the new one apparently looks/feels/performs so much better.
  • 2017 Chevrolet Volt Premier – The concept of mostly electric driving sounds great, with a little bit of fuel to back it up. The second generation actually looks like a car.
  • 2016 Fiat 500x Lounge – Not much for SUVs, but this looks classy while still being small enough to whip around.
  • 2016 Buick Regal Premium II or GS – Buick wasn’t on my list until the auto show, these looked nicer than I ever expected.
  • 2016 Volkswagen GTI SE 4-Door – I love the idea of a small car with a nice turbo.
  • 2016 Nissan Maxima SL or Platinum – I can’t stop staring at these — the design is funky but approachable, the interior looks amazing, and it has the big Nissan V6.
  • 2016 Kia Optima SX or SXL – Kia wasn’t originally on my list, but a good friend of mine has one and likes it a lot.
  • 2016 Audi A4 – With the introduction of the 2017s, these actually become reasonable. I had a 2008 that I really liked, except for what the previous owner did to it.

What do I want? I want something that is comfortable to commute in, with a great stereo system with navigation and/or Android Auto, comfortable seats with heat, and enough performance to let me smile once in a while. I already have a project car, so it doesn’t have to be insane, but I don’t want a dog. Naturally, I err on the side of more interesting gadgets, so I’d love to have things like adaptive cruise control and lane departure warnings. I’d also love to have ventilated seats. Bonus points if I can get a brown leather interior.

The 200 I have now has an incredible sound system, by Boston Acoustics, of all people, navigation, heated leather seats, a sunroof, and the Pentastar V6, a 283hp beast that was ill-suited for this car’s platform, but puts a big grin on my face regardless. It seems you can get it to 60 in 6 seconds, but that implies you have traction.

On with it!