Feedback on my internship at Free Electrons

I joined Free Electrons February the 1st, 2016 in Toulouse, France for a six months internship as my end-of-studies project in enterprise. It ended August the 5th, 2016 and I've been in holiday since, so now is the time for a little feedback on the last six months.

What's that?

Free Electrons is an engineering company founded in 2004 which offers services for development in Open Source software programs and currently, offers training for the Linux kernel, the Yocto Project and OpenEmbedded, Buildroot or Android. It also offers its expertise in embedded Linux development for companies willing, for example, to use Linux in their products, to upstream drivers in kernel or build a custom Linux system.

Since its creation, Free Electrons is doing its best to contribute to the Free Software community. It does so by releasing all its training materials under free documentation license. The company also strongly encourages clients to share our combined work with the community and thus has a preference for clients willing to interact with and give back to the free software community by sparing some of project’s time on upstreaming modifications to free software programs.

Well, there is some more about the company in my report.

Actual work

The subject of my internship is "Linux kernel continuous integration via KernelCI.org" but once the main subject has been dealt with, I could work on other small projects such as Linux kernel driver development or other projects depending on clients' needs.

Linux kernel continuous integration

Since the kernel supports several thousands of different platforms, when a developer writes new code for the kernel, he cannot test his code on all the platforms and usually tests only on the platforms he owns. Before merging its code to the kernel source code, some users or other developers might test it on other platforms or in other configurations but it is rather rare. Furthermore, the only way to guarantee a modification works on all impacted platforms is to build the kernel in all its configurations and test on all these platforms if the kernel boots. This is extremely tedious and time consuming.

The main goal of KernelCI project is to implement a continuous integration in the kernel so build or boot failures are detected before reaching the end users. There already are several labs contributing to the project: several from Linaro and few from KernelCI founders. However, they are often expensive (i.e. the Linaro’s lab uses several 500$ APC PDU systems to control the power of boards) and we did not want to put that much money in a small part of the lab so one of the challenges is to have working, cheap (but not hackish) solutions.

You can follow the whole process of thinking, building and integrating the lab in my report or in the article series I wrote on Free Electrons' blog. At the end of my internship, we had a functional lab integrated in KernelCI which provides boot reports since May, 2016 and can be checked here.

I also developed lavabo to allow Free Electrons' engineers to remotely control boards in the lab.

Miscellaneous development

I added the support of a new board (the Allwinner Parrot R16 EVB) in both U-Boot bootloader and the Linux kernel. See the contributions here: U-Boot support and Linux kernel support.

I also worked (and still work) on the driver for all Allwinner SoCs' ADC which can be used either as an ADC controller, a touchscreen controller or a SoC thermal sensor. I started from an existing driver which exposes the touchscreen and thermal sensor controllers to add the ADC controller as well. The forth version of my patches to upstream the driver is ongoing.

Report

The paragraphs above are only short summaries of what have been done during my internship, for a whole explanation, take the time to read my report. The first chapter are in French as requested by the school but don't worry, the interesting parts are all in English ;)

Also, I share the LaTeX version of it on a GitHub repository so feel free to take whatever you like for your report.

Conclusion

I had really a lot of fun working for Free Electrons though the building & integration of the lab were not as enjoyable as I thought it would be but I LOVED working on drivers, board's support, etc. I'm also really happy to announce I'll be a Free Electrons' engineer for years to come :)