<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Shreyash</title>
    <description>The latest articles on Forem by Shreyash (@shreywritesblogs).</description>
    <link>https://forem.com/shreywritesblogs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3819872%2F24bc0967-2d24-43e3-bf8a-f189ddeb81b2.jpg</url>
      <title>Forem: Shreyash</title>
      <link>https://forem.com/shreywritesblogs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shreywritesblogs"/>
    <language>en</language>
    <item>
      <title>Introduction to Embedded Linux</title>
      <dc:creator>Shreyash</dc:creator>
      <pubDate>Tue, 07 Apr 2026 11:56:34 +0000</pubDate>
      <link>https://forem.com/shreywritesblogs/introduction-to-embedded-linux-3nnh</link>
      <guid>https://forem.com/shreywritesblogs/introduction-to-embedded-linux-3nnh</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;Most developers are familiar with software that runs on laptops, servers, browsers, or mobile phones. But there is another world where software does not run in isolation. It runs on devices that interact with the physical world — routers, gateways, industrial controllers, cameras, infotainment systems, and many other smart devices.&lt;/p&gt;

&lt;p&gt;That world is where embedded Linux comes in.&lt;/p&gt;

&lt;p&gt;At first glance, it may look like “just Linux,” but embedded Linux is really about using the Linux ecosystem to run software on resource-constrained devices that have a specific purpose. It sits between pure firmware and general-purpose computing, which makes it one of the most interesting areas in embedded development.&lt;/p&gt;

&lt;p&gt;This article is a simple introduction to what embedded Linux is, why it is used, and what a beginner should understand before diving deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Embedded Linux?
&lt;/h2&gt;

&lt;p&gt;Embedded Linux is a Linux-based operating system designed to run on embedded hardware.&lt;/p&gt;

&lt;p&gt;Unlike desktop Linux, which is made for general-purpose computers, embedded Linux is usually customized for a specific device. That means it may include only the components needed for that product and nothing extra.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The hardware is built for a specific job&lt;/li&gt;
&lt;li&gt;The Linux system is trimmed and configured for that job&lt;/li&gt;
&lt;li&gt;The application runs on top of it and controls the device&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This makes embedded Linux very powerful for devices that need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Networking&lt;/li&gt;
&lt;li&gt;Multitasking&lt;/li&gt;
&lt;li&gt;File systems&lt;/li&gt;
&lt;li&gt;Driver support&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Embedded Linux Differs from Firmware
&lt;/h2&gt;

&lt;p&gt;This is one of the most important things to understand.&lt;/p&gt;

&lt;p&gt;In firmware development, you often work very close to the microcontroller. You control peripherals directly, and the software usually runs as one main program.&lt;br&gt;
In embedded Linux, the system is layered.&lt;/p&gt;

&lt;p&gt;A typical stack looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootloader: Starts the hardware and loads the kernel&lt;/li&gt;
&lt;li&gt;Linux kernel: Manages hardware, memory, processes, and drivers&lt;/li&gt;
&lt;li&gt;Root filesystem: Contains system libraries and user programs&lt;/li&gt;
&lt;li&gt;User-space programs: Actual software logic of the product&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1o02t60626k8glgt7i16.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1o02t60626k8glgt7i16.png" alt=" " width="800" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  This layered structure makes embedded Linux more complex than bare-metal firmware, but also much more capable.
&lt;/h4&gt;

&lt;h2&gt;
  
  
  Cross-Compilation: A Key Concept
&lt;/h2&gt;

&lt;p&gt;One of the first surprises for developers entering embedded Linux is that you usually do not compile directly on the target board.&lt;/p&gt;

&lt;p&gt;Instead, you often use cross-compilation.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your development machine builds the software&lt;/li&gt;
&lt;li&gt;The output binary is meant for a different CPU architecture&lt;/li&gt;
&lt;li&gt;The target board runs the compiled result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is common because embedded boards may use ARM, MIPS, RISC-V, or other architectures.&lt;/p&gt;

&lt;p&gt;Cross-compilation is one of the first practical hurdles, but once you understand it, the workflow becomes much smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Embedded Linux is not just “Linux on a small board.” It is a complete ecosystem for building real products that need hardware control, networking, and application logic in one system.&lt;/p&gt;

&lt;p&gt;The learning curve can feel steep at first because it combines so many topics at once. But once the pieces start making sense — bootloader, kernel, device tree, root filesystem, and user-space applications — the entire system becomes much easier to understand.&lt;/p&gt;

&lt;p&gt;If you are coming from firmware or full-stack development, embedded Linux is a great next step because it teaches you how operating systems and hardware work together in real products.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It is one of the best places to learn how software meets hardware in the real world.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
    </item>
    <item>
      <title>Switching from Full-Stack Development to Embedded Firmware.</title>
      <dc:creator>Shreyash</dc:creator>
      <pubDate>Thu, 12 Mar 2026 11:41:26 +0000</pubDate>
      <link>https://forem.com/shreywritesblogs/switching-from-full-stack-development-to-embedded-firmware-2k2j</link>
      <guid>https://forem.com/shreywritesblogs/switching-from-full-stack-development-to-embedded-firmware-2k2j</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;Most developers start their careers building software that runs on servers, browsers, or mobile devices. I started there too. My early work involved typical full-stack development — APIs, databases, backend services, and frontend applications.&lt;/p&gt;

&lt;p&gt;But over time I became curious about something deeper :&lt;br&gt;
The layer between a software and hardware, something that binds software to hardware for devices used in real time systems.&lt;/p&gt;

&lt;p&gt;Almost two years later, I now work primarily on embedded firmware. This transition completely changed how I think about software engineering, debugging, and system design.&lt;/p&gt;

&lt;p&gt;This article is not about one specific project. Instead, it's about the mindset shift required when moving from web software to firmware development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Moved from Full-Stack to Firmware ?
&lt;/h2&gt;

&lt;p&gt;Full-stack development is powerful. You can ship features quickly, deploy globally, and iterate rapidly.&lt;/p&gt;

&lt;p&gt;But embedded systems offer a different kind of challenge:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You interact directly with hardware peripherals&lt;/li&gt;
&lt;li&gt;Debugging often happens without logs or stack traces.&lt;/li&gt;
&lt;li&gt;Every byte and millisecond matters.&lt;/li&gt;
&lt;li&gt;Problems often span hardware + firmware + communication protocols.
That complexity is what pulled me in.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Working closer to hardware forces you to understand systems from the ground up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning to Read Datasheets Efficiently
&lt;/h2&gt;

&lt;p&gt;One of the most important firmware skills is extracting the right information from a datasheet quickly.&lt;br&gt;
Datasheets can be hundreds of pages long. Reading them linearly rarely works.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find the system overview first and understand the architecture:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;communication interface (UART, I2C, SPI, CAN)&lt;/li&gt;
&lt;li&gt;data format&lt;/li&gt;
&lt;li&gt;initialization sequence&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Identify the register map or command structure&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;registers&lt;/li&gt;
&lt;li&gt;binary commands&lt;/li&gt;
&lt;li&gt;structured packets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you understand the structure, the rest becomes easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging in Firmware for a sensor feels Different
&lt;/h2&gt;

&lt;p&gt;Firmware debugging often looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Send a command to a device&lt;/li&gt;
&lt;li&gt;Capture the raw response&lt;/li&gt;
&lt;li&gt;Decode the bytes manually&lt;/li&gt;
&lt;li&gt;Verify checksum&lt;/li&gt;
&lt;li&gt;Compare with documentation&lt;/li&gt;
&lt;li&gt;Repeat until behavior matches expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes the problem isn't even in your code. It maybe a sensor issue, hardware issue, connector wires issue and anything related to hardware and that's why the debugging process sometimes feel tiring.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you're a software developer curious about embedded systems, I highly recommend exploring this space. The learning curve is steep, but the insights you gain are incredibly valuable.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>firmware</category>
      <category>controllers</category>
    </item>
  </channel>
</rss>
