 OK, so we're going to switch from a very small device to a much bigger device with Yocto. I am French, I am French. I'm a new developer, writer and teacher, and currently I am a CTO for a company called Small ECS. It was open wide before, but now it's Small ECS, which means embedded and connected systems. So I will talk about using Yocto in IoT world with the first use case with a sensor based on a small Raspberry Pi Zero. And the second example will be an example from people from Toulouse at Small ECS and using a Raspberry Pi running Yocto but just for a border router. Sorry, Facebook is everywhere. So there are several kinds of objects. We talk a lot about basic objects such as sensors with microcontrollers. And sometimes the software is bare metal or some lightwares such as Contiki. We talk about Riot. There is another operating system very famous and quite old which is called Contiki. And the second class of object is a computer. It's a kind of computer with high speed CPU, such as Linux, Tizen or Android. There are some examples. And this one, I don't know if it is famous. Out of France, it's a parrot. It's a sensor for the plants, for the flowers. So I use it on my flowers in Paris, but all the flowers are dead now. Not because of the sensor, but because it was very cold. And the second class is a Tesla Motors car. And they say the Tesla Motors is a connected computer on wheels. It's a kind of connected object. And this is an example of a coffee machine. I didn't test because I don't like coffee, but I like Yocto and it's running Yocto. I don't know if it is really useful to run Yocto on a coffee machine, but it's fine for the demonstration. So I will talk about Linux and IoT. Well, it's not a universal OS for the IoT and for the embedded. But there is a document called IoT Development Survey last year. And they say that 73% of IoT devices run Linux. And the second one was Bermetol, which is quite amazing. And the third was Freer Tores. And the sixth, the fourth was Contiki. So it's all except Bermetol is all free OS. That's a good news. But when you talk about Linux, as an OS, don't forget you have a bunch of distributions. And you can put Linux on the board without using a distribution. So the distribution, such as DBI, Nubuntu, etc., is fine for developing, but it's not fine for an embedded system. And for an embedded system, you use built systems, such as Yocto, BitRoot, or some kind of Rinspel system. So Yocto and BitRoot are the most famous. So you know what is Linux distribution, I hope so. So it's big and slow, but not so slow, but it's quite big. And now there is another problem. Most distributions, such as Wuntu and DBI, they run on ARM. So it's easy to take the wrong way. So we have lots of customers. They buy an embedded board. They put Ubuntu on the board, or DBI, and they say, well, we change it in the future, and they never change it, except when there is a big problem. So they call us. And one of the good ways, in my opinion, for running Linux on embedded and IoT is to use a built system. So what is a built system? It's not a distribution, it's just a tool to create the distribution. From the sources. And most of the time, it does not provide the sources, but only recipes. And when you run the built system, you have binary files to be installed on the target. So bootloader, Linux kernel, et cetera, et cetera. And you can provide additional information, such as licensing issues, or dependency graphs, et cetera. So it's much better for the footprint, for the boot time, et cetera. It's quite the same with Android. Android use a built system, but they provide sources. So it's 40 gigabytes, the size is 40 gigabytes. They provide their sources, and they are their version of external sources. And a specific built system, which is based on shell script, but it's open source. It's AOSP. So the most famous built systems are Yocto. The first one is Yocto. The second one, in my opinion, is BuildRoot and the third is OpenWRT, which is based on BuildRoot. And the major difference between BuildRoot and OpenWRT is the pat caging support on OpenWRT. OpenWRT is famous for the router, for this router, but it runs on some device, small device for IoT. This is a WeIO. It's an IoT device developed in Paris, but it's not very famous because in France we are not very good for selling things. So it's famous inside Paris. And it's quite a good device with OpenWRT, lots of sensors and very cheap, but well, not very famous. So BuildRoot, it was a project for micro-syllipsy. And now it's a real project with quite simple. It's based on Mac file. It's based on Gloomac. And you can't reduce not really a Linux distribution, but a Linux firmware because there is no packaging support. You run a BuildRoot, you get an image, and you put it on the target, and you can change anything. So well. OpenWRT was the first project before Yocto. It's a cross-compilation framework. It was started for this device, which is quite old. It was the first, as far as I know, it was the first PDA for running Linux and Qt. And it's quite famous when there is a Linux distribution for a device, most of the people, they want to develop another one. Not for using it, but for the pleasure to develop another one. And that was worth because the people, they work on OpenWRT, but they develop the tool. Two develop OpenWRT. And the tool was open embedded. So open embedded is based on recipes with a specific tool called BitBeck. And all the components are based on recipes from the world to the world distribution. And that's quite different from BuildRoot. There are classes, headers, configuration files that you can inherit from classes. You can derive a recipe, which is very useful. We'll speak about it. And the files are organized in layers. And there are packages. First, it was IPK, which is a very small packaging system. But now the default packaging system is RPM because it's where that puts some money in the Yocto project. And lots of people use that in the industry. So Yocto is a unit prefix for the metric system. So it's a very small distribution, not really this size, but it's the smallest prefix. So it was started seven years ago by the Linux Foundation. And in order to integrate all the projects around open embedded, because the documentation, the current documentation of the subproject around the open embedded was awful. There was nothing except to be done, to be done, to be done. So there was a lot of documentation. So it's quite complicated to use Yocto, but now you have a very good documentation. And lots of embedded companies, including hardware makers and device makers, software editors, they are members of the Yocto project. And there is a guy, which is the chief of the projects such as for the Linux development. And for us it's very important as a service company, it's very important to know Yocto and for the customer too, because most of Linux BSP today, if you buy a module, you have the Linux BSP is a Yocto layer, open embedded layer. So if you don't know Yocto or open embedded, you can build your system. You can't build your system. So it's, wow, this is a classical workflow. The main difference between build route and Yocto open embedded is that you generate the packages, even if you don't put the packages on the board. Inside the system, there are all the packages. So if you just have to add an option to put the packages on the board, it's quite interesting. So it's a system based on layers. So you have this here, you have the basic layers, the core layers and the Yocto layer. And then you can put your layers, so additional layers up on the previous layers. The first one is a BSP, of course, if you don't want to run QMU or basic PC. And then you can add anything you want. And for example, you can add IoT layer or you can build or get from external sources. So some code. If you want to build Yocto distribution for Raspberry Pi, the first step is to clone the right branch. It was based on Krogot, but now there is a new version. You clone the Raspberry Pi layer, you start a build directory, you add the layer with a script, you set the machine name, you build the basic distribution, and then you generate an image for the SD card. It's quite simple. Well, when you know how to do. So the first use case was the last term as we were integrated with a Smile Company. Smile Company was involved in open source, but involved in open source in web server, etc., not embedded systems. So they wanted to get a demonstration, so something like that. Sorry, it's in French. Something in French, something in English. So they have some demonstration just like here. And they need a sensor to get some data. So they called me to build a demonstration in one day or about one or two days. And it was a demonstration based on Raspberry Pi. It was not Raspberry Pi 0 at this time, but for the first time I built Raspberry Pi 0 because it's very smart. And with the sensor, high square C temperature and pressure sensor, I got from Adafruit. Adafruit, I don't know the name. Adafruit in French. A Wi-Fi USB. And we use HTTP protocol because it was very simple, so that was nice. So I decided to start from the smaller distribution, which is called CoreImage Minimal, and to add the right package because you can build a very complicated distribution with lots of packages, and start with a very basic distribution. And the basic distribution without the packaging system is about 15 megabytes. It's not very big for a new system. And then I added some options, package management, standard or derivative recipes, and new recipes, for example, to control the sensor. And I put everything in a Meta IoT layer with the script, the octo layer. And on Yocto, you have a local.conf, which is your local configuration file to build on your build directory. But it's only for the test because you can add lots of options on local.conf, but if you give the distribution to another guy, it should not do the same thing. So you have to build a dedicated distribution at the end, which is called RPI IoT image. The derivation was very interesting in Yocto. It is very interesting in Yocto. So the principle is quite simple. You have one recipe, which is .bb, where you define how to build the component in layer A, for example. And you write a new recipe, not a new recipe, a sub-recipe, which is called .bbappen in another layer. And in the second recipe, you can change add files, change files, et cetera, but you don't change the main part of the recipe. That's the best interest. And for example, for the example, we modified the network configuration. We changed just one line, from TTH0 to WLAN0. It was very difficult. We had HTTP server like HTTPD. We activated I2C in the config file of the Raspberry Pi, and we add to load the I2C dev module. So for example, in the basic distribution for the Raspberry Pi, only the internet interface is started. So we have just to switch from TTH0 to WLAN0. We have some additional packages with Imagine Salapon, so IW, et cetera, et cetera. And we update the network interface file for WLAN0. And we use manually, we start the network configuration with the binary WPF password. So updating the starting I2C for the Raspberry Pi is quite simple. It's not activated by default. So we have to modify the configuration file, which is config.txt, and to add a function, which is executed after the deployment phase. So it's called do deploy happen and to modify the file. And then we add the tools for the I2C and kernel modules because the basic distribution doesn't include the modules. You look like a snake, you are green. And then you modify the kernel, you modify the kernel recipe just to add this line to add the automatic load of I2C dev. And we have to write a control room, a basic C program. There was a basic C program from the internet. It was based on Ryan Pi. Ryan Pi is a library for Pi players, and it was packaged in the Metal Raspberry Pi layer. And we started the service, very basic service, just like on all good old Linux and good old Unix, without system D. Just with a script, which reads the sensor every 20 seconds. It's a class to build such a service. So I can show you some piece of code, maybe. I need the... So for Yocto, just an example, Meta IoT. So you have programming in Yocto. You can put Toto inside of... Recipes Core. For example, in order to change... And then you add a new file with automatic starting WLAN 0. A bit more difficult. If you develop the script, the program... So it is the program to control the I2C sensor. This is one C program. And you add some files to write a simple script to build a dynamic web page. It's very old-fashioned. It's just for the demo. But I like old-fashioned things. I'm a dinosaur, so that's... Of course I like. So you can... So is it possible to get... Okay, the Android dot spot. We can start a bit demonstration. I hope so. So you can see the P0 booting. It's quite fast for Linux. It should be. Without the network, it's faster. But without the network, it's difficult to get IoT running. Okay, it's okay. So is it okay for... Well, I have a problem with my PC. It's okay on the board, but not on the PC. No, no, because I need to be on the Android dot spot. But I don't know why it doesn't work. I'm not sure. Okay, no, not for the demo. Not for the demo. No, no, not a dream. Okay. Okay, but it's not a problem. For HTML, so yeah. So it's 20.7 degrees here. I'm not sure. It's okay? Yeah. So it's when... Don't remember the count was and count up. It's a second. Why? 160, yeah. Okay. Yeah. Okay. And it should change if you put your finger. It should change. Why it should change? Refresh. Remember, there should be an automatic refresh, but... Oh, okay. No, it's... I will die. I will die. Okay. It's very cold in Belgium. So... We have 36 seconds. So just to talk about another... The use case is just some words about a... a work was done by Nicolas Gheer in Toulouse. It's a more complex demonstration based on... on a real IoT device with six loopholes. And we use the Raspberry Pi as a border rotor running Yachto. And it's based on a center tag. It's a device from Texas Instruments with a Cortex-M with low power. It's a really... It's a real IoT device. And we use a software which is called 6LBR, border rotor software. So you get the data from the tags you send to the cloud with the MQTT, et cetera, et cetera. And you can use Grafana to see the values with a web browser. It's very famous today in Grafana. Everybody speaks about Grafana, so it's... But it's fine. I don't understand how it could work, but it's fine, very fine. Okay. If you have some questions... Well... One or two questions? One or two questions. Or no? Or no question. It's better no question to get the time. Everything was clear. Yeah, one question. You said you use RPM as a whole package. Not me. It's a YOKTO project. You can change it in the... Yeah. The question was you said you use RPM in the distribution. You can change it in your configuration, YOKTO configuration, but this is a default. If you want a smaller distribution, you can use IPK. And it's half the size. But I use RPM as a test. But you can use IPK. It's much better for embedded. And second question. Do you use Musel Lipsy as well, or it's a G-Lipsy by default, or it's a U-Lipsy by default? The question was about using Musel or G-Lipsy. It's G-Lipsy by default on YOKTO. I don't know if you can build a cross-compiler with Musel on YOKTO. You can do it on build route, but I'm not sure on YOKTO. No, you can. You can? OK. OK. I'm afraid we'll have to take other questions outside. Outside? Yeah. OK. Thanks a lot. Thank you. Merci.