I’ve done numerous programs in C and C++ using Linux over the years including:
- Programs to accept framebuffer data from network cards and route to Graphics cards.
- Programs to accept cellmodem data and route to cloud systems.
- Programs to collect JSON data and parse/interpret (I normally use boost for that purpose).
And I’ve done a lot of work with baremetal and OS-systems including:
- C-callable assembly (usually for performance testing memories on High speed processors).
- Device drivers for an TMS320F2808 project (to use Peripherals and interface to SYS/BIOS).
- C programs to generate test patterns for TMS320C620x processors.
With that I decided to try my hand at Linux Device Driver development. There are of course tradeoffs to doing things in Kernel space vs User space. Generally kernel space allows more and higher priority access to system services like DMA channels. However, user space programs are easier to debug, user space program failures (generally) won’t bring down the system, and any change to the Linux API usually obsoletes kernel drivers but likely won’t obsolete User space programs.
In terms of work experience:
At Detechtion we used Linux for our main embedded hub. I did a lot of work in finding and helping our external kernel developer track down kernel issues.
At Resi I evaluated several SBCs (OrangePi, Jetson Nano) running Linux cores and evaluated some high end processing (GPUS, High Capacity Ethernet etc).
I have not done production device drivers or Kernel modifications in Linux, but I have a great deal of experience developing device drivers for Baremetal systems (i.e. using C or assembly to interface to SPI/USB/peripherals/memory etc on the Processor work I did at TI).
My sample projects to date include:
- Linux Simple Character Driver and then expanded it for the LCD1602 on the Raspberry Pi.
- Linux Kernel Simple Ram Disk is a rework of the linux-kernel-labs.github.io Block Device drivers section for later Linux 5.x and 6.x drivers.
- LinuxKernelGeneralModule
My next projects:
- Linux DMA use.