The future Ampere System-on-a-chip that is the basis for my work has a couple of processors that are for providing system wide services, not for end users to run things on directly. One of these is called the Management Processor, or Mpro. We have to talk to one of these services from the operating system using the Management Control Transport Protocol, or MCTP, over a Platform Communication Channel (PCC).
I just sent ran a user-land program that sends a message via a socket into the operating system, via PCC, to the MPro, and got a response back.
It took a while for it to sink in. And then I raised my hands in the air and proclaimed in my Best Dr. Frankenstein voice,
There were so many lessons I had to learn to get this this point. Here are a short list:
- How to implement a Linux Kernel network device driver
- How to register with the Linux Kernel to get an Advanced Configuration and Power Interface (ACPI) based device from data in the Differentiated System Description Table (DSDT).
- How to convert physical memory offsets to virtual
- How to read and write data from device memory
- How to lookup data in the ACPI tables (a work around for a mechanism not yet written)
- How to work with our firmware team to get their view of the debug data
- How to build a firmware image and deploy it to one of our lab machines
- How to build and run a unit test against mock objects inside the Linux Kernel
- How to read and implement the MCTP and related level protocol specs.
I work with really smart people. I would probably have been able to do this all myself…in another 15 years. The amount of time saved by working with the members of my team is probably longer than the life of the product I am working on.
Someone once said, “If you are the smartest person in the room, you are probably in the wrong room.” I suspect that I am absolutely in the right room for me.
The code is by no means done. In some ways, you might say that the real work begins now: getting it production ready, However I have always used the principal of “build from success” when working in software. First get something working, then make incremental improvements while keeping it working. This is my first real success and it feels good.