ECE434 Project -Polar Codes
Embedded Linux Class by Mark A. Yoder
Team members: Matthew Callahan
I'm using the following template to grade. Each slot is 10 points. 0 = Missing, 5=OK, 10=Wow!
09 Executive Summary 09 Packaging 09 Installation Instructions 09 User Instructions 09 Highlights 09 Theory of Operation 09 Work Breakdown 09 Future Work/Conclusions 09 Hackster.io 09 Demo/Poster 00 Not Late Score: 90/100
The project idea is to use kernel modules to encode signals and then send them out with another linux driver, in this case the UART devices. The project origonally intended to implement Polar codes as the encoding scheme, but due to time constraints was limited to repeat codes.
The UART devices work well and handle normal file I/O without the communicating software needing to handle any of the communication details. The kernel modules work the same way, it is possible to use echo to write to the character device and cat to read from it. To do this, I needed to follow the instructions in the comments of Derek Moloy's post http://derekmolloy.ie/writing-a-linux-kernel-module-part-2-a-character-device/.
I origonally intended to have the kernel modules interface with the UART directly, but that is not possible because the UART devices only accept commands from User space, so the kernel module needs to send its data into user space, which is frowned upon. Instead, the kernel modules accept a message when they are written to and return the processed message (encoded for the encoding module and decoded for the decoded module) when they are read from. I did not get to making the kernel modules thread-safe so being written to from many programs at once is not supported.
I used http://beaglebone.cameon.net/home/serial-ports-uart for the wiring guidelines, https://unix.stackexchange.com/questions/117037/how-to-send-data-to-a-serial-port-and-see-any-answer for guidelines on setting up the UART devices, and Derek Molloy's exploring beaglebone chapter 16 for the kernel modules.
This project was a good learning tool to understand how an embedded system can benefit from the linux operating system utilities to make using it easier.
Since this is mostly a project about exploring what linux can do, and the hardware required for the project is two wire, I figured a bare board was sufficient.
Give step by step instructions on how to install your project.
- Include your github path as a link like this to the read-only git site: https://github.com/MarkAYoder/gitLearn.
- Be sure your README.md is includes an up-to-date and clear description of your project so that someone who comes across you git repository can quickly learn what you did and how they can reproduce it.
- Include a Makefile for your code if using C.
- Include any additional packages installed via apt. Include install.sh and setup.sh files.
- Include kernel mods.
- If there is extra hardware needed, include links to where it can be obtained.
Once the modules are enabled, if the gpio lines are tied together then writing to the first file should then allow you to read back the same data from the other file.
Here is where you brag about what your project can do.
Include a YouTube demo the audio description.
Theory of Operation
Give a high level overview of the structure of your software. Are you using GStreamer? Show a diagram of the pipeline. Are you running multiple tasks? Show what they do and how they interact.
I first had to figure out how to send data out of the board without having to write my own syncronizing method. I therefore spent a while figuring out how to configure the UART devices. I then wrote the kernel modules.
This project could be made more interesting and useful by encoding with a polar code scheme. Additionally, the cabling could be expanded to communicate between two beagles and some software could be written to generate interesting data, like video or a text chat client, that could then be easily configured to use whatever coding scheme is most appropriate.
Embedded Linux Class by Mark A. Yoder