Saturday, July 4, 2026

Testing BitBake on Yocto 6.0.1 (Wrynose) LTS

Last fall, I tested my first Yocto (5.0) linux builds on a couple machines from last decade: a 2011 Lenovo ThinkPad Edge 420 with an i3 2350M and 6GB of RAM, and a Ryzen 5 1600 with 16GB of RAM. The latter is quite capable, but I honestly found it more interesting to see the dual core i3 (w/ 4 threads) manage to compile a core-image-minimal. I even wrote an installation log about the process (I recorded video with the Ryzen using Ubuntu's built-in CPU-based GNOME Recorder, since it has 12 threads and the GPU (a Radeon 6450 or R5 240) I was using didn't have at least VCE 1.0), whereas I only took screenshots on the i3 2350m during load, to limit crashing)

With the release of Yocto 6.0.1 LTS Wrynose, I was curious to test out BitBake, on a PC in between the performance of the i3 2350m and the Ryzen 5 1600. My 2015 FX8320E with 8 threads (it's called an 8 core but it's really a quad core with 2 threads each). I built this PC with parts from MicroCenter and Newegg, plus a lot of swapping of GPUs in the past several years, but I had a few new things I wanted to test out. First, I acquired a DVR box (circa 2010) that had been in disuse, and since I don't really plan on using it for a cable subscription, assuming it's still offered in that format, I was able to remove the 300GB HDD from it and install it on my Gigabyte 990FX series board. Instead of using it as a storage drive for a faster SSD, I decided to install a copy of Rocky Linux 9.5 (from an ISO I had from 2024) which later upgraded to 9.8). Fortunately, Yocto has supported Rocky Linux 9 since 5.0 scarthgap releases, so the installation process had documentation for it.

The size of the disk space needed for a minimal image is less than 100GB, although it is recommended to have more than 160GB for Sato (This was one reason I was only able to compile the core-minimal-image on my Lenovo E420, which had a 120GB SSD at the time). The Sato image compiled using a Crucial M.2 500GB NVMe drive which I purchased in 2020 for my Ryzen 5 1600. However, I had not tested a spinning platter before, and I was also curious how much of that new 32GB RAM requirement was really needed, mainly due to the introduction of LLVM 22.1.2

Results: I completed my first core-minimal-image compile early this morning (well, not super early, but around 3AM) using the 6.18 kernel. I watched a video about LLVM using lld, a faster linker than GNU BFD, and even gold, since LLVM-native was taking one of the longest steps of the compilation. I realized this was normal by now, because it was also what drew me towards reading about LLVM back in December when I started testing Yocto. The Hitachi 5900 RPM (or possibly 7200RPM) drive had little to do with it. However, it's unclear how much of the standard toolchain requires legacy compilations, whereas lld was designed for larger and more frequently compiled software like Chrome, Rust, and Mesa.

By the time the compilation was complete, I had used 11.6GB on my root partition (of 75.1GB- likely little was for Poky), and 76.6GB out of a 226.8 GB on my home partition. Thus the minimal image doesn't require 140GB, but then again, it's not a typical image unless one is working on microcontrollers or very old systems.

Interestingly, the time the RAM usage was highest was around the time a GCC, Yocto-linux, and llvm task, zstd, openssl and/or glibc were all compiling at the same time. It peaked around 20GB of RAM, although only briefly, around 3-4 hours in. Typical usage was around 12GB and it frequently reached 14-15GB. The total compilation time was around 5hrs, and it appeared more CPU bottlenecked since the FX 8320E is technically around 4 modules with 2 logical threads each. That said, had I compiled a Sato image, it might take significantly longer (which is why the Ryzen is preferred). I did find some FX-specific potential slow downs for AVX2-specific compilers (since it does not have AVX2, only AVX), although I wasn't sure if it was affected by it (This is partly why upstream RHEL-based distros tend to drop support for older architectures faster than other linux distros, like x86-64v2 cpus lacking AVX2, including the Vishera line of AMD processors, which isn't supported in Rocky Linux 10, although RL9 will still receive support til 2032). I also found an AMD optimized C compiler, which Ryzen has improved performance for, although I am not sure if it helped the Piledriver.

Some unexpected unpleasantries. Unlike Yocto 5.0, the development image is no longer a playground. Developers on Yocto 6 are expected to use passwords, wear suits and ties to work, and since systemd requires a password, the login process after I ran qemux86-64 did not accept a password, since none was generated:

By default, systemd/PAM in Yocto blocks empty passwords for security. To enable them, add EXTRA_IMAGE_FEATURES += "allow-empty-password" and EXTRA_IMAGE_FEATURES += "debug-tweaks" to your local.conf, or create a custom pam_unix config using the nullok flag. [1, 2, 3] 

From last year's ELCE Conference, I read that empty "debug-tweaks" was actually removed in Walnascar 5.2 (p.15-17):

 

I spent an hour trying to edit the "config file", only to realize the correct config file, a .bb file in recipes-core, was in a different folder.

I had been searching the qemuboot.conf file:

 

This was at 3AM, so I had no interest in patching that after a 5 hr compilation. I had at least found the answer, so I saved my notes for the next day (today). I had been using 5.0 in January (scarthgap), so I was most likely not affected by the 5.2 change. Each release has its own quirks- for example, I had to install a prebuilt buildtools tarball, since I wasn't able to build it myself. In any case, three options are given to fix a bug that affects AlmaLinux 9, CentOS 9, and RockyLinux 9:

"The AlmaLinux 9, CentOS 9 and RockyLinux 9 distributions are affected by a bug described in https://bugzilla.yoctoproject.org/show_bug.cgi?id=16143, which is the reason why a buildtools tarball is required."

"buildtools

Build tools in binary form, providing required versions of development tools (such as Git, GCC, Python and make), to run the OpenEmbedded build system on a development host without such minimum versions."

So, will I need to recompile the image with the debugging image features allowed? Well, before I decide that, I did find similar issues on forums posted as early as 2019 through 2024, but those were using slightly different Yocto versions. I think my password is effectively in a "locked state" as the 2019 post suggests, since I baked an image without having a way to edit the config file, which is now in binary. So I probably will try to compile some other time. At least I learned something: create more trust in the world, since there is no need to mandate passwords. :) 

I haven't uploaded the 3.2GB file yet of the 6 hr video yet, but I did record an earlier video of me installing Yocto on Rocky:

https://youtu.be/lGz8M_6JwDU (it's not the full installation- there is a break near the end as I figure out how to source the buildtools and poky environment sdk setup- the correct/final instruction for sourcing the path that I downloaded it to can be seen at the top of the terminal in the first image of this post)

 (Update 7-5: I uploaded a 93 minute of the first 1/3rd of the core-image-minimal compilation: https://youtu.be/7CHvjajy8f0)

(Update 2 from 7-5: If you're wondering how/when I acquired the RAM, I tracked down an invoice from 2015, and the price was par for the time, although a year later RAM prices decreased even further, costing less than 50%  of what I paid:


Yes, I do wish I bought more RAM when it was $.89/GB, but it may still be cheaper for newer RAM, especially if you manage to find DDR4/5 on sale when prices decrease, maybe in a year or two. Plus, there's nothing like being able to run a new program that couldn't run on less than 32GB before, but 32GB should last me for a while, perhaps for 15+ years as I await a new AMD GPU before 2030.


For 32GB of DDR3 RAM, it's possibly worth more than what I paid in 2015. However, for used RAM, you can still find deals on eBay

$25 for used RAM- get it while it lasts
$25 for used RAM- get it while it lasts

If you're just buying a single stick or two, it might even match the RAM you have, so you can get dual channel and possibly increase your maximum speed. The sticks I bought were not part of a quad channel pack, but my board didn't support quad channel anyways, at least I don't think it did- and it's more useful for large compilations/encodings to run at 1600MHz with 4 than 2 at 2133MHz with Intel XMP Ready). There are alot of more overseas manufacturers/brands nowadays, some sell direct, although I do not know very much as to their quality (I did buy some 2GB DDR2 sticks in 2017 via Newegg's 3rd party sellers to refurbish a system from 2010).

My notes from the AM: 

"steps.txt"


1. cd bitbake-builds

2. source ./layers/openembedded-core/oe-init-build-env 

3. runqemu qemux86-64 snapshot nographic
 

(This will allow me to get back into the qemu once/if I fix the pw issue or recompile, since I exited the terminal and one has to log back into the build environment to run qemu) 

I used GPU Screen Recorder and installed the h.265 hardware encoder for my AMD GPU (a non-free plugin). VLC was able to play it.

Here is also a screenshot of the manifest:

 

Knowing I can build an image, it's more about deciding what I don't need:

From the ELCE presentations, it shows how one can remove a lot more:

 

What I'd like to see: 

DISTRO_FEATURES:remove = "acl alsa bluetooth debuginfod ipv6 pcmcia usbgadget usbhost wifi xattr nfs zeroconf pci 3g nfc vfat seccomp systemd usrmerge pulseaudio gobject-introspection-data ldconfig" ;)

 

Wednesday, July 1, 2026

Delivery Optimization for Differential Browser Updates and Desktop Software to Minimize Bandwidth Congestion

I learn a lot about software optimizations by picking the slowest procedure to complete something. Running a software or OS update in the background on a fast computer with a fast internet connection is usually an easy task because it is really invisible. This is the most common sense solution for anyone with those pre-requisites. But what if you have a slow internet connection? I have noticed Chrome and Firefox have what's called "differential" updates when a browser is already installed. For minor security updates, this might 10-12MB. For a major release, such as Chrome 150, which was released June 30th, this is a 100MB+ update. The full installation file is somewhere around 465MB. I happened to have a lazy day today with few obligations, so I did a little experiment. I have two Windows 10 PCs- one a tower, and the other a laptop, with a 64 bit version of Windows. One OS is actually Windows 10 Pro, so it's possible that the Chrome versions for each are slightly different. However, I also had Firefox updates on each machine as well, and they were only around 12MB. These didn't take very long to install, so they completed early this afternoon.

After I updated Firefox, I also noticed a Chrome update on my laptop, the one with Windows 10 Pro (both are 22H2). It did seem to take a little longer, and upon checking, realized it was upgrading not only from a 149.0.x, but two updates to a later 149.0.x version, and then to a 150.0.x version, which required at least two restarts (of the browser). This completed sooner, sometime in the afternoon. By 3 or 4 pm, however, I noticed my other PC was still updating Chrome. Granted, the occasional wifi dropped, and it had to resume or restart, but I didn't think it would need to start all over again. A couple hours later, I started to get really puzzled. As I mentioned in earlier blog posts, I have been using a 384kbps connection for a month to get a feel of some early internet speeds and to also see how slow some programs are or dependent on heavy websites. However, I am able to download a couple hundred MBs in a few hours, if needed. I thought, even if it's downloading the full installer (~465MB), it should only take 3 hours max. I reasoned that it might take longer to update a browser if it has a lot of cache or cookies and needs to patch specific account information without deleting sensitive data. But I wasn't willing to erase everything or at least back it up (although I am starting to think of exporting my bookmarks and things).

Most of this would be a non issue on even a 1Mbps connection, but 384kbps is fast enough to start the update but not complete it without hiccups. There is also the added issue of needing to ensure the PC doesn't go into sleep or suspend if leaving it unattended for 15 minutes or whatever settings the Sleep is at- I set mine at 5 hrs. But even with all that, at nearly 10:30pm the update is still taking a long time, on Windows 10 Home. The computer isn't slow by any means- there is more than 13GB of storage left, SSD, and is an 8 core processor with plenty of RAM. So I started to reason that if the updates are incremental, it's doing it in a very haphazard fashion. I also checked the Resource Monitor, and saw over 40 lines of Disk Activity showing cached writing, some which may have been for Chrome, and some for system scans (like Defender). It seemed quite odd, so I thought maybe there is a better way of at least displaying the progress of the install. I only saw progress a few times- sometimes updating up to 8%, stalling near 5%, and then seeing the update later on at 1%. I didn't see a log anywhere of whether it actually did restart, despite the wifi drops (which happened only a couple times), but I did get the occasional error like this:

https://support.google.com/chrome/thread/264277904/unable-to-download-chrome-due-to-code-segment?hl=en

From Gemini:

1. Clear Update Cache and Data

Corrupted temporary files often trigger this segment-length limit.

  • Close all open instances of the browser.

  • On your keyboard, press Windows Key + R to open the Run dialogue.

  • Type %localappdata% and hit Enter.

  • Navigate to the Google folder, then delete the Chrome folder entirely to reset the update files. 

    Google Help +1

2. Temporarily Disable Antivirus/Firewall

Strict antivirus policies or false-positive security blocks frequently disrupt executable downloads, resulting in the 64k limit error. 

  • Turn off your third-party antivirus software or firewall for 10 minutes.

  • Attempt the update or download the fresh installer again.

  • Remember to re-enable your protection immediately afterward. 

    Google Help

3. Run a Fresh Full Installer

If built-in update checks repeatedly fail, bypass them by reinstalling the app directly:

  • Download the fresh, standalone executable from the Google Chrome official website.

  • Run the installer as an administrator (Right-click > Run as administrator). 

    Google Help

If you can tell me which application is giving you this error and what antivirus software you use, I can give you more exact steps to fix it.

----------------

The first option appears to delete browser files, so I was hesitant to use that.The 2nd one seemed plausible as a minimally invasive way to delete app data and only bypassing the AV if it was causing the issue. The third option was my last resort, and seemed preferrable if it could transfer my settings from the earlier version, which usually it does.

But then I thought, what if the third solution was the only fix, and a number of PCs on a home network had to to the same fix?The full download would be 465MB x 2, 3 or n. I checked if there is a remote install option (often available for enterprise PCs, and there is, called GPO).

https://support.google.com/chrome/a/thread/9164438/how-to-patch-chrome-on-multiple-clients-in-an-offline-environment?hl=en

https://serverfault.com/questions/364150/running-google-chrome-updates-from-a-centralized-location

However, not everyone is an enterprise customer or sysadmin, and this option is usually overkill (it also might not even address the direct issue at hand, which is minimizing download traffic if it is a very limited bandwidth network (such as India).

I also wondered if I could share the differential/delta updates over the network, without needing to distribute the full 465MB download (assuming one is using the same architecture, such as x86_64, MacOS, or AARCH64, etc). In a LAN, file sharing is well established, so that would be a simple, but unnecessary way to update a browser needing just a 10-100MB update.

Setting up PCs in a group policy (via Active Directory, etc) is a way to allow sharing between devices, although there are other methods too (sneakernet, USB drives, uploading to a cloud drive and back), but typically this is overly permissive unless sharing is restricted to a single folder and specified users. Even then, the capability is typically tied to a general folder, rather than a specific type of software. Microsoft Windows and Steam Client updates allow a more clever and efficient way of sharing files on a local network, without needing explicitly opt-in to sharing known directories and files between PCs:

                   

The concept should be simple: major software like browsers and clients (such as Steam, Discord, Firefox, Chrome and other popular desktop software could share core client updates on the local network without needing to download redundant data or allowing excessive file sharing permissions. It is possible certain updates are tailored for certain builds, like Windows 10 Home vs Pro, but in many cases a 64 bit build is going to be the same across an architecture. The same could be said about Docker files, which are architecture independent files, although these are often, if not typically entire programs , requiring a full download for newer versions.

On a local area network, Windows and Steam are able to share only the game files needed to install or update a game in the gigabytes, sometimes hundreds of GB, so this option makes sense with people with a data cap (especially mobile plans that are not unlimiited). Windows updates also can reach a couple gigabytes, and are often 800MB+ for monthly or quarterly updates. Thus these updates can quickly add up in small businesses and homes that have a not unlimited connection. Modern routers often can handle Gbps speeds, so transferring a few hundred MB can be completed in seconds.

A wifi hotspot on a mobile phone can function like a router, but tethering does not typically have all the LAN settings that a more featured router has. Furthermore, it is unclear if they have a data sharing option that Windows or Steam can take advantage of.

While writing this, I also realized the first option might offer a data recovery option, as deleting the Chrome cache folder doesn't necessarily require deleting the data entirely, but moving it to another directory while the update takes place. Nonetheless, it might be better to delete the temp directory once the update completes, restoring only bookmarks and passwords if necessary- probably via another method done before that relocation step).

Tethering is the process of sharing a data plan on a mobile network with other devices that that cell phone or hotspot is broadcasting wifi to, somewhat like an ad-hoc network. However, this network is not necessarily receiving data from the devices connected to the cellular device providing the internet, for the purposes of file sharing, but merely relaying them to the internet.

A couple apps for Android allow file sharing, such as LocalSend and Cx File Explorer. These operate more as FTP servers or file transfer protocols, rather than specific application update synchronizers. While transferring a specific delta or differential update may technically be packaged as a single file, initializing this update may depend on the application, and if it could be instructed to search for other applications on the same network, then in theory, it could transfer itself to other devices, but this would require a few additional steps:

  1. It would require the file transfer suite to index all the files on all the devices, at least by the programs that request them (for the folders in the other devices that have the same software installed).

  2. It would need some way for the file transfer software to search for compatible applications capable of and needing to search for updates. So for example, “CuteFTP” is running on an Android phone which doubles as a hotspot. Android stores arch-agnostic update files in a central directory, which can save on uploading data in the local network (although this might be very minimal and the phone would need to have quite a bit of extra storage, although if it is just the latest google update for an x86_64, it might only be 10-100MB.

  3. By storing delta this on an Android folder or a Windows/linux folder, the “CuteFTP” software could search for applications periodically once a participating application gets an update, then signal to other applications on other PCs on that WLAN hotspot that the update is downloaded or available. This way, the updates can not only be downloaded simultaneously to multiple clients on the WLAN, but it sidesteps the entire process of the browser interacting with Google servers while completing the update, saving time and preventing interruptions if something happens during the update.

After writing this, i searched “Steam file sharing on a mobile hotspot” to see if Steam recognizes wifi hotspots the same way it recognizes a LAN, and found:

https://www.reddit.com/r/gaming/comments/1bzql4k/is_it_possible_to_do_local_network_game_transfers/

https://steamcommunity.com/discussions/forum/8/601902348018668256/

        

Admittedly, I have little interest in using my phone hotspot to transfer hundreds of GB of game data (though might in the future), and see this as more practical for the occasional hundreds of MB of a system or software update. It would benefit the user who uses a mobile tethering hotspot on a semiregular basis.

If you check the Windows Optimization page again, recall that it provides an option to share files with devices on the local network, and files with anyone on the internet. If the home network is trusted, it would presumably be safer than sharing with others on the internet, but the latter also may involve a peering cost when the device isn't being used but is on an idle (data caps may be reached if the user is not careful but is feeling altruistic, unless Microsoft caps the amount of upload regardless of the generosity felt, probably for sane reasons).

If the latter, then in theory, users on the same hotspot but less familiar with each other- e.g. An internet cafe (if they still exist), might share browser updates and OS updates to save the business owner's bandwidth, but not the user's own data usage, which they might be already paying for – another example is roommates sharing an internet service, but not really sharing data themselves. This could still result in an improved internet experience, since more data is available to download while offloading identical software distributions and updates to a local network, in the torrent fashion.

What types of issues can be foreseen in expanding this use of Delivery Optimization? Checksum and digital signatures are one way to ensure data integrity. I think this is one of those overlooked cases where bandwidth isn't usually scarce but can improve service greatly during times of congestion. Data downloads multiplied by millions of households, then this quicky becomes a major data & $$ saver:

"How Microsoft uses Delivery Optimization

At Microsoft, to help ensure that ongoing deployments weren't affecting our network and taking away bandwidth for other services, Microsoft IT used a couple of different bandwidth management strategies. Delivery Optimization, peer-to-peer caching enabled through Group Policy, was piloted and then deployed to all managed devices using Group Policy. Based on recommendations from the Delivery Optimization team, we used the "group" configuration to limit sharing of content to only the devices that are members of the same Active Directory domain. The content is cached for 24 hours. More than 76 percent of content came from peer devices versus the Internet."

Needless, to say, but caching content for slightly longer periods - say 3-7 days in a network where multiple users access the web on similar generation Chromebooks or laptops can probably help increase that peering percentage if they are most likely downloading the same Chrome or Firefox update. This feature would significantly improve congestion in edge cases. I have been thinking of developing a custom spin of Synaptic Package Manager, or one with Software Manager in Ubuntu that does something very similar to this Group Policy in Windows Delivery Optimization. Maybe there is an Enterprise distro that already does this, but I'd like to see it on a community edition, like Rocky Linux. And sure enough, here's what I found:

https://share.google/aimode/FiFKZ5LZAZRI4Cr6h

For Rocky Linux, "delivery optimization" typically refers to saving bandwidth and accelerating package/update distributions across your local network. The most efficient strategy is hosting an in-house DNF repository mirror and utilizing peer-to-peer (P2P) network tools to prevent redundant downloads from external mirrors. [1, 2, 3, 4, 5]
1. Host a Local Mirror
Creating a local mirror (via the official Rocky Linux Mirror tool) downloads packages once, allowing all local servers to pull updates from your LAN instead of the internet. [1, 2]
  • Setup: Use rsync or the reposync utility to sync BaseOS, AppStream, and EPEL repositories directly to a local web server (e.g., Nginx).
  • Client Configuration: Update your client servers' repository files (located in /etc/yum.repos.d/) to point the baseurl to your local mirror instead of $releasever.
  • Reference Guide: View the full setup workflow on the Setup Local Rocky Repositories Guide. [1, 2, 3, 4, 5]
2. Implement Peer-to-Peer (P2P) Synchronization
If setting up a full repository server is too heavy for your needs, you can set up a local P2P sync to share newly downloaded files and folders directly across your nodes.
  • Tooling: Deploy Syncthing, a continuous file synchronization program available via the EPEL repository.
  • How it works: When one server pulls a large package or ISO, Syncthing immediately shares and replicates that file locally to other nodes on your network, saturating your LAN's bandwidth and bypassing external bottlenecks. [1, 2, 3]
3. Network & Kernel Tuning
If your Rocky Linux servers suffer from packet drops or high latency during heavy network deliveries, the kernel might not be distributing interrupts optimally. [1]
  • IRQ Balancing: Ensure the irqbalance service is active and properly configured to distribute network interface card (NIC) interrupts evenly across all CPU cores.
  • Tuning Guide: Diagnose and resolve drops using the Network IRQ Tuning Documentation. [1]

After restarting my Chrome browser multiple times and deleting the App data, a portable install attempt of the Chromesetup.exe failed and I was about to post this article when, miraculously, the first 50% update status appeared on the PC I began updating this morning with Chrome at 10:50am. It appears that Chrome might have progressed a bit further after a couple restarts, potentially integrating some of the updates it picked up along the way. I was going to wait until the next day to retry the update during a faster connection plan, but I might have gotten lucky. Edit: the installation finally completed this morning (7/2 (the post draft began 7/1)). It required downloading the most recent ChromeSetup.exe stub (12MB), after uninstalling my Chrome and deleting %localappdata% from both the User folder and the Program Files Google Chrome folder. (Option 1). Using old Installer stubs will initialize an install but then break/or fail after 2/3rds of the download, wasting data and time. 

Edit: I could have titled this "Using a Mobile Hotspot as a Router," but I thought it might be a bit vague to the specific optimization I was seeking. That said, there may be reasons to use a hotspot as a router, and reasons not to. Some Delivery Optimization features might not be transferrable between PCs even if if a router was available, hence the title of this post.

Also, three interesting videos on Rsync: 

https://www.youtube.com/watch?v=QKCIi-NxJEo

https://www.youtube.com/watch?v=FLCfRs6nKW8

https://www.youtube.com/watch?v=VyF_omIjnr4

Update 2:

My phone is able to recognize the Steam client:


Edit 3: I realized that the Windows Delivery Optimization applies to apps from the Windows Store, in addition to the System updates. If I wanted to use the Windows store to download Firefox, I suppose it would also push updates to other Windows PCs on my network (that are also using Windows Store). I typically install software from the website, rather than the Windows Store. But since Ubuntu offers software in a store, I suppose they could also integrate this technique. It's now called "App Center" for Debian and Snap files: https://snapcraft.io/install/snap-store/ubuntu (and of course the trusty sudo apt-get)

You could also use AppGrid for KDE: https://www.reddit.com/r/kde/comments/1rw9noz/appgrid_16_a_modern_application_launcher_for_kde/

Tuesday, June 23, 2026

Testing a Galileo Board in 2026, Part 2 of X

This is less a Part 2 than an interregnum on a walkthrough plan for booting an OS on my 2014-era 1st gen Galileo board that I purchased earlier this year. While it's a lot more productive to write code or actually get the board to boot, talking about what I'm doing might actually interest people who are late bloomers to this hobby (for lack of a better word).

I am hoping it doesn't take me all summer, but if it does, it will be a Summer of Code.

In the past few days, I have discovered some other hobbyists testing the Galileo board as recently as 2024 and 2025 (and likely 2026 too), who encountered some issues with SSHing into their system, both via the USB to Serial adapter, and via a LAN connection. There are various reasons why this might be, and since I am running an update on Rocky Linux 9.5, I have not included links to save bandwidth on a limited connection.

But the gist of the issue is that SSHing into the Galileo board may return a "connection refused" error. There can be multiple reasons for this. One is that SSH isn't installed on that particular image or it's not enabled. First, the minimal linux image isn't quite sufficient to run a more featured OS. Thus the first objective is to properly flash a working distro. I have found several, including a Debian 3.8 distro, which appears most promising, although some of its spinners have encountered issues with it, even returning to the original Yocto blend. This is a classic example of "the more you know," the more capable a hacker one can be. I am quite annoyed at myself because I remember thinking back to when I was 16, and seemed to be more creative with finding fixes to a PC than I do now. But that's not all. What I've started to think about is how different the Galileo/Edison boards are from the Raspberry Pi, and the things I like and don't like about both of them.

 While both the Pi and The Galileo have a bootloader, it is not readily accessible without a microSD card. This differentiates them from a x86 motherboard where a firmware is installed regardless if an OS is installed or not. It's a convenient recovery method when trying to set the right mode for a hard drive (e.g. AHCI or legacy IDE), or enabling the first drive to boot (such as USB before drive C: or D:). I often prefer to dual boot on separate drives, rather than separate partitions, in case there is some aggressive OS that likes to overtake the boot process (it seems Windows always tries to place itself first on an autoboot once a drive is selected first). I have installed CoreBoot on a Chromebook, which I find quite satisfactory (although sometimes it lags, possibly due to a slow SSD on board).

Since the Raspberry Pi is marketed as an educational board, it might make sense that it features a helpful coprocessor to facilitate booting. While I didn't bother to buy a Raspberry Pi until 2020 (I had long known about it since 2011, and even met Upton in NYC at the Queens Maker Faire), I didn't even know until 2023 or 2024 that it had a not-so-secret (or no longer secret) VideoCore IV processor that begins the boot process: https://news.ycombinator.com/item?id=12743235

From Fuzix developer David Givens:

"The Raspberry Pi is really a VideoCore IV processor with an ARM bolted on the side. At power on, a boot ROM loads an embedded OS image into the VC4 processor. That then sets up the hardware, powers up the ARM, and loads the OS image into that. The VC4 then continues running in the background servicing RPCs from the ARM.

What this is is a replacement VC4 operating system image which just fires up the ARM with an embedded image, sets it running, and then halts (assuming I'm understanding the docs correctly); so it can't (yet) actually load an OS into the ARM from disk or respond to RPCs etc.

In practical terms, this is the biggest, most difficult step forward towards running an almost completely open system on the RPi. (It could also be used as the core of a proper operating system running on the VC4 itself, which could be rather interesting.)"

Reading up on the history of why this was developed, I can see the practical reasons for it (in reverse order) :



I've written some bare-metal stuff on the Pi (somewhere I've got a 90% finished port of Fuzix for it), and oh god yes, that's so true. Being able to do complex stuff like set up a framebuffer by making a simple RPC call to the VC4, passing in a pointer and a descriptor block saying 'this big, please', is so much better than having to do it yourself.

But this firmware doesn't contain code to initialise the GPU, it does contain initialisation code for one rather important peripheral, which is the DRAM. The VC4 has been pretty well reverse engineered for a while (I did one of the early C compiler ports for it), but the big missing piece was figuring out how to initialise the RAM. Without that, everything had to fit in the 128kB of built-in SRAM.

This firmware's a huge step forward.



In practical terms, this seems to be quite a long way from running a completely open system - the VC4 is responsible for initializing a whole bunch of critical and I believe undocumented hardware that's required to enable any of the peripherals, and this doesn't. Basically, a whole bunch of stuff that'd be implemented by drivers on (say) most Allwinner SoCs I've looked at instead relies on the blob. This is probably part of the reason the Raspberry Pi has relatively good mainline kernel support - they don't have to deal with months of LKML hell to get basic things like clocking and power management working every time they release a new chip because that's all handled in the blob.

Testing BitBake on Yocto 6.0.1 (Wrynose) LTS

Last fall, I tested my first Yocto (5.0) linux builds on a couple machines from last decade: a 2011 Lenovo ThinkPad Edge 420 with an i3 2350...