The below list of tasks for Linux kernel is in completely arbitrary order by complexness, tree wideness, etc.
- GCC warning: dubious: x | !y:
git grep -n ' | !' - Check for possibility to use %*ph:
git grep -n -i '%02x[ :-]%02x[ :-]%02x' - Any of custom code that implements already provided extensions that are described in printk-formats.rst
- driver_override_store() unification (manipulation with strings)
- Run
codespellacross drivers and subsystems - Fix ioremap(..., 0) [size = 0] across architectures, now some return NULL, some return address, some may even have leaks
- Common helper to search for magic inside BIOS region:
git grep -n -i ' = .*0xf0000[^0-9a-f]' - Handling "(null)" (string!) inside the kernel, no generic for it is present as of today:
git grep -n '"(null)"' - Avoid include kernel.h in the other headers and in some cases *.c files:
git grep -n -w '#include <linux/kernel.h>' - Unify vdso2c.[ch] for at least x86 and sparc under scripts/vdso/
- Fix the driver ->probe() when DEBUG_SHIRQ is enabled
- We have string_choices.h and the respective coccinelle scripts.
Extension to print "Enable/Disable", "On/Off", "Yes/No", etc. Perhaps 2D array of capitalized words and then %pY/%py with a modifier, one of 'YyNnOoEeDd' (Nn and Dd basically aliases to Yy and Ee respectively), for example, %pyy: 'yes', %pYy: 'Yes', %pYY: 'YES' and so on. Also needs a common type (bool, int, unsigned int?) to pass as a pointer to. The counterpart is kstrtobool(). Do we need '01' to be added? Also %pY/%py just to print 'Y' or 'N' as can be used in sysfs.git grep -n -w '%sable',git grep -n -i '%s.*yes.*no, etc. - for_each_pci_vga() macro implementation and use:
git grep -n -C3 PCI_CLASS_DISPLAY_VGA(also see discussion https://www.spinics.net/lists/platform-driver-x86/msg22659.html) - Ideally headers in platform_data (include/linux/platform_data/*.h) must not include functionality stuff like kernel.h (also see 9. above), ioport.h (timer-ixp4xx.h) or alike
- Get rid of legacy platform data. In many cases platform data may be replaced by the corresponding software nodes or lookup tables (GPIO, regulator, PWM, etc) and software nodes. Look for candidates by analyzing contents of include/linux/platform_data/*.h. The example is in
git log -- drivers/mfd/intel_quark_i2c_gpio.c. - Replace custom implementations of sort() / sort_r(). Can be partially found with help of
git grep -n -w swap. - Convert struct dw_dma_platform_data to software node and update all users.
- Do not shadow errors from kstrtox() calls:
git grep -n 'if (kstrto'
First of all, before starting the job, do evaluation on the following topics (use score 0 -- I have never ever knowledge in the area, 10 -- I'm an expert!)
- C language
- make, shell
- Git Version Control System (from the user perspective)
- Linux kernel building / configuring
- Linux kernel internals in general (like knowing what subsystems are, how they are related to each other, etc)
- contributing to or participating in open source projects (which ones?)
Helpful links to learn about above topics:
- http://opensourceforu.com/2012/06/gnu-make-in-detail-for-beginners/
- https://git-scm.com/book/en/v2
- https://kernelnewbies.org/KernelBuild
Second, choose the area you would prefer to begin with (Nobody can cover the entire kernel, so better to focus on a few topics)
For example, I can help with the following topics:
- generic library functions (lib/ in kernel source tree has a lot of examples)
- generic architectural code (which architecture? x86?)
- enabling drivers for ACPI based platforms
- drivers for GPIO, pin control, SPI, I2C, DMA, PWM devices and so on
- sensor support (drivers for IIO)
Most of the mentioned stuff might require hardware at hand, so it would be nice if you can test on the real devices the modified code.