Hi to the community.
I'm and old hardware engineer and have been designing boards since the days of the 8086. The last couple of years I have been involved with the hardware design of embedded systems boards such as those using Broadcom SOC's but I've not been directly involved with the firmware other than loading reference code and toolchains and doing very simple drivers.
I have been doing my research in choosing an embedded system for WiFi projects. First, I was looking at the Arduino Yun, because of the built in WiFi. What I found, and hopefully the members of this community can correct me if I am wrong, is that the Arduino is designed for you to load the operating system, which is based upon OpenWrt and not really to mess with it. Just write programs that run on the compiled kernel. Not being satisfied with that, I downloaded the source OpenWrt variant that is suggested at the Arduino Wiki and began the arduous task of compiling it, so as to begin to learn its workings. Now, I was somewhat familiar with OpenWrt as I have downloaded and compiled it and loaded it onto my router. But, it must be 2 million lines of code and getting around in it is a real bear. Compiling the Arduino version of OpenWrt took forever (8 hours and lots of downloads) and I was restricted to having to do it on a 32 bit native (not virtual) distribution of Debian. Of course, like the OpenWrt that runs on my router, it is very large and one can change it as ones own risk. Even the WiFi drivers have no source code as they are derived from a reverse engineered Broadcom WiFi driver called b34.
So, other than running OpenWrt with the stock binaries and using that to compile programs on the Arduino, I can't see how one can learn much about how the hardware interfaces with the software. Finally, the software reference manual for the Broadcom router that I have, a very vanilla RTN-16 (the BCM47xx family) is so proprietary that I could never find it (I'm not talking about the 3 page pinout but the reference manual itself). In fact, I never was able to locate the software reference manual of any of the major vendors of routers running OpenWrt that I could find (and that was a lot of them).
If what I have said about the Arduino is incorrect then please set me in the right direction. Really. I am here to learn.
In contrast, the Raspberry Pi has lots of information available concerning running it as "bare metal" even without an operating system. For example at https://github.com/dwelch67/raspberrypi there is a wealth of information concerning running the hardware in assembly, toggling LED's, doing simple displays, etc. In addition, there is "ass tons" (my son in laws expression) of information available about how to construct an operating system for the Raspberry Pi, as small or as large as one could desire. The only drawback that I see is that there is no native WiFi for the Raspberry Pi so one is tasked with finding a suitable WiFi dongle and loading drivers. Not a difficult task.
It seems to me that if one wants to learn firmware programming from the bare metal, up, then the Raspberry Pi seems to me to be the one to use.
Comments? I am really not a troll and if I offend anyone that uses the Arduino, by the remarks that I made above, I humbly apologize. In fact, I have purchased neither board yet. Doing proper research first.
Thank You
Tom