Hello, everyone can hear me? Okay, good. Hi everyone, I'm Gal Sagi. I'm presenting here with Tony from Red Hat and Muhammad from IBM. We're going to present project career. I usually open with a question here about if you know the project if you heard about it But this time I think the proper question will be anyone here didn't hear about career before? Wow, okay. So we are either doing good or you are too shy So project career, I want to start with a little story of how the project started because I think it makes a good point Me and Tony here didn't know each other around one and a year and a half ago We first met at OpenStack Israel event. It's one day where we're doing OpenStack slides and talks and We met and we started talking about the problems in containers networking and started throwing ideas about career and From here to there the project was started and The point that I was trying to make is that these summits and these gatherings or OpenStack days or meetups are great place for collaboration for meeting new people and talking about common challenges and My advice to you is spend the time to talk with the person sitting next to you and raise ideas and Try to see how we can move this project forward So this is the outline of what we are going to talk about I'll give a brief introduction about the project then we'll talk about the current state our Kubernetes integration and advanced policy How all of you can get involved and help in the project and a quick demo that we'll have So I talked how the project was started, but why did we start it? Well, we noticed back then that users were starting to deploy this new thing called containers and They were deploying it side by side with OpenStack, whether it's isolated or whether they want to Connect them in a virtual topology with the OpenStack workloads Running containers inside OpenStack VMs nested and now the big deal is running OpenStack inside containers And what we notice about all of these environments is that you would usually deploy a specific solution for containers with infrastructure and drivers and specific solutions For your OpenStack workloads and we ask why? Why double this complexity? Why having so much elements just to implement something and We started by looking at the first step at networking and What we notice is for Kubernetes for Docker. They are reinventing new networking abstractions like Lib Network Like the CNM, CNI and so on and all of these new abstraction have specific solution like Flanel, Weave that implements them While we already have a pretty mature and production grade Ready abstraction in OpenStack that is called Neutron What we also notice is that most of these solutions and most of these modeling are still Still in early stages and they are lacking a lot of security policy a lot of advanced services and a lot of features That we have in OpenStack. In general, it was very hard to connect containers on one network with VMs and bare metal servers and We thought that it's not really necessarily and then when we looked at these abstractions For example, Lib Network and we compare them to Neutron And I'm not going to get into the argument if VM networking is different than container networking I think that right now the application is what matters and When you're looking at the high level on all of these things then they are pretty similar. You can express the connectivity for containers with Neutron just as well Another main problem that we notice in this environment are nested containers inside VM So many of these users were deploying Containers nested inside VMs to receive tenant isolation or to use some sort of management tools They had for VMs And when you look at these environments, they are they are a mess. I mean There is there's so much overhead and unneeded layers to connect to containers sitting at each different at two different VMs And we are I mean, we are networking people and we are happy with the first demo that we do is a ping Right, we do ping and then we all clap and it's all working But when you look at the day after the ping Okay, when you look at how you manage this how you upgrade this how you update and troubleshoot And debug this environment Then when you have to solution, it's just double the complexity and doesn't matter how good these solutions are and There are already solutions in the Neutron ecosystem. That's all these challenges So career mission as you'll soon see is exposing these features and these capabilities to you So you can leverage one network in infrastructure for open stack and for containers now we started We started on the networking side and then when we move forward We noticed that the same problems Exists in other areas, right? We have these problems for the networking but also for the storage also for Authentication and the way that we see career now is kind of like a glue a bridge layer between containers Ecosystem and open stack and right now as you'll soon see where Tony and Muhammad will present. We have a full working integration with networking essentially Mapping you could use Kubernetes or docker API and these maps out of the box to open stack and to Neutron so you can enrich your containers environment with all of these capabilities and richness and You don't have to worry about different solution and different infrastructures in your environment, so Let's have a look at where we are right now with career and what we have As you guys know career is a open stack project under the big tent and As gal mentioned a moment ago. It is the bridge between the services that are available in open stack and Containers and it aims to support All the container Runtimes starting with Docker. Hopefully expanding into rocket and whatever comes next and we also wanted to Support multi-node clustered environments, so there it is Kubernetes or Docker swarm or mesos so we want to have all of these Container technologies supported We are an open stack A project part of the open stack community and we have been working closely with other projects in open stack In particular with Magnum and I have to apologize for starting the session a bit late because we were running From a design session we had with Magnum as we figure out how to provide the services that career has to Magnum We have been working with Kola You can essentially get a containerized version of career and of course we use neutron and the storage services and Keystone to provide all the services to containers. There is a Pretty diverse group of people who now are working on these projects from various companies Newcomers are always welcome and we have a weekly I or see me things that you can easily join So let's look at the features that we have We now support Keystone both version two and version three We started with Docker and Lib Network and we have the Docker Lib Network remote driver an IPAM driver we have Partial support for Kubernetes. There is a still some work to be done but hopefully we are going to get it done in this cycle and We provide as I mentioned we started with networking and Docker and we Can essentially provide all the services that neutron has to containers in particular Beyond the basic resources networks and subnets and subnet pools and load balance and all that You also provide security groups and whatever we have in neutron as long as there is a Reasonable counterpart in the container board whether it is Docker or Kubernetes We can essentially take advantage of that service and seamlessly provide that to the container. I Have a star over swarm. This is the old swarm as of Docker 111 in Docker 112 a new swarm was introduced and It has been in the latest release Limited to a particular driver that Docker has that has is going to be addressed and hopefully by the next release Docker 113 we should be able to Take advantage of the swarm mode as well so let's have a closer look at different components of career there are some of the If you look at your right side, there are obviously pieces of code that Interfaces with neutron services, whether it is Keystone, Neutron or Cinder there are some configuration management for career and Port binding or plugging a virtual interface into the network in addition to these basic Components we have some components that deal with supporting the networking model in Docker Which happens to be different from the networking model in Kubernetes So we have a set of components that deal with Networking in Kubernetes and we pretty soon figured out that these Components those that deal with Docker and networking and those that deal with Kubernetes Have different requirements. They use different packages in terms of packaging these services. It's best to package them separately Docker and Kubernetes have different release cycles So as new things are added if you want to keep up with the changes we need to be agile in And separating these pieces of code into different repose would be the best So that's something that we did in the previous cycle that the cycle that ended and it took a Good amount of time, but we divided the career repository into three repositories and right now We have the career repository is something that we call career leap that has the basic components that is common between all the other Repositories that are career leap network and career Kubernetes so the career leap is what is used by both Docker and Kubernetes implementation of career and career leap is Live network is for Docker live network and Kubernetes is obviously for Kubernetes So let's have a closer look at the part that is common between both Kubernetes and career Needless to say similar to what Nova needs you have to somehow connect your container to the network And similarly We do this plug-in and Plug out of virtual interfaces into the network. That is part of the common code the career library If you look at the top Figure that's kind of the most common use case where you have containers in your hosts and the way you Can connect your container into the network is by using a pair of virtual Ethernet interfaces and having one connected to the container another one to your neutron network During the past cycle we have added support for Mac wheeling and IP wheeling That allows you some form of Networking in nested environment we plan to support VLAN and You take advantage of supports and ports in neutron to have a full support for Connecting containers that are spawned in virtual machines In environment similar to what for example Magnum does uses so These are the three options that I have listed and we have support for a bunch of vendors that you may have Seen them as net neutron plugins There is a small piece of code for plugging the ports again to the networking infrastructure and and we support a bunch of Neutron plugins whether it is Linux bridge open flow dragon flow oven Plum grade me dough net and if you have any other Neutron plugin that you want take advantage of career. We will be happy to help you and get that done Just to look at What is happening under the cover a little bit more This is how you access or you create a network in Docker Docker network create and with a bunch of options which are specified the subnet you want to be Used at the gateway and finally you specify a network name As soon as you specify career as the driver and as the IPAM driver career will create this network and Then you can spawn or create a container by Connecting it to the network that you just created by specifying the net option in Docker run so what happens when you create a network and Create a container that is connected to it under the covers career creates a network Neutron network And you can see that When you see at the output of Neutron net list that I have shortened just to fit in the page you see that the Neutron network has been created the name starts with career dash net followed by this beginning of the ID used for the Container if you look at the output of The network that was created by Docker the UID of that network is 0 8 1 9 2 and As you can see the same kind of name is Partially used for the Neutron network and we use Neutron tags to keep this association between the Neutron network and Docker networks in Persistent storage. We don't add any storage of our own. So you don't keep any persistent data Beyond what is stored in Neutron? so you don't have to deal with any complexity that Would arise from using yet another database You can connect your containers to existing Neutron networks that can be useful if you have a Neutron network that you are already using for VMs or for bare metals You can now use the same Neutron network for containers You need to just specify either the name of the network if it happens to be Unique and that would be good enough if not, you have to use the UID and that would do the trick this is again more details about how this is done if You use an existing network. There is a tag that get associated with that Neutron network and then You delete the network in Docker, for example, you don't delete it in Neutron because it was used by other reasons and we Have some limitations with much older versions liberty and beyond that Before that that you can look at later on To have a closer look at export ports That's another option that Docker provides when you can expose a certain ports for certain protocols that essentially gets Implemented under the covers by career by using Neutron security groups here. I have a Docker run that uses dash dash expose one two three four is the port number UDP the protocol and Just to show how what is happening under the cover I have Found the port that is associated with this container that just got created you can see the output of Neutron port list and If you look at the port more closely using a Neutron port show You can see that now there are two security groups associated with the port one is the default security groups if you have a default security group and the other one is the one that we just created and You can specify a range of ports different ports and protocols and all that and they get translated to security group rules in Neutron and Get associated with the port With that I handed to Tony Hi, can you see hear me? Well. Yeah, I think so. All right. So how many of you are familiar with Kubernetes? Good. Okay. So this is light is probably a bit redundant But basically what I'm telling here is what Kubernetes is it's a container orchestration engine the components it has namely the API server the controller manager the scheduler and the cubelette and The way to interface with it in terms of networking is the the container network interface Which is sort of a standard? Of course that the docker doesn't fall because they have their own maybe earlier. I'm not I don't remember C&M and And what it does is it gives you the option of adding containers to a network and removing containers to a network It doesn't really specify which network that is up to the configuration that you put on the host Or that you get from somewhere else as you will see so our integration By the way, if you have questions like we can take them at the end I'll try to go fast so there will be time for that even with a demo So we have a watcher that that with it does it it connects to the Kubernetes resources In a watch endpoint so it everything that happens in the Kubernetes API generates an event that we get Then we translate that to Neutron operations we go then back to Kubernetes and we annotate the Kubernetes resource with information about the neutral resource that we created or modified or whatever and Then this information in Kubernetes is seen by the CNI driver, which finally plucks the things into place so from the definition you could see that the only things that interface with the Neutron API is the watcher but with Kubernetes API with CNI driver and and the watcher interface All right, so here you can see it a bit more visually how a deployment would look like So typically on the master node you have the Kubernetes API and the controller manager We add to that the watcher the watcher can't really run anywhere, but If you just have a few machines you can put it there It's probably the most logical place which is where it talks the most with it also needs to be able to talk to Neutron obviously and Then on each of the controller node, sorry worker nodes We need the CNI driver the CNI driver should be able to talk already to Kubernetes API because that's that's how it works basically, so we don't add any kind of Requirement because it just it just goes there to Kubernetes API to to get the port information and the thing that we're adding in this cycle in the previous cycle in In Austin you could see that we demoed swarm talking to Kubernetes over Courier provided Neutron networks and now what we're doing is we're working on courier to make it highly available The watcher so that if it falls you will not be left up to figure out If you started if something some namespace was created some resource was created and so on so in the in the reference implementation of Kubernetes Would you have it's on your right? What you can see is that there is cube proxy redirecting from any port or any endpoint to Specific container running either on that machine or another machine and that maps to the to the what you have on your left hand side, which is the The API resources which there is a service endpoint and then there are pots That are endpoints to that to that service and the service IP is considered a virtual IP So the way that we do that is Using Neutron obviously we use Neutron for everything. So it's using L bus this time V2 in the in the last summit We presented with V1, but that is that is gone. I saw a bytes that removed it completely. So we had to upgrade to that and So what we do is that for inter inter cluster communication? We just go from pods to a load balancer in Neutron So depending on which Neutron vendor you have it's going to be one way or another and Then it just goes to to the other ports. So you will if you know Kubernetes you will be wondering. So is this equivalent to the to the load balancer type that Kubernetes already has for open stack and The answer is almost it's not exactly the same So how we implement the load balancer type is we just keep the service load balancer You can see here, but on top of that the only thing that we need to do is add a floating IP So then it's already externally accessible So you do not need Kubernetes to have to go and talk to to Neutron anymore with with that plug-in All right, so that was all well for very metal, but when you went to get to nested environments you need something more and and like Mohammed explained for For the the binding part here. It's a bit of the same. So we use the IP villain Mac villain and and the villain sorry the Neutron ports and supports to to give you that access and we only have tried it with Neutron Provided alabas, but it should also work with Octavia the problem that we see now with Octavia is that Unless I missed something that happened very recently. It uses VMs to create the HAProxies and we would probably like to to have the load balancing happen at the container level or somewhere that that was more Distributed so that it would be on a feature parity or a reliability parity with With cube proxy and not just better in terms of network properties So how do you get involved? Well, there is something that we already have which is the packaging In terms of container packaging so the container packaging that we have is every time that there is a new commit I have a service that pushes it to Docker have so you can try it That is the default configuration, of course if you want any other kind of configuration you can build it yourself It's very easy. You can use DevStack. We have plugins for that, but then a good way to get involved out of course we have color integration that We come from IBM contributed So color is a way to deploy it, but only for the Docker Integration not for the Kubernetes that we will add very soon, I hope and for the Distribution packaging that that's something that if anybody wants to contribute I will be very happy I have already the system defiles, but we need to do all the rest so the Priorities in this cycle are very clearly to finish a Kubernetes integration with HA support With the properties above we have designed sessions that I will show tomorrow to talk about these aspects HA and multi-tenancy the policy will probably come a bit later the new policy resources in the in the Kubernetes API and then The magnum integration which we have been discussing and that may does be late for this session But the nested work has already been ongoing and we will show it in the demo Louise here will show it in a moment if I stop speaking for a while and Finally to to make the releases so we have storage We have pushy driver and we have a session also tomorrow to talk about that with the senior people that they have a go driver and we have to See how these two efforts converge and The work sessions the career magnum you're too late for that already, but if you want to join any of the other ones You're more than welcome. We especially look forward Operator feedback people that have use cases that they maybe would want to use career, but we don't cover them So your voice needs to be heard so that we can work on that and if you want to to contribute You can file blueprints. You can file bags. You can come to the weekly IRC meetings They happen every week at 2 UTC Afternoon and there are some getting started guides Don't worry if you don't cannot copy this the I will update the slides later and tweet about that But now let's get to the to the demo that Louise here will do and if that it's live because this is a role We have only live demos if Let's let's see if the demo gods respect us today Can you hear me? Okay. I hate the trackbed Yeah, that's probably a little small right that okay Okay, so what we have running here is a dev stack and then I have two VMs running with Fedora server 24 We picked that because it has the IPvland driver installed So what I'll be showing you is using the IPvland you could use Mac feel and as well We just chose to use IPvland, so I'm just going to show you first So this is our dev stack user and I just Hopefully it's connected or maybe not. This is what a live demo does I guess So here I'm just going to show you that we just have two networks created Private in a public one, so I'm going to join the private one and all of these give up. Okay, so on this VM So I'm just going to After we run the script so So I'm just going to create a Docker network and join with the courier driver and join the can it Join the existing Private network there so So as you see there at the you you you ID of the network is in so that's how it's joining it So that's created there and I'll just show you in my dev stack user that no new network was created So we sort of have our public and private So then I'm just going to run a container on that network So we should have a IP address in our 10.0. Sorry 10.0 79 so then on this other VM I'm also going to create a network for first. I'll show you so to allow the The container to ping outside you have to associate the IP address to the port of the VM So if I just show you the ports so the VM is 10.0 the 31. So if I just show you the I'll show you the port and that the IP address is associated with this Oopsies my coffee too much. Yeah So we can see that 79 is associated with so then what I'm going to do here is restart this one So then this one I'm just going to create a container again And just show that they can ping between them That's wrong. I'll have to so once again, I'll just It's already running. That's okay I should be able to run it directly So we'll see you got a 10.80. So if I can ping between so the other one was 10.0 79, right? So I'll just quickly show as well. Just they it can ping the other VM on the network as well. So it's not just containers. They can ping whatever As we said before the the pinks make us happy. So if you have any other question We're kind of about to be out of time But if you have any question now or you want to catch us later The to show the board of the of the new VM that the other one Oh The other one will have 30 is 32 Yes They may be ready of the science yeah, so you can copy I might have a question for you guys sure All right, so the question was about well everybody heard the scalability limits The scalability limit of course is the the one of your new turn vendor So for the for the reference implementation of of Newton if you would be using a lot of Of security group magic and so on so obviously that you would have the IP tables problems But now that there is the new contract driver that should be taken care of if you are putting each tier of your application in separate Network or sometimes everything on the same network some other the drivers like Mute the net if you put a lot of ports in the same bridge We typically doesn't happen so much in VMs But if you would say I don't know I make a slash 8 and I put all my Containers there that would be a problem because then you would get all the broadcasts I'll ask the question differently and then Sure So so far some some some folks have complained that Newton doesn't scale So you in your experience career and dogger and other considered environments. I haven't heard this type of physics Why do you use Newton if it doesn't scale? Why not like start with something that you know something new So the idea not of not sorry the question is what why to use neutral networks if there is a concern that they may not scale so the the answer to that is that the reason could it exists is so that You can have all your infrastructure under the same networking and under the same support to the concerns about scale I'm aware of of some of the Neutron solutions are scaling to thousands of nodes and And this this is for the Asian running on the machine and and the limitation is For some of the of the neutron drivers of how many nodes it can it can run not so much to how many ports It can be bound so that doesn't really worry me a lot like I'm sure that there are neutron drivers that are not going to be a good choice for this, but You it depends on what you use of course like here We have people that were reporting to me a lot of of nodes the other day, so it makes me feel calm so in docker one dot twelve the Service so that it just real open as is implemented with an IPvS namespace, right? are you looking into replacing that with a loop balancing as a service as you Did here or right are you asking the docker guys to actually patch this IPvS new space into a Neutron network and make it a doc and neutron port so the current idea. I've not checked Much since it doesn't allow you to choose anything else than the than the overlay driver I haven't really checked Which is the best way to do it, but the current thought we had was to if we live network adds a Goal to us to our live network driver about doing something about the service to do it there and ignore completely the IPvS part So to to to leverage Elvis be do yeah, it doesn't look like that Docker wants that kind of service whatever is in swarm mode in a pluggable Fashion so those services are all being added to the engine as such It is beyond the docker networking Leap network or ipan driver That's a long discussion to have The docker I guess but as of now The idea is that those things are embedded in the engine and you if you want to use it use it If you don't want to use it don't use yeah, we have to we have to close So if you have any other question you can catch us because there's another presentation in four minutes


The Northwoods Writers Conference gives writers from all over the world a chance to come together and participate in workshops centered around poetry, fiction, and non-fiction. There was also a reading series in the week-long conference at Bemidji State University's American Indian Resource Center. Guests heard from nationally recognized writers as they shared portions from their books. The conference is also a place for the community to engage in a contemporary literature. Participants traveled thousands of miles to take part in this conference. Some even came all the way from Denmark. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


It is Friday afternoon folks. Seth Rolston here in our downtown Honolulu studio of Think Tech, Hawaii. Actually, we've moved the studio, as you can see, to Waimanalo for this particular show. And joining me on the show today is by the route from England through Las Vegas to Honolulu is Andrew Dennis. Andrew, thanks for coming on board, thanks for taking time out of your vacation here in Hawaii to spend some time with us at Think Tech. Thanks for having me on the show. Oh, the accent's still there, isn't it? You can't take the Englishman out of England, but you can't take the accent out of the Englishman, right? This is how it goes? Okay. Part of the brain drain of England that is benefiting us here in Hawaii through Las Vegas. Anyway, we're here on a really interesting subject today. This is where the drone leads. We normally have drone subjects, drone people, and I want to thank Mike Amoda for running the show last week when Margie and I were in Tucson and not able to be here in person, but Mike had to care of the action last week. Thanks, Mike. We talk about drones, what they're useful for, how they're certified. We talk about all this technical stuff, but we have here today in Andrew the end state of what benefits might occur in certain cases associated with the information that's collected by a drone. Say we had a disaster or something like that going on or a tsunami coming through here. We have buildings that are deconstructed. We have dams perhaps that have reached. We have trees that are down and such power lines. All this desolation after a storm, and the drones are useful for going in there and getting pictures of that. We can then turn them into digital elevation models and get damaged pictures and such. Now we have to think about how we're going to get something restructured, something rebuilt, something back in place in order to start providing services and such. Water electricity is certainly important, but physical structures are essential to everything. So the utility of a very effective and low barrier to entry type construction technology fits wonderfully in the disaster management domain, and that's where these drones play in. So you, Andrew, with gigacrete, the replacement for concrete, I might suggest, have created a construction system that fits beautifully as the end state of actions that occur based on information collected in the disaster situation saved by a drone. So that's the lead-in. No, you have to follow with how this all works. Back in the 80s, I made a trip to the Caribbean. This is the 1980s, not the 80s. 1980s. I could say 1980s, and people all know I was around at that time. I think I'm older than you. No, I don't think so. Wait a minute. Let's compare notes here. I remember when the Earth just crushed it over. Do you remember those days? I think I've forgotten that. Ah. The old act of it in my mind. Back in the 80s, I visited a few different Caribbean islands, fell in love with five, and decided I wanted to build a vacation home there. But I was an architect in Southern California at the time, and I thought, I'll make it there, but it has to be green. Green. Green. As in eco-friendly. Eco-friendly. Okay. Since 1984, I've been an environmental architect. I've avoided using wood. I don't use Portland cement as a giant CO2 producer. If you don't know this, you probably do, but one ton of cement makes one ton of CO2. One ton of cement, one ton of CO2. A greenhouse gas. Okay. That then challenges all the amoeba in the ocean to ingest all that stuff and turn it into oxygen. Correct. What came out of that was I couldn't find the materials. I didn't want to use wood. I didn't want to use gypsum board. It had to be mold and mildew resistant, which took both of those two items out. It had to be 200 mile an hour hurricane rated, manhandlable, loaded in a container and assembled in five days where you could live in the building within seven days simply because I'd never had a two-week vacation. Okay. These are your self-generated specifications because of your own personal interest and need and your, so rapidity, durability, simplicity, green, and not dependent on trees or Portland cement where the main criteria, what, how different would those criteria be here for Hawaii, for Oahu here? It wouldn't be any different. It wouldn't be any different. Same thing. Right. Now, I intended to fly out there, get maybe four or five guys locally, assemble it and build it. These are untrained, unskilled, or low-skilled workers. And the only final skill needed was the final finish on it. And almost every country in the world or every, just about every location has someone that's capable of handling a trail either in a stucco application or a plaster or even a cement finish. So basically, people who can be trained on the job relatively quickly with straightforward tools, how different is that from post-disaster recovery? It's about the same, isn't it? It's very simple. So this is a very good analogy to what would occur and what would be beneficial after disaster. Right. Now, the important part in all of this would be we have a very lightweight building system that's extremely strong to a point where we can actually put finishes on the building interior or exterior that are bullet resistant. We have a product called Ballisticrete, which is now military-approved, U.S. government-approved, National Institute of Justice-approved. So this new concrete material just applied thicker than becomes... Let's call it a plaster instead of a concrete when you say concrete. Okay. Everyone thinks foundation is... I will use concrete from my vocabulary, how's that? And concrete is also always Portland cement-based as the binder. Okay. So what do we call this? Gigacrete. Gigacrete. How about that? Gigacrete. What more can you say? Yeah. The interior, fire rate, coating over foam, all natural ingredients, everything in it, edible, everything food grade, non-toxic, non-allergenic, non-harmful in any way. And 9,000... Except for the bugs. 9,300 PSI. Way more than Portland cement-based products. Exterior-wise, StuckoMax, totally waterproof, even under a head pressure of five feet of water so the place has flooded. The tests we've got in the lab, which actually you've seen in Las Vegas. On now, will be five years old in March with no water penetration. So you get a column of water, I'd call five feet high, that evaporates after replenish it time to time. And that water's trying to push its way through a diaphragm of trying to of... In quarter... Actually less than quarter of next three, six years. In five years it hasn't made it yet. It hasn't made it yet. Right.  I think that choosing evaporation would be a better deal. Right. To discuss what your first question was, what would the application be after a disaster? It would be a rapid deployment. It would be the... Even the homeowners that have lost their own place could actually be building their own home again. Well, step one is we go in there with a drone and pick up the imagery of what's going on. Right. From that we can determine access and the nature of damage and where we can stash materials and such and issues where there could be potential landslides you want to stay away from. We can find our path of least resistance in and allow the materials to come in that you bring the materials in or arrange to have the materials brought in which are easily handled and easily turned into a building structure within... Manufactured locally here in Hawaii. Manufactured right here or on any island situation as the case may be and pre-engineered in a sense that is the design and the loads and all that sort of thing, the load pass and the ability to withstand loads, that's all built into the design. All pre-calculated. So in the field, the field people don't have to do anything with calculations or with measurements for that matter. Just basically follow the implicit instructions which are created by channels you've cut into foam. And the shapes. And the shapes. So every building has a corner. Here's an example. This is our six inch thick expended post-iron panel. This would be eight feet, nine feet or ten feet long. So it's not a block. This appears to be a block. It's just a six inch sample. Next to every connector, and a connector is two steel studs. So each stud is a two by four, two become a four by four. So every time one shape connects to the next, you've got a four by four construction. So we have a steel frame carrying the main loads, all pre-engineered and pre-designed and the channels that the steel goes in are set distance apart in the foam by channels. Yes. So you simply find something that matches the shape and stick it in with the right length. There's a tiny model. This is a 3D plastic model showing the corner, which is this one. A T. A T is obviously an intersecting wall where another wall abuts. And then the panel is in between of one foot all the way up to four feet and increments of those numbers. So you design the, you want to make the design optimum by having, by reusing those standard panels, fours and eight foot panels. Preferably. We can make custom panels. Okay. But ideally. You want to go with those, use those panels. Yes. And they range from one, two, three, four and increments of pretty much one foot increments. So it means the building can go up very, very quickly. And you can see what's happening here. By the people who are going to live there. By who? Exactly. Our, our emergency staff. Emergency crew can get there. Right. But you don't have to be a trained journeyman carpenter or something like that to go build this. You can do it with whatever skills you bring to the party. Right. If you can get to the site, you can help with the construction. Right. Got it. One of the first ones to ever go in was to Haiti. The instruction that unfortunately I wrote in English, not realizing they couldn't read nor, nor it was, it wasn't French or Creole. And it took them two days longer than it should have because of that. So what you can see here is going on is we're not building with the stud first. We build with the insulation and the insulation determines where the structural components drop in. So now it's unskilled labor or low skilled labor to actually drop that in and then pass a screw straight through the foam to connect this to the top and bottom tracks. So you internalize the structure by screws, but they're simply installed and actually the foam can keep the screw lined up with the driver quite well. So the foam is actually not carrying any load, it's actually has a built-in tooling in effect. Right. And the tooling happens to have insulation capabilities. Exactly. It happens to have the design measurements built into it. So the tooling is a very effective way to take all the time it's spent in measurements on site and such and cutting, you know, they say measure twice and cut once to make sure you don't cut. All done in a factory. It's all done, right. We have a factory tolerance of less than a sixteenth of an inch.  And you can sit there actually in the afternoon of the first day with the drone and go supervise, survey the area, pick up any information that is needed back at headquarters, transmit the data back there. And here's what it looks like again. So you guys thought this was going to look like, here's what actually showed up. Notice where we have the material distributed, notice where the construction's going on. And you could tie together the construction site. Oh, we could say, hey, stop putting the window there, that's the door. Right. Okay, you could certainly want to make sure that's going to be correct. So that's cool. Obviously a well thought through, ordered, structured system here that all came from your own personal desire to put up a vacation time, assemble a vacation home in the Caribbean. And nothing about what you've done is different here in Hawaii. Exactly. And ideally suited for islands. Islands are typically a lot more expensive, everything has to be brought in. In this particular case here in Hawaii, being a much larger island, it makes sense to actually put a manufacturing facility here to supply the local and not get trapped in the Jones Act with this horrendous shipping cost. So instead of bringing in a foam in this expanded form, bring in the resin and blow the foam blocks here. Yes. That's a much more efficient way to... Cut them here, roll form here, create the patented connectors. And ultimately we'll make the coatings here. So what we would do in a workforce thinking process here is the workforce would be move from the job site back into the factory situation. The workforce being folks who are doing the calculations and such on the various designs and also running the factory operations. And so that skilled labor ends up in the shop and the local labor, the on-site labor ends up taking place at the site with basically me as a homeowner or my friends or something like that with a supervisor of some kind and we could actually put this together on site. We also see not just natural disaster, that's a limited market here, but housing, homeless, is definitely affordable housing for Hawaii, no question. We can do it less expensive than the way you're doing it now. That's a really important message, you want to make sure everybody hears. Let's pick up that and talk about it in more detail after our first break. Okay. Aloha. I'm Carl Campania. I hope you please visit us this summer. It's a wonderful summer. It's actually a cooler summer than we're used to. But I hope that you come back and visit us and watch our show, Education Movers, Shakers and Reformers here on Think Tech Hawaii. It's at noon every Wednesday. See you then. Hello and Aloha. My name is Raya Salter and I am the host of Power of Hawaii where Hawaii comes together to figure out how we're going to work towards a clean and renewable energy future. We have exciting conversations with all kinds of stakeholders, everyone who needs to come together to talk about renewable energy, be they engineers, advocates, lawyers, utility executives, musicians or artists, to see how we can come together to make a renewable future Tuesdays at 1 p.m. It is still a Friday afternoon, folks. Friday evening hasn't hit yet. Ted Rawson here hosting our show where the drone leads, the drone leads in this case to some quite incredible technology that could come after the drone has done its work and the desire to reconstruct something after a disaster or in my case just a plane rebuilding in my house. We have Andrew Dennis here from Las Vegas, CEO of Gigakrete Inc. Founder. Founder. Founder and inventor of the quite incredible integrated construction technology. You know, we talk about the foam being the tooling in effect with all the engineering built into it and then the structure goes in obvious locations and the wiring and plumbing would go in where they fit. But on the outside you're going to have a coating on the outside of this which is, is that load carrying? That coating load carrying? It is, but we don't count it engineering wise. All the engineering is done through conventional steel framing. There's a page in the book for the building code that has this in it. But the coating on the outside does add to the load bearing capability of the structure. Yeah, and certainly the impact, hurricane and wind resistance. So you'll have an inch thermal barrier here between any steel in the external atmosphere environment and then on top of that external foam goes the external coating. And that's one of the greatest inventions you've made is that external coating which we're not going to call the C-word concrete anymore, right? We're going to call it... Cucomax. Cucomax, which would be the external configuration. Right. And Plastromax would be the internal configuration, but that is all describe what it is. Difficult to say in just a few words. And of course... Let me start with this. Everything in both bags, stucco-max or plastomax, which are mixed on-site, are all food-grade. They're all edible ingredients. You've eaten every single one of them. I can't tell you what they are, but obviously that's an interactive part. Preparatory rights are completely acceptable. Right. So, 300 psi interior Plastomax was really designed to be the first fire-rated finish replacing gypsum board. So, we passed all the NFPA fire tests and uniform building tests. So, we don't have to bring any gypsum board into the whole area anymore? Absolutely not. Okay. That's great. That's nasty stuff. Yeah, it is. Especially in a humid environment. Stucco-max, so one's really fire-rated and very high impact in abrasion and scratch-resistant. Almost zero maintenance. In fact, if you want to hang a picture, you can't knock a nail in it. It'll bend the nail. But you can use a drywall screw that's designed to go through our material into a steel stud and just on the coating alone, only 3.16 or 5 millimeters thick, it will support 70 pounds of weight. And if you want to stud behind that, a couple hundred pounds, right? Exactly. Right. So, TVs, big TVs and kitchen cabinets find the studs, which we normally do with wood framing. Now, exterior-wise, Stucco-max is a waterproof finish. Just use natural limestone, calcium carbonate, plenty of it on this island. Calcium carbonate is basically the raw ingredient in Tums, an acid buffer for your stomach, it's edible sand.  You'll have to have really strong teeth. Even your concrete-eating termites cannot get through this stuff. All right. Okay. I like to know that. That's great because with all your termites out there, you're done. Right? No more food.  So really the coatings are the final encapsulation of the house. So there's no seam lines, but obviously our individual panel pieces have seam lines and in the U.S., modular housing or prefab housing had a bad rap for a long, long time. Because of seams. Post-war. Post-war. Yeah. Post-World War II. So the younger architects are actually enjoying the fact that prefab, they know nothing about it from their previous generation. Their fathers did, but they don't. So it's a new thing for them. So a lot of young, modern, minimalist architects are actually purposely designing prefab houses with all these joint lines in them. We can make it look like that if you want, but we really don't want that. Why not? Why? Right. Right. So the structural joints in the foam, that seam line is on there. It's completely taken away, right. So everything's encapsulated. You end up with a monolithic coat on the outside that's very, very strong. Okay. Which is carrying load. Cool. So you have a load bearing external shell, which adds to the strength of the steel frame. The steel frame's all the one you've had to calculate. And we've had trouble in the past, I shouldn't say trouble, but high expense in trying to put a, understand the load through a monolithic structure without the steel frame. Because it takes an FDA analysis, and that's a complicated process by a specialist to get that done. And there's no page in the building code book, so the inspector's going to give you a bad time. Okay. So the steel frame takes care of that problem. Right. In fact, double steps. No. Code calls for one step every two feet. We're dealing with four by four, two by four, four by four. Okay. Way beyond uniform building code. So we have the strength. We have the easy assembly. We have the easy shipment in. We don't consume any trees. We don't consume any Portland cement in the process, and we don't load up the landfill then 50 years later with all that material that has to be taken care of somehow. And everything we use as recyclable. Everything. And then it, and you have the fireproof interior and the basically. Weather resistant. And the weather could, if the weather happened to include bullets, you can put this stuff on really thick. Yes. And deflect them as well. Yes. You can put it into a bank if you wanted to, to keep the 37 millimeter from going through. Or a safe room. A safe room. In any house. Okay. Perfect. I think of a renovation material, or if a lot of people now turn in closets and things within the, you know, something that doesn't have a window into a safe room. Okay. So you could, within a house, you could have a hard zone that is impervious to anything that anybody wants to bring to it. Yes. And what this already says is the simplicity and the lack of the total greenness and the lack of putting landfill full of timber and such, lack of cutting on the site, all that stuff, the ability to use in place labor, that sounds like a great plan or great position or great way to go forward in the case of dealing with our broad problem with houseless people here. Yes. We call them homeless sometimes, but prefer to call them houseless because they really have a home. It's just not a home like we're used to. So we need to find a way to get them a home that we're used to. And this would give you that opportunity and they could even participate in the fabrication. Absolutely. They could. And there's nothing in here that can hurt anybody. Right. There's no chemicals that would be of any, I think a drill gun to shoot drills or shoot screws in. Actually, a cordless screw gun. Cordless screw gun is the total tool required here and probably a, actually, for the anchors through the bottom track, we use an electric drill and drill down and then put an expansion anchor or an epoxy anchor into the concrete. So low cost, locally assembleable by the people who are going to use it, fully functional, stronger than a conventional frame structure, much more environmentally friendly and probably a lot more pleasant to live in because you have the insulation value of the thermal insulation. Right. And the sear, which as you know is a very big concern on the seacoast and noise is kept out as well. Right. So we have a great STC value of 52. Our second home that we've built in the Caribbean survived two hurricanes. The last one was 155 mile an hour sustained winds for two hours in Exuma, Bahamas. And that particular client has documented 60% energy savings. Okay. And after the 155 with 200 gusts were told, they have zero damage, no leaks whatsoever in the house. So here in Hawaii, reduced air conditioning costs would be something that people would measure right away as 60% as 60% folks, as well as a heater, are you listening? As well as as a much more comfortable internal environment, ventilation to take would be functional in terms of taking care of air movement and stuff like that, which you can arrange through windows and louvers and such. Right. So you got to put together a very comfortable place that anyone would be very happy to live in. And affordable. And affordable. That's the best part. Affordable. And your sweat equity can go into it in terms of participation in the construction. Then it's really affordable. Yeah. Right. And the weight looks like it's going to be a bit lighter than a conventional structure. A little bit lighter than a typical wood frame house, and I'm glad you brought this up because also sharing the same electrical conduit is an all thread that actually goes into the foundation, comes up all the way through and connects to the roof. So now we tighten it down, think head bolts on a car engine where you're pulling the head into the block. Now we're pulling the lightweight building material, making it really heavy after you've lifted it. So you got basically through bolts all the way from the foundation to the roof structure. Yes. And we pull the roof into the ground. The only way that roof's coming off is the whole thing's got to come out. So the ground has to go with it. Exactly.  So that's great. So we've got to figure out a way to get a demonstration unit here of some kind that people can participate in, can walk into, they can even help make and have a celebration here about low cost, affordable, but not unpleasant, I mean totally comfortable accommodations for people and take houseless people and make them not houseless people. But not in a way that is industrial, in a way that's very friendly, in a way that's very comfortable. And what you provided here is something that does that and is also green, which the world and the state ought to care about. We also found in the Haiti house that the people that built the house took more pride afterwards because they participated in the construction of it and they take good care of it. Well, you know, I was thinking about that. I wish Mike Amoda was here and we'll get him on, we'll have to meet him sometime, but Mike Amoda is helping me on the drone world in that area. And what we find is that community involvement through educational system and the kids talking to their parents and that word of mouth education that goes on is an essential part of any new technology coming into the business. Same thing would be true here. If we have people involved in fabricating their own structure and kids, I'm just imagining here, but kids in the educational system can go through architecture training or something or even software training and they could end up in the design side of this business in the shop. I'm glad you brought this up. In our overseas factories that we're putting in different continents, there should be five or six, maybe even more next year going in. They're actually creating an alliance with the local technical college or university or at least schools and part of that process is not only teaching architects who are not being taught in green materials. It's also teaching application of materials, how to color it, how to create different finishes in it. They will be panel installers, it could even be factory workers. We call it a mega factory that will produce as many as 36,000 houses a year is creating about 6,000 jobs in the field. Jobs and local employment and a local high-tech industry can actually follow from this and something we need here. So you don't have to cancel the rest of your vacation. We've got people at the community college to talk to. We've got people all over the city council to talk to. So Andrew, we'll get a hold of Marilyn and have her alter your reservations. You can return in February rather than in December. But thanks for coming on the show today. It's been a fascinating education for me and seeing how this all works and it all ties back to our good theme on this show which is where the drone leads. In this case, the drone leads to a really incredible reconstruction capability which could also be a primary construction capability in the first place. Thanks for having us. Once again, Andrew, thanks for coming on the show.


OK, I think we should start. So welcome, everybody. And we're going to talk about exploring the Linux kernel source code with Eclipse and QT Creator, actually. So my name is Marcin Bies, and I'm running a small, very small engineering company in Poland. And the first thing we do, or I do, are projects, like debugging some driver problems. Well, the video is playing too slow, for example.  So this kind of task needs to just jump into the driver and fix something, analyze something, and so on. And then I'm providing the trainings, and particularly the Linux trainer development. So this is the training the engineers come to learn about how to debug and try the device drivers. And actually, we need a proper tool for this. So the problem is that the Linux kernel contains the vast amount of codes, like the millions lines of codes. You can easily find how much is it. Well, it consists of, actually, the kernel mechanism, which are, well, very fine-is and very complicated code. There were some topics discussed in the conference, like the interrupts and so on. So it's complicated. There are functions that are or are not called. Yeah, you need a way to see this. So all the virtual frame systems, IPCs, RCU, and all the frameworks are here. And we have the device drivers code. Well, we do a lot of programming here. Well, device drivers is mostly the boilerplate code, like put the value into the register. There's no place for fancy algorithms. Actually, I have to know the frameworks to use the frameworks. Well, so the first problem is I have to have a quick look into the kernel source code, into the frameworks, into the drivers. And actually, what I see depends on the kernel configuration, kernel version, and sometimes the compiler version. So that's the first problem. And the second problem I have is to introduce newcomers. So I've got the engineers who were probably before working on some embedded systems regarding microcontrollers. And they are used to the idea that they have the IDE, and they configure the project, then then upload the project and write it to the microcontroller. So it's hard to tell them it's not possible in Linux by default. So we have the problem. So the solution, of course, is to use VI or Emacs, which are both great IDEs or editors. They can be configured using script. Actually, Excubran CTAX supported in the kernel. There's also a C-scope text-based tool to view, to get into the source code. Well, actually, I used both of these. But, well, people nowadays are used to using mouse, clicking, and having multiple windows. So yeah, that's nice. But well, it doesn't get them the idea of the newcomers. There are some tools like AXR, Linux cross-reference. We have a site. Works. So you can see all the source code here. The problem is the source code is not configured. It's just a source code taken from kernel.org, put here, and everything in indexed. So if I click on the symbol, and the symbol is defined in multiple architectures, I will just see the disambiguation window instead of the proper definition. And sometimes I do not know which one is it. It also requires the access to the internet. Of course, you can configure your local copy, but well, it's quite complicated. So we will cover the two solutions, the Eclipse and Qt Creator, starting with the Eclipse. There's also KDevelop, which actually is the great idea and there's a plug-in for the Linux kernel. But well, Eclipse and QDevelop has the marketing is rolling. So Eclipse is the base of almost every IDE now. So I get people that were working with WindRiver, DS5, times this time storm, everything is built on the Eclipse. So this is the last solution. So we can have a commercial IDE, pay a dollars, usually per seat. And here's the example. It's not advertisement. I'm not affiliated with the company, but well, it's Eclipse-based. I used it in the project. It includes proprietary plugins, which Eclipse license allows, and it's licensed per seat. So you can just pay dollars and have a one-click install of the Linux kernel project. Yeah, so that's all for today. Thank you. No, it's a joke. We are going to do the same using the open source tool and it will take something like half an hour. Every time you have to configure the project, it takes half an hour or five minutes if you know what to do. Okay, so yeah, something like this is our goal. It's similar with various and other commercial IDs. Okay, the first thing, the Eclipse. Eclipse has multiple versions. Actually, I've got one in Ubuntu. I used the one where I was using the Ubuntu 14.04. This is Eclipse-free eight. Now I have Ubuntu 16.04, and it's also Eclipse-free eight. They do not update this. Probably Eclipse is more Red Hat-affiliated. I don't know. So yeah, we can use the newer version. There's a Kepler, Luna, Mars, and Neon. Well, this is important because actually for basic kernel and external models configuration, you can use any version of Eclipse. But some fancy features begin from, for example, Luna, which has tracing tools integrated and Mars and Neon. And there are some additional problems also. So the first thing is to download the Eclipse. Set the proper Java version. In case of Java, you may have in your distribution multiple revisions installed. So there's updates, alternatives, minus, minus config Java to select the one. Then just untar it and run it. Actually, there are two hints. First of all, if you set the path or include all the environments created by Yocto, build system, for example, it will be easier to configure because all the environmental variables will be here for use. Then, well, unfortunately, in my Subuntu Eclipse is looking awful, so it's totally crap how it looks, how the interface is shown because it's using the SWT in Java and they're using the GTK3. Well, we have to force it to GTK2. It looks better. I have tested another distribution since the problem is not here. Okay, so the basic idea. The kernel sources has to be configured before we will start to load it into the IDE. At least initial steps of build process has to be executed. Well, actually, there are lots of build step depending by the kernel version make modules prepare would be the good one. And this is because include generated is, well, generated inside of kernel module and most important thing is it contains the auto.h, which is generated from .config. Depending on the kernel version, there are another files spread through the kernel source code also generated. Like before using device three for ARM, there used to be the unique machine version for each board and well, the file containing the machine version was also generated during the build step from the text file. So the auto.h, this one is most important. Well, then we create the new C project. Easy to the point. What are the problems here? I have to set the name. This is the name of the directory that will be created in the workspace. Indexes will be stored here. Then I already have the source code. So I have to point it to a location when I put the source code. And all the project configuration will be stored in the kernel source code. So yeah, make sure you are using, not using any temporary file like if you use eclipse and to remove all your work after building. It's not a good idea to point it to the director that may be removed. If the eclipse will last file, well, the project will be gone. Yeah, kernel is built using make files. So we choose the make file project. This will make eclipse not generate its own make file. Eclipse is quite good at generating own make files or using auto.conf tools. In this case, we use the make file and set the cross GCC. And well, it doesn't allow us to set what the cross tools will be used. So what's next? Well, project is created. The indexer starts for the newest 4.8 kernel. It's some like 44,000 files. Yeah, which are being indexed. Well, make sure you are using 46 bit version of the distribution because in case of 42 bit, you will exhaust your process address space very soon. And also make sure you have more than two gigabytes of RAM because yeah, you will exhaust it also. Well, fortunately, if it hangs here, you can rerun it and all the indexer will start from the beginning. So that's nice. The project is created but well, it's barely usable. The only thing I have, I have the colored syntax. The macros are not understood. Yeah, this is just a warning. And well, if I will try to control click on this platform driver, I will see nothing. Yeah, it won't be resolved. Yeah, so that's the idea. Yeah, I try to control click and it's resolved. So at this point, a little disclaimer. Eclipse shows the seven errors here. And actually, that's because, well, first, we did not configure it yet. Second, well, the Eclipse indexer is actually a bit different from what the GCC is doing. So it will never be perfect. So the goal is to have either configured to be good enough to develop the external kernel modules, for example. Yeah, so I just modified the project settings. And the first thing we have to do is, well, everything of course depends on the kernel version we are using here. This configuration is for the newest one. So I just force include some files. So the first one is the autoconf h. You can see, without autoconf h, the top one, config of is great. We don't see it, actually it is set in the kernel configuration, so I didn't see it. After including autoconf h, the situation is better. Yeah, so we have to include generated autoconf h for all the versions of Eclipse and all the versions of kernel. The file has to be set as a preprocessor macros file, which changes the way it is seen by Eclipse. Well, there are options like include file or macros file. So this one has to be in the macros file. For newer versions of kernel, there is include config h, which actually includes the generated file, plus it defines some macros to operate on the variables, like instead of if defined, the code also can check if isModule, for example. So the isModule macro is actually generated here. Yeah, so before and after. Next thing, I also include the printk, sometimes another files. It will depend on the output. It's like the control loop. I just get the output. I can see that while Eclipse says this line is error, so I can see if it's error leads to, for example, lacking definition of VA list from the compiler, so I add file here. So those two is good enough, like 99% of the code will be readable. Next thing, Eclipse tries to be smart. So being smart means it calls the compiler, asking the compiler about the default includes, and actually it's asking the compiler just a GCC usually. It's using the compiler variable, not even the CC variable. So even under Eclipse environment, it's not fixed. So we have to turn off the provider or there's a possibility to change the name of the compiler to our cross version. Well, it doesn't matter a lot. Okay, the next thing is we have just removed from Eclipse, it's default include directories. It will not ask the compiler, so we have to provide something else. So I just run the kernel compilation in the verbose mode, v equals one, I get something like this. It's just like for every file it produces the line like this. Actually the line is, well, like two lines more than you can see on the slide. And what's important, you can see in bold, all the includes, arc, arm, include, the architecture is set in the external variable. The cross compiler is also set here. The symbol is defined, the kernel, and another symbol is defined, the Linux arm arc equals seven. So this is a configuration for the Raspberry Pi kernel right now. Yeah, you can see the compiler options and there are some more variables defined like the K build mode name, but this is file specific. So those at the top are global. Yeah, so I have to set the paths and symbols. So set proper include directories according to this and well, the good enough configuration would be to include, include, and architecturally include. Actually we have ARM here. I tested in on MIPS, on PowerPC, and also X86, some Intel Edison boards. It's more or less the same. Sometimes for some, for quite older boards like OMAPs, for example, from Texas Instruments, you also have ARC-ARMAC include and PLAT include. So this also may be include. So this is the good enough configuration for external driver development. Well, the better configuration will be to add everything from here. And also you can notice there is an iSystem directory and the iSystem directory is actually taken from the compiler, but it is not compiler sysroot. It is like, it is internal compiler or libGCC headers and well, the C standard specified something like VA ARCs definitions, VA ARCs macros and there are actually functions to process them and the variable types like VA list are defined in a compiler specific files. So other than this, may allow me to, well, see something like print case better depending on the configuration because well, the print case can be, for example, configured as dynamic print case and then it's, well, heavy use of VA list and VA macros. Okay, I set the symbols, all the versions of Eclipse that do not allow Juno, I think, do not allow me to set the symbol without value so I can just put any value for the kernel symbol. In case of Linux ARC ARM, it's actually important. It's pointing to the variant of the architecture. So I've got ARM V7 here, well, it's Raspberry Pi 3. So for Raspberry Pi 1, it probably will be ARM V6. So it's quite important because the variables are used actually in code to split the code for a different definition. So you can see that ARM V7 specifies the DSB assembler instructions, the data synchronization barrier to just make sure the variable gets to the memory and in case of ARM version six, we have the MCR, which is calling the cache controlling processor to just set it some comments. So probably the DSB is faster, but yeah, I want to see them, how actually it's implemented here. Yeah, the next thing, I said some functions are defined architecture specific. So yeah, I have to set the filter to actually remove some directors from indexer. I do not want it to go to any directory under ARC instead of ARC ARM, ARC ARM only. I also remove tools, script, and documentation. Tools and script has various tools and for example, there are some common data structures like the list, age, or something like this thing here. So yeah, that's quite trivial. Yeah, this is a nice hack if I would like to make it faster. I will just remove the index file, remove from the indexed files that are not built. All the Eclipse has the output parser. So it actually, it's somewhere here in the providers. Yeah, we have the first one, the GCC build output parser. It can parse the compiler output and well, it can see which files are actually being built which are not. Probably, I do not want to index files. I do not want to build. Well, the last step is to have a make, the proper make command to actually be able to compile the kernel. Well, this will depend on your configuration. If you have an environment included from Yachter generated SDK, probably setting arc arm and cross compile is not needed here because well, it will use this from the environment. Some environment variables can be set here. Yeah, we can actually decide if Eclipse is resetting the default environment or is adding some variables here. So yeah, the patch for example can be generated. And well, the index is to be rebuilt. And after rebuilding the index, we have something like a while rebuilding the index, we have something like 13,000 files instead of 44,000. So that's the improvement. Well, and the index will take something like 800 to 1.1 gigabyte depending on actually the kernel configuration to kernel version. So it's huge. It runs very slow in virtual machines for example. Also, it's a lot of IO here done from the Java. Yeah, so yeah, we can build the kernel here. Well, actually this one can be done from the terminal and it actually doesn't get us anything new than this. I have the console output. I will be also seeing problems probably. So the configuration is good enough. Not our problems will be removed. The good idea is to create additional make targets which can be run from Eclipse just by clicking on them. Like buildings that image building the TB or a specific DTB or every DTBS, DTB is compatible. Yeah, so actually usually I'm using the kernel project like this. I've got it configured here for the for the board I'm running. You can see there's a Linux RPI. The documentation scripts tools are not indexed and we can look at some files like, let's see, drivers. I square C, buses. For example, I square C BCM to 708. So this is the driver for this board. Actually, well, the kernel was built. I have all the fancy things like if I hover the platform driver, I will get the definition. If I control click the platform driver, I will go to the definition. Yeah, so that's very nice for learning and exploring the kernel. There are some problems. It doesn't like module in it. It's unused declaration. Well, I can just turn off showing warnings. But well, I would like to have a warning in my source code. There are also some additional things like the false. It's not defined. And actually, what's else? Okay, the false, false and doesn't like module param syntax error but control clicking on module param gets me to the definition. Yeah, so it's nice for the point and it allows me to develop the code. Well, actually, this false is intentional. We can see the project configuration here and I've got paths and symbols. I didn't add the compiler internal definitions. So the false and the VA arcs are defined inside of the compiler of GCC, actually. So I didn't add this. So it's depending on the compiler and on the version of the configuration. Yes, so for out of three kernel modules, well, the configuration is basically the same. And I have a project created here, it's not this one, LDD, this one, which is built using the make file. So if I include my Yocto environment, I can just make the project and well, the first .co module was built. It was built against the kernel placed in Linux Raspberry Pi. This is the same that the clip shows. Well, so I create this new C project. It's a make file project. I include the autoconf page, print kh. I turn off the default tool chain includes. I set the includes, include our arm include. I set the symbols. I do not define the filter here. The filter is per project and here I'm using all the includes and other things I'm referring to the project, another project in the same workspace. Okay, so I've got the project here. So it's called LDD. And you can see it will build. And so console shows everything is okay. The problems are still here. So the quick hint is do not look at the problems. Yeah, it's eclipse problem, not yours actually. So that's the idea. Eclipse has the feature here. I can define for the LDD project another targets like clean or deploy. And actually clean and deploy have to be defined in my make file. So deploy will SCP the module to the remote system actually. Yes, so the result is quite nice. Ida configured to able me to configure them to work on the kernel project. I can hover it, the mouse button over the variable. I can just control click the variable. Yeah, so actually that's the demo. So yeah, if I deploy, I just didn't make deploy. It was copied to the target. So yeah, I'm loaded here and I can just in smot first KO and Dmask tail shows that loading first is actually done. So this is for developing the kernel driver. Eclipse has also another nice feature. Well, my Raspberry Pi system here was built using using Yachto and for a quick demo, I just set this called the extra image features to include tools profile. And you can see here. So the kernel configurations allows it. If the config trace points is enabled, I will get the ability to use the LT TNG. So let's LT TNG create a configuration. LT TNG is the kernel profiler which is built well out of kernel. And that's actually one flag in Yachto here. So running LT TNG create, let me load the models for me. It's using the K probes. It's using the F trace to the various traces. I can LT TNG enable event kernel all. Oops, sorry, too much LT TNG, yes, this one. Our kernel events, LT TNG start. Yeah, so system is saving the trace now. So the two is Raspberry Pi. Let's ping fluid for a moment. And now I got LT TNG stop and LT TNG destroy which will actually save all the data and unload the modules. The session is created here, LT TNG traces. So let's copy this traces, sorry. And I've got it here. And actually Eclipse already has a trace compass included. So we can change the perspective here. It's open perspective or window open perspective. I have the LT TNG kernel perspective. And I'm creating the new project, new tracing project here in this perspective. Let's give it to whatever name, just a test. And actually, yeah, in the workspace the project is created here. So I've got traces and I will open the trace. And actually I just copied the file to my home directory. So let's see this LT TNG traces. There is an auto here with today's date and I'm opening the metadata. Okay, so Eclipse should open it. It's 7.5 megabytes. Well, it became quite huge in the moment. And you can actually see an arrows here. What is calling what? And well, the problem with such traces is, well, they're good if you are debugging some problem with some deadlocks or some processes or some read time applications. They're not so good if I just randomly grab it and show it to you. So actually for an example I have something like this. Yeah, we can switch to the resources here and see the interrupts and what the CPUs are doing. And actually this is an example of, well, why the soft ear cues are good. And so you can see the CPU is running the IRQ here and the IRQ line is locked. And then it's offloading the processing to the bottom half. So this amount of time the CPU is processing the data but only this amount of time the interrupt line is locked and it doesn't accept an interrupt. So yeah, so you can see how the code from the top is running. It's from IMX6 ultralight, I think. So the interrupt processing. So this is also good for profiling and it's a good learning tool. Okay, another thing the Eclipse can do is being the GDP front end. So you can use the JTAG to actually trigger the CPU and connect to board. Or you can use the KGDB. KGDB has to be compiled. KGDB is using the serial port in polling mode. So GDB is connecting to the kernel here and this kernel only starts and hangs on KGDB. We need a serial console to do this. Actually, there is one exception. Up to the point, we did everything just using Eclipse without installing any additional plugins. Now we have to install plugin but well, this plugin is usually the part of any commercial ID based on Eclipse and it also is from the standard repository. So it's a GCC, GDB hardware debugging. For connecting the debugging well, perspective to external process, external device. So well, the thing we would like to put for the debugger's application is a VM Linux. So actually, what we are running in Linux Raspberry Pi is Arc Arm Boot Z image which is compressed image and in VM Linux, I have the L file which is linked during the build process and then well, the parts of this L file are cut, compressed and here the Z image is built. Actually, the good idea is to configure the kernel with debugging symbols, well, I can see the size for the VM Linux does not. It would be like 10 times more for the VM Linux. Well, Z image would be the same. So I'm including the VM Linux. I'm setting the remote debugger as TTY USB zero and make sure the user running the Eclipse has access to the TTY USB zero and actually it's quite spectacular but it works. But well, this climber, the KGDB is very good for presentation. It's not so good if you are trying to do any actual work with it. Well, usually something hangs. Usually you have to use the $30 USB to TTL Serial dongle instead of 50 cent one and so on. So it's very fragile. Actually, it's like one each five times I'm able to get to the screen here if doing it's live. So actually, you can see it's waiting for KGDB breakpoint all the time Well, in JTAG I have the stop line so I can just stop the CPU or break the CPU and see what it's doing. In case of KGDB, well, everything is pulled. So kernel has to pull me, pull the GDB and GDB has to send the command. If kernel doesn't pull, well, I don't see anything. So things like step into, step over here are actually working like setting the breakpoint after the next line and then running the code. It should fall into breakpoint or sometimes not. Yeah, so it works better with JTAG, but well, the more expensive the JTAG the better the idea. So this is basically what can be done using the clips and well, I actually use it for my project and for the training and well, people, especially those used to Microsoft tools are very happy, like it's five, after five days of running terminal commands, they have, well, we can work like this. Yeah, so that's the one. So in case of Qt Creator, well, the background is the same. You also have to get the kernel configured, building in verbose mode to get the includes. It's just the configuration is a bit different. So you do not have to click so much. So I get the Qt Creator for a Qt open source bundle, of course, from the installer. And we have something like projects. Mostly there are Qt-based project. This tool is designed for Qt actually. And this is quite counterintuitive. I have to import existing project here. So I'm importing existing project, putting the name and location where my kernel sources are. And then I have the file selection. So this is more or less the Eclipse filter. Well, it's nicer here. So I just, well, turned off every architecture from Arc. I'm not using. I also turned off every Mach I'm not using. This configuration example is for Bigel Bone Black. So documentation tool scripts also. So this one, yeah, so it asks me if I would like to add it to Git or any other build system. Then the parsing cc++ files starts. It's actually doing it every time I start it. And well, it takes like the 10th of the time that Eclipse uses it. And well, the amount of data is not so big also. Then I have to do the more or less same steps. Define includes, define symbols, and well, exclude the directors. There's no clickable interface here. I have three files created. The project includes project files and project config. Actually, I do not touch project files. It was set here. So I just type the include paths. I just type into the config the symbols. I missed Linux ARM Arc here, as you can see. It's also needed. I can force include some files instead of including the directories. And well, that's it. The project is configured. To compile it, I also have to, in the project setting, define the cross compiler. So that's the idea. And well, it's more or less the same as in Eclipse. Well, in Qt Creator, you have to control click on each symbol while the hovering doesn't allow you to do this. Okay, so yeah, that's all. I fit it in time. So yeah, so for the end, both Eclipse and Qt Creator can be used. Well, Qt Creator is lacking things like trace compass. You have to use the external application. Both remote debugging can be configured, but it's well, KGB is unstable with the setup like this. And well, it gets the people, the boost in learning how to develop the kernel drivers and do they work? So yeah, the tools are very nice and please use them. So do you have any questions, comments? Yes? Yes, I have auto completion for the code. So let's see, for the code and for the modules. It's like the same, yeah? So let me get the modules so I can just, yeah, loading first and let's do something like well static struct timeval and let's save the time the kernel was. So it will be just no get, do get time. Yeah, that's a good do, thank you. Do get, actually it doesn't work. Get time of day, yeah, it works. Timeval and let's, oh yeah, static, there's an error here, so static students start time. So we have a do get time of day start time. It shows me this, there's also a feature that if I just do the control shift N for the symbol, it automatically added the Linux timekeeping H. So that's a great feature. There's like tons of well shortcuts in here. Yeah, so let's do get time of day here and let's struct end time and let's do get time of day of the end time after a percent LD seconds and it should be end time. Time dot TV sec, sorry TV sec minus start time TV sec. The small problem it doesn't save before build so I have to type control S, I did it automatically actually. It can be configured. So let's build, let's deploy and now we have a module that, yeah, so ints mod first KO and after a while if I run mod this, it's, yeah, it's three seconds. Yeah, so this is fast kernel development. And you can do it on the modules and you can also do it on the kernel source itself. Depending on the version it, well the Eclipse may have some problems. It has the problems with module init, module exit. It also may have some problems with print K, for example, which is not so fine. And well, depending on the kernel configured, depending on the version. If you said the dynamic print case to be enabled, it doesn't like print case. Once I have also the problem of container off, for example, which is not so nice. Let's see this version. Oh, sorry, this is the user space code. Let's see this example. This example is using the container off and actually, yeah, I can see all the container of magic. Yeah, the container of allows you to get the pointer to the structure containing the structure you have the pointer to. So it's used widely. Okay, so, any questions? Yes? Well, it's required to build the kernel, but actually in case of Eclipse, the kernel is built and we just want to see this. So Eclipse has to do the initial steps of building actually, yeah, so to parse the source code. So we include the outer conf h to make it see the parts of files that are, well, depending on the defines and not see any part. So if we, for example, see any task struct, this is control shift error also, a quick search. So we can see that actually the task struct is the structure representing the process. It has something great out. So this is the config preempt notifiers and actually the preempt notifiers is the configuration option. So I got this one because I have included the outer conf h and the kconfig.h is in the newer kernels. If it is, it should be included because, well, this one is actually including the outer conf h plus defining some macros. Yes? Yes, I actually did do this because, well, Yocta is using a lot of variables. So actually I have a script. I'm running, let's lapse Eclipse and I have something like Eclipse run, yeah, for this RPI sh. And this one is doing a configuration for me. I can also set the variables in the project configuration, but, well, with all the settings that Yocta is doing, it's a mess. If I'm using the linear tool chain, the only the path is important, yeah? And in case of Yocta, actually the script is, let's see, yeah, it's setting all the variables, yeah? I don't know. The question is, is there any way of estimating the memory and time for the requirements for indexer? I do not know. It's like, run it and, try it and if it fails, just rerun it. Well, actually it's, the Java allows me to set something like Eclipse ini inside of Eclipse and I can set the memory, yeah, the two lines at the end. So XMS, XMX, the one is, yeah, when the garbage collector starts, another one is another amount of shared memory. So if it fails, the thing I do is just increase the values. You can find it in Java reference. And well, yes, please. Yeah, it's a good question. So the question is how it integrates with menu config. So the idea is that if I do the menu config, so yes, so this kernel sources are extracted from Yocta. Yeah, so I'm running the Yocta build system but I take away the kernel and configuration and patches from Yocta. Yes, so it's separated. So if I make arc arm menu config, well, this is the Yocta tool chain, sorry. And the car says it's not here. Yeah, so if I just run it in the shell, let's paste it here. If I change some option, let's device drivers something. Well, the dot config was changed. There's a dot config, dot config, dot alt. The value is set here, but while it will be set in auto conf h, synced by Eclipse, why I rebuild the kernel? So configure it and build it. This is the idea. You can also read them, make her to extract the steps needed for just getting the auto conf age generated. Well, it depends on your workflow. Like I'm covering the workflow when you have the Yocta recipe, you are building on the build server and you have the copy of the kernel on your local machine you are developing. So I just created the configuration so I upload the configuration to the recipe it will rebuild next time. For KGB, well, I used two main vendors here. This is the prolific, I think, and FTDI. And, well, the FTDI chip seems to work better. But, well, the best idea is the investment in JTAC, if you have to. Yes. Well, usually I leave it to the hardware guys. I'm a software guy. Actually, in case of OpenOCD, you have another program that may fail. So I personally was working with the FTDI chips with OpenOCD. They're more stable than KGB, but less stable than dedicated JTACs for a set of box development kit, for example. So it's, well, hard to estimate like this. Okay, thank you. We are running out of time, I'm afraid. So, yeah, you can get me, I'm here at the conference. Yeah, so thank you very much.