<?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>DEV Community: Shreyash</title>
    <description>The latest articles on DEV Community by Shreyash (@shreywritesblogs).</description>
    <link>https://dev.to/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>DEV Community: Shreyash</title>
      <link>https://dev.to/shreywritesblogs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shreywritesblogs"/>
    <language>en</language>
    <item>
      <title>Introduction to Linux Kernel</title>
      <dc:creator>Shreyash</dc:creator>
      <pubDate>Thu, 23 Apr 2026 07:37:44 +0000</pubDate>
      <link>https://dev.to/shreywritesblogs/introduction-to-linux-kernel-6ob</link>
      <guid>https://dev.to/shreywritesblogs/introduction-to-linux-kernel-6ob</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;I always wanted to understand what really happens between the hardware and the software we use every day. We often talk about Linux as an operating system, but the real brain behind it is the Kernel.&lt;/p&gt;

&lt;p&gt;Let me tell you — the Linux kernel is one of the most important pieces of software ever built. It is the core layer that manages hardware, memory, processes, and communication between different parts of the system. Without it, your applications would have no way to talk to the machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Linux Kernel?
&lt;/h2&gt;

&lt;p&gt;The Linux kernel is the central part of the Linux operating system. It sits between user applications and the hardware.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Applications ask for services&lt;/li&gt;
&lt;li&gt;The kernel handles the request&lt;/li&gt;
&lt;li&gt;Hardware performs the action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the kernel a kind of bridge, or control layer, between software and physical devices.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the Kernel Matters
&lt;/h3&gt;

&lt;p&gt;We often take computing for granted. We open a browser, play music, connect to Wi-Fi, or read a file, and everything just works. But behind all of that, the kernel is doing silent work every second.&lt;/p&gt;

&lt;p&gt;It manages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processes — deciding what runs and when&lt;/li&gt;
&lt;li&gt;Memory — allocating RAM safely&lt;/li&gt;
&lt;li&gt;Devices — controlling drivers for keyboard, disk, network, and more&lt;/li&gt;
&lt;li&gt;File systems — handling data storage and access&lt;/li&gt;
&lt;li&gt;Security — making sure programs cannot freely access everything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why the kernel is not just important; it is essential.&lt;/p&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%2F8g4fhfl5d3d9qb7hzms2.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%2F8g4fhfl5d3d9qb7hzms2.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kernel and Its Similarity to Firmware
&lt;/h2&gt;

&lt;p&gt;A kernel is often similar to firmware in one important way: both sit close to the hardware and act as a control layer.&lt;/p&gt;

&lt;p&gt;Firmware usually runs very close to the device and directly manages hardware behavior. The kernel does something similar, but on a larger and more flexible scale.&lt;/p&gt;

&lt;p&gt;Both are responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardware interaction&lt;/li&gt;
&lt;li&gt;Low-level control&lt;/li&gt;
&lt;li&gt;System initialization&lt;/li&gt;
&lt;li&gt;Stable communication with peripherals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference is that firmware is usually tied to a specific device or controller, while the Linux kernel supports a much broader and more complex computing environment.&lt;/p&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%2Fjwovowqcryqs0hlxm4wi.jpg" 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%2Fjwovowqcryqs0hlxm4wi.jpg" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes the Linux Kernel Special?
&lt;/h2&gt;

&lt;p&gt;The Linux kernel is special because it is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open source&lt;/li&gt;
&lt;li&gt;Highly scalable&lt;/li&gt;
&lt;li&gt;Widely used&lt;/li&gt;
&lt;li&gt;Modular&lt;/li&gt;
&lt;li&gt;Adaptable to many devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It runs on everything from tiny embedded boards to servers and supercomputers. That flexibility is one reason it became so powerful in the first place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;The Linux kernel is the heart of the system. It is invisible most of the time, but it is always there, quietly making everything work.&lt;/p&gt;

&lt;p&gt;I often think of it as the layer that gives structure to chaos. It connects hardware and software in a clean, controlled way. And that is exactly why learning about it is so valuable.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>kernel</category>
      <category>firmware</category>
    </item>
    <item>
      <title>Introduction to Embedded Linux</title>
      <dc:creator>Shreyash</dc:creator>
      <pubDate>Tue, 07 Apr 2026 11:56:34 +0000</pubDate>
      <link>https://dev.to/shreywritesblogs/introduction-to-embedded-linux-3nnh</link>
      <guid>https://dev.to/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://dev.to/shreywritesblogs/switching-from-full-stack-development-to-embedded-firmware-2k2j</link>
      <guid>https://dev.to/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>
