Skip to content

preespp/Embedded-Systems-Lab-HW

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Embedded Systems Lab & HW

Lab

Lab 1: Custom Embedded Linux Distribution

  • Compiled a custom Linux kernel and created a root filesystem using BusyBox
  • Configured kernel modules using menuconfig and cross-compiled the image for deployment via QEMU emulator.
  • Learned fundamentals of embedded bootloaders, kernel images (zImage/uImage), ext4 file systems, and Linux startup sequence.
  • Built a bootable SD card image using shell scripts and partitioning tools, and validated the image with QEMU emulator.

Lab 2: Linux Kernel Module and Timer System

  • Developed and tested custom Linux kernel modules for ARM architecture on a BeagleBone Linux image.
  • Implemented a kernel timer that prints user-specified messages after configurable delays.
  • Wrote a user-space C program (ktimer) to interact with the kernel module via a character device driver.
  • Kernel development practices: Makefiles, module loading (insmod, rmmod), /dev files, and timers.

Lab 3: Asynchronous Event-Driven Kernel Module with /proc Interface

  • Extended the timer kernel module to support asynchronous I/O notifications using fasync and SIGIO signals.
  • Enabled real-time signaling from kernelspace to userspace when a timer expires.
  • Created a custom /proc/mytimer file using the Linux procfs API to expose module state, including PID and command info.
  • Improved robustness by synchronizing kernel and user state and handling edge cases in concurrent timer access.

Lab 4: Real-Time GPIO Control on BeagleBone Black

  • Developed a kernel-space driver to control a model traffic light system using GPIO pins on real hardware.
  • Mapped physical GPIO pins to logical identifiers, set up input/output configurations, and implemented interrupt-based input handling for pushbuttons.
  • Worked with low-level GPIO APIs (gpio_to_desc, gpiod_get, gpiod_set_value) inside the kernel.
  • Assembled hardware using breadboards, resistors, LEDs, and switches; flashed SD card with custom-built system image; tested system end-to-end using serial and SSH debugging.

Homework

Homework 1: C program to process a list of 32-bit little-endian integers, converting to big-endian, encrypting them using a 4-letter XOR cipher, and formatting output to include decimal, hexadecimal, and ASCII representation.

  • Implemented the solution modularly across main.c, bits.c, and bits.h, and managed compilation dependencies with a custom Makefile.
  • Designed and implemented a linked list structure to sort data based on encrypted ASCII values before output.
  • Practiced modular programming, endian manipulation, ASCII transformations, and bitwise logic.

Homework 2: Custom 8-bit Instruction Set Simulator in C to emulate a basic 8-bit processor with 6 registers and 256B local memory.

  • Supported key operations in Assembly (e.g., MOV, ADD, LD, ST, CMP, JE, JMP) and implemented instruction counting, cycle calculation, cache simulation, and local memory hit tracking.
  • Designed a simplified memory hierarchy, where local memory cached external memory accesses with differing cycle penalties.
  • Ensured robust parsing and error handling of disassembled assembly input files and implemented execution statistics output.

Homework 3: Performance Optimization on Embedded Benchmark

  • Profiled and optimized the qsort_large benchmark from the MiBench embedded suite using gprof on both Linux machines and the BeagleBone Black.
  • Performed compiler-level optimization and source-code level optimization.
  • Analyzed execution times before and after optimization on both x86 and ARM targets (BeagleBone).

About

Embedded Systems Development on Linux

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published