 O slowly and but it's OK. Thank you for being here today. For a short introduction for myself. I am the CMOS engineering working for Arduino Dallas 2014. These are my main task. In a maintained our embedded distro for our internet boards. I took care of the plain tool chain and cross登 for the platform. tako mips, MinJW, W64 arm in so on, nekaj kernel drive backporting, nekaj skripting, kvesson in dansev, na naš forum in soport, as well. So, I don't know if the word lino rang rings about to you, or you have already heard of it. It's just a combination on two very well-known words, Linux and Arduino. So, we have come up with this kind of band system just to customize it for our bots and it's right on OpenWRT. It is a quite common and very well known and by the distro for at least the limits of the most popular small office, home office routers. It's reportedly are, usually are providing the most common use for the packages and programming languages such as Python, Ruby and many more counting. So, but the approach we thought, we really the approach we thought when we start to design it was more of an ecosystem, which is composed, set of a final open order models to easily make things and operate the software layer to easily put intelligent on things. For sure, unembeded development environment will see that at the end of the talk, the slides, in open cloud basis set of services that make things easily interconnected and of course is made of people, people which willing to give us also the smallest contribution. So, this is the basic approach for our internet bots. So, let's say that is a Linux core called the name Chihuahua and then a generic MCU, it might be an Atomel, an Nordic and STM one, but they are on the board, just two actual separate entities, but they interact each other in a seamless way. And it not depends on a given MCU, like I just said. So, just can you see in detail and view model with Linux OS and system packages, Wi-Fi connectivity able to operate just as an access point or Wi-Fi client. And then, of course, MCU based device. And then how we can just take a first draw of how interaction is done. So, we thought of more straight approach. The approach is our new kernel models and we know framework line in IO, which is able to expose microcontroller features, such GPIO, analog converters, PWM, I-squared CSVI inside the microprocessor environment in a UNIX fashion. So, just consider them just as mappet, just like actual Linux devices. So, for this reason, you can write application for high-level with high-level languages in a very easy way. So, this is just the first scenario. Like I said, separate the MCU and MCU with a physical link. So, you want an MCU just for S&P or large memory or few peripherals or a few feature OS. When you usually have to deal with the MCU, you have to deal with some constraints. So, for instance, single CPU, small memory, many peripherals, and customizer device. And the physical link, you should know it. It's just any possible SVI or ART or either net-wifi link. So, with Linux, IO approach is like the MCU is under the hood of the MPU. So, all the devices are just interconnected and mappet inside the Linux systems. Sorry. So, usually, as I told before, MPU design for the best average performance, cache levels, but in real time, it's difficult. So, but on the contrary, MCU, the approach on MCU is much simpler. No cache and no virtual machine. In real time, it's guaranteed. So, you want to keep a level application in MPU in real time stuff on MCU. And that's the approach that we think about it in a remote way. Able to control many lino-io devices, just discovering it as a local service. And then, again, control it directly by your site through Shell, Python, Node.js, and other high-level programming languages. So, a couple of remarks about lino-io. So, lino-io, MCU driver, devices are regular Linux kernel devices. So, they don't necessarily have to be controlled by user space. And, as well, kernel models of systems can use them, as it should. The most important things is that MCU peripherals become standard Linux devices so that the MPU can tell where you are and how are they implemented. So, you can just think about them just like a sort of mapping. And MCU devices, the one we are dealing with, have interrupt capability. So, you can see, GPR interrupts on edge level from user space or kernel. If you want to go deep with the concepts, you just can click on this sim link and allow the paper of my colleague which has developed all the stack. So, to show you some example about lino-io, just the hello world of the microcontrollers unit. We are able to turn on the service led. The one that is marked on our box at L13, we just a couple of shell commands. We have first to run the nabola lino-io with a simple shell command. It is a script I wrote some time ago. And then, after the reboot of our boards, the presence of this particular for the sys-class GPO, GPO ship send, 100 will tell us that lino-io is up and running as a background service. So, but to fully leverage all the GPOs, all the devices of MCU, we had to export them. So, run again in GPO export to enumerate all the available devices. And now we are ready to play around. So, just as I said, we want to turn on the L13 led. So, before that, just export in direction to out and you have to do this type and you have to do it every time for any given pin. Or you can also consider the interaction for, I don't know, your personal use cases according to your project. So, it's just a matter of echoing one to this particular pin on this case, the 13 to turn on the 13 led. While we use echo zero to revert it to its original state. And so, that's the simple way to run the hello world of microcontroller. You can see the screenshots of our one over board just after echo one and echo zero. Just to turn on and turn off the left accordingly. That's an example how to use a simple motor with variable speed, which is related by potentiometer and modulated by PWM signal. A very simple configuration, just the commands, just to execute, just we have to enable the MCU PWM device with this value and then, after, then we are able to read the value measured from the ADC or change the motor direction using GPIOs. That's very straight and simple. So, we also will figure about anino in just an open stack with different layers. These are our bestseller boards that are designed around Lenino and Arduino S. So, for example, Arduino UN, maybe that's familiar for you. Arduino Umini, Arduino Tian, which is the latest in the family. And last but not least, Industrial 101, which is a little just a compact side board just for industrial purposes. Just to know some to run some control flow, where the sides are is a constraint for your project or not, for your machinery. And then, after that, the core, the QAV model, which can be a Qualcomm Atheros 9331 or 9342. It's a MIPS began based model. Only it might be run at a frequency of 400 of 540 MHz, 60 megabyte onboard RAM. You can also get micro SD card slot or flash memory of 4GB denomination, USB host device onboard and Wi-Fi connectivity and also in the case of Tian and Wi-Fi and Bluetooth low energy. So, this is the next layer, the simple open WRT operating system, the Lenino plane, which is, as I mentioned before, an open source operating system with an easy package management, more than 2,000 packages, rubles and what are adopted by the community. Then, the first approach to Lenino Yo-Kern and models, direct shell, access from Linux Shell, fast and efficient, based on open standards and ready for the cloud as well. And then, another high level approach, higher level approach of Lenino Yo, in which we, you see that we can result JavaScript and Node.js and NPM with more than 70,000 packages just to write your software. And also, of course, you can mix up them with the direct access to the MCU devices. And then finally, the highest layer, just your application, application, cloud application to deploy, to the board and to the cloud. Then, starting from a couple of months, we are also running a new interface on our boards for giving the user a desktop experience, which is called Arduino OS. It's based on the OSJS framework. I don't know if someone of you is aware of that. And the quick features are glance. SSH with terminal based on the shell in a box. The file manager, the quick settings panel, the Lucy configuration, which is the engine of the configuration of the open VRT system, as a standalone application in a web frame, and some basic desktop release, just no calculator, not bad, and so on, what you expect from a basic desktop environment. So, at glance, this is the settings panel when you find access to the most common entries. I don't know. Desktop to desktop team, some panels, user configuration, file view. Again, the settings panel instead gives you direct access to Arduino specific settings, such as general information, network devices, wifi, and rest API. And as you can see, there are some icons about some warning icons also in the top right part of the screen. So, that's showing most the main desktop release, just a comprehensive view. So, as I mentioned before, ND file manager with drag and drop functionality, calculator, text editor, photo viewer, and many more coming. Of course, we are thinking about Bluetooth control panel for our keyboard. So, as I mentioned before, the Arduino S Lucy panel, which is set in a separate web frame, and then you can see, at the right, the kernel and system logs as additional frames as well. The shell terminal based on shell in a box, again in another frame, to access all the Linux functionalities from that. Relying on SSH, or better, Drop Bear, which is the embedded SSH client for this kind of system. And you also get to have the possibility to open the terminal in a new browser tab, just like shell in a box does. So, to make a really complete system, we also try to give the user what's the missing piece. And in general, the only thing that was missing was the GCC compiler. The OpenWRT maintenance started to put it in the official repository from the latest stable release, and they successfully built the 4.8 series. Anyway, we were able to find, were able to provide our users the 4.6 compiler for our boards, which usually has to be tuned to the build tool chain of the SDK. And just and but since it is built around micro-syllipse, you have to keep in mind that this library has several limitations. So, when you build your code on the board, just simple program, you might bump into some errors, some imports, because after all, the micro-syllipse is just a small device library. It can't even be compared to the standard ones. If you want to add some other functionalities, like I did in the past, and some other function, C function to your library, just apply some patches in the main SDK and then rebuild the image as well for your board. As well, because the reason you wouldn't be able to leverage all the changes made. Then we also decided to go further and provide the user the AVR tool chain for our boards. Then it means that you are able to build your own firmware for our board on it and then flash straight into the CPU, which is a simple wrapper script for AVR do. For AVR best boards. We get this achievement with the technique of the Canadian Crush compilation. I don't know if someone here in the hall is familiar with it, but it's pretty much tricky. It involves cross-compiling tool chain and NET1 to bring the build of the GCC at its very end. But anyway, I managed to find a way to edit the original scripts by Atmel just to pull it off. Basically. And so we are able to provide a full AVR tool chain to our user. Usually we deploy the binaries since the average user needs them. But I mean with that I mean that you can't just only build AVR libraries. You can build AVR firmware for your MCU. You have some AVR code. Your personal code you can just build it on the board and then flash again into the MCU. Just so if we would like to build the firmware you need, as I mentioned before, the Arduino libraries, and they make command. And of course a prebuilt file which I edited just to modify some paths. So at the end as I briefly show you you'll get the firmware in the very same folder. The same applies for the ARM tool chain. Again, the same technique is the cross-canadian just leveraging the original scripts from the guys from the ARM GCC. We were able to provide an Arduino chain for our boards. So again you can build your own firmware for your device on board, in this case at the end because it is on board as some D21 microcontroller and then flash it again in straight and simple. And again just not only Arduino firmware, but ARM firmware in general. The same applies as I just told you having an Arduino sketch in the folder Arduino libraries, we provide them as an embedded package they make command and again they prebuilt McFile with the necessary paths. So it's just time to go out just to fire up my virtual machine and show you Python. So, this is the login page of Arduino S just type password so if you are connecting the board for the first time, you will find a simple wizard guiding you to the configuration process. So, let's go on the next screen since it's a virtual machine we don't need any particular setup because that will lead me to the wifi settings and since this is a simulated environment we don't need it but just trying it will ask me to select wifi network after pressing the scan button the virtual network after that it will be asked to connect to the board just like simple with the DNS request if you want. So, just these are the no, these setting paths just like I mentioned before so demonstration a simple editor file manager with drag and drop functionalities process viewer terminal default password default user and password are Arduino since this is just a simple virtual machine I didn't just I didn't take care of switching them, yeah just keep it simple so, just I mentioned before as you can see all the prebuilt tool chain binary tool chains and Arduino specifics files which are usually at the libraries you will find in our IDE IDE so, ok so, as I mentioned before a simple Mac file and Arduino sketch just are enough the Arduino sketch is the well known blink a simple 10 100 millisecond high 100 millisecond low simple blink this is the AVRGCC up and running and then just running after a short time I get my firmware built in the folder which is a quite impressive result in my opinion but it is no, it is a compiler for AVRGCC it is cross compiled but we are able to of course provide them on the board since I want to do a quick demo I usually I mirror the environment on the board of my virtual machine but that's the same of course I can flash the firmware to an MCU because I don't have one arm compiler built according to all the full specification of the guys who design it again and that's my firmware in the folder ready to be flashed straight into my MCU this time with OpenOCD since we find a reliable way to flash the firmware with wrapper script relying on OpenOCD we are dealing with the SanD21 MCU so the reliable choice was that since we have the configuration files of OpenOCD ready and set and then after all as I mentioned also the plane GCC if you want to write a simple bare code just read it that pretty much ends my talk if you want any question and answer yeah sure, sure the fact that we design it for maybe for high level application anyway the MCU as far as I recall as we had pretty much well in some not stressful real time scenarios so it's just time to play around to get acquainted with the system and know its actual functionalities and possibilities yeah, yeah, sure, sure let's say that it's a community that you expand your file system with a simple script we provide so just you insert your SD card and then expand the file system just being like a whole root system root file system and then you have of course to install more software install the toolchain which has quite cumbersome I can complain because the VR GCC I'll just show you just the size without the yeah, yeah, yeah without documentation and then we can say something with the toolchain yeah, we say something because without any documentation I totally disabled it and then you have also to consider the stripping process at the end if you compare also the oldest VR toolchain they are less cumbersome than the most recent one I'll show you maybe it's not again, anyway stripping the binaries lead us to less space occupied on the system in again easy we have built our kernel 3 which is of course open source you can find on our repository I can link you that and then you can browse of the commits and show the work that has been done and you are welcome to contribute as everyone of course yeah, that's the main goal as I told you we currently only atmel mcu on board but it is designed for a bigger scenario, for a wider scenario not limiting to a couple mcu of course to generic mcu pretty much every I built all the latest versions of them especially of the of the ARM of course I I can build just the latest one for the for the for system relying on a mass library because for some building issues with the utility also so once in a couple of months of course we will switch this to the latest openwrt trunk relying on a more boost C library which is basal and then again we will be able to provide all the updated tool chains anyway, this one already been tested and compiled also for mass library so again, this is not to repeat but we can update the distribution let's say that GCC because for the plain GCC that is residing on our repositories so just never usually want to start GCC on our board just use the package manager of course you're right because we have hardware constraints anyway, the outlet time of building it's about 30 seconds for the aviar architecture and about one minute and half for the ARM architecture of course the time in compilation is strictly bound to the libraries you use in your project the more you have the more the built time is higher yeah, that was the main goal we thought it this way any other questions? yes, that was another approach so to remotely build the firmware and then flash into the MCU but this is designed for local projects for this kind of approach I have to quickly rebuild my firmware let's say that I cannot I don't want to flash it but just I run a remote command and then the building of my script starts and then flash the firmware into my MCU so providing new functionalities or better a different behavior than the previous one and I'm always talking about not just Arduino behavior but bare aviar bare firmware if you are done if there aren't any questions I will thank you for attending my talk and I hope to see you in another event like this of course again as speaker thank you