I'm just new to the world of Raspberry. Since I'm a Windows user with very little knowledge about Linux etc., I'm struggling with figuring out what the proper environment for my goals is.
First, a few words about myself: I'm a hardware developer located in germany, specialized in microcontroller circuits, where I also write small test software in C for board bring up and smaller end applications. This is also one of my hobbies, so I'd say I've medium experience on developing software for microcontrollers. Recently I got a Pi 3B+, and I find it quite interesting. So, I decided to dig deeper into it.
Since I'm primarily a hardware guy, my "roadmap" is hardware centric and as follows (please excuse if I'm using Linux specific keywords in the wrong context, I'm just at the beginning of a journey):
- small command line apps in user code for controlling GPIOs, I2C, SPI, etc.
- writing own device drivers, for the interfaces like I2C, SPI, etc. itself as well as for attached devices like EEPROM, GPIO expander, etc. (keyword kernel module?), including attaching the devices to the device tree
- writing GUI applications which can use the device drivers
- making my own small HAT
- building a kernel myself (building a device driver into the kernel rather than using modules)
My first intention was to look for an environment for Windows, but from my investigations so far the main recommendation is to use a Linux environment (for which it looks like there are many more options than for Windows, especially when considering the above roadmap).
It seems that there are two main positions: develop either on a Linux PC or directly on the PI. Since one of the end goals is to also build the kernel itself, I think using a Linux PC is the right way.
So, currently I've two main tasks:
- choosing and setting up the right Linux distribution
- getting an appropriate development toolchain
For the second point, I know that there can't be the one and only answer - some people prefer to edit the sourcecode in a simple text editor, create the makefiles themself and doing magic on the bash CLI like hell, others prefer to use an IDE including editor, automatically created makefiles etc. From my experience with microcontrollers, I'd prefer the IDE approach - usually microcontroller vendors provide their own IDEs (some of them based on Eclipse), which aid in configuring the devices and take care of all the linker stuff etc - typically only finetuning is neccessary for memory layout & optimizations etc.
This point also includes the question about neccessary hardware equipment to develop on a PI: is there anything special needed (or additionally recommended) for hardware stuff? For microcontrollers running simple C software (keyword bare-metal?) without OS, usually there's a JTAG/SWD debug probe connected for single stepping, viewing variables, etc. I've seen that there are some PI developments using a JTAG probe. When would this probe be needed?
I'd be glad if someone could help me getting started to start