So, I think we are ready to start So, next talk is from Martin, about Debian on ARM devices. So, it's Debian on ARM devices, it's not about the Debian ARM port itself, or any of the various ARM ports I would say it's sort of a mix of different topics it's basically --- I mean, basically I often get it's basically --- I mean, basically I often get the question from users "Well, Debian works on this particular ARM device, I have a device which is like really really similar, so surely Debian should work on it, right?" And so far, the answer unfortunately was usually "no" and - and it's really frustrating for users because they don't see why. You know, the device is very much the same, so why doesn't it just work. And so, basically what I'm trying to do is to show like a little bit behind the scenes of how Debian on ARM works And there has been a whole lot of progres So I'm going to show how did it work, what are the improvements, and and how is it going to work in the future And it's all more from a develeoper perspective so, it's like, how do we support it in the Debian Installer its' like a mix of stuff, and I should say, I'm really looking at it from somebody who basically adds support for devices in the installer but I'm not like a kernel guy or anything, so there are a lot of people in this room who know a bit more about the technical details but I'm not going to really drill down really deep down anyway But if I'm incorrect, I'm sure that there are plenty of people that will correct me. So, where do you find ARM? So it's pretty much everywhere these days, I mean... Pretty much every phone has an ARM chip in it All those "Internet of Things" gadgets are ARM-based You have NAS devices, and that's really the area I used to focus on those small boxes where you basically add a hard drive and most people just use it for storage, but it's actually a full PC where you can install Debian on it so I always found that to be very interesting and nowadays you have a lot of development boards And I'm not sure whether "development boards" is the right word Because when I hear "development boards" I think of it as really expensive, Like 5K for boards or something But nowadays you have those, maybe, a better board would be like bareboards Like "Raspberry Pi", like basically it's just the board it does not come with a case, you can buy those as well and it's like 30 dollars or something, you can get And that gets pretty much where most of the excitement is going for Debian users at this moment And that can cause a lot of frustration And everybody says that ARM is going to be big on servers and I think that's something we ar going to see But right now, again, it's a little bit frustrating How does it work as a Deban Installer There are basically two ways of installing on those ARM Pi devices So the, like, historic, that we normally would be to install on, like, ascreen can be a serial console, and then you just download via the network and then you just download via the network from a CD image or wherever, But the other method, which we actually use for those net devices was a network console where you basically ssh into the installer and you perform the installation via ssh and that was really the only way, because those mass devices don't have any I/O, so I even in there, you can it's just a serial console, most of them That's something we didn't want to require from the user And the other thing that's coming through, I think that it's basically cool that was announce today, screen support, so basically so you can have multiple sessions with in vi, which can be useful if you have an open shell to debug And so, how -- And so, this is really looking back at like running Debian on NAS devices which is something that used to be really popular And the way it worked was basically that we provided an installer image which was sort of a firmware image as a lot of those NAS devices have like a firmware upgrade mechanism and so we would basically fake we would create a firmware image which the software would accept but instead of a firmware update it would actually contain the Debian installer so you would install that upgrade you would reboot, and you could ssh to the installer and obviously, in order to ssh to the installer it needs to bring up the network and there is a tool called oldsys-preseed that basically reads the network configuration from the device and then sets up the network and it can always recognize the DHCP and then the user connects via ssh again, there would be some indication, maybe you know, there would be a "beep" or maybe change the LED to indicate that the installer is ready and then, the user basically performs a regular installation with normal d-i; they don't have to do anything differently. And at the end, flash-kernel runs to make the system bootable flash-kernel is called that way because it used to support flash-kernel is called that way because it used to support like the initial device it supported booted from flash but it also generates bootable devices bootable images of disk devices so it really, flash-kernel really requires understanding of each device and our philosophy in those cases, with those NAS devices was really, we don't touch anything in the firmware, like in the configuration, so sometimes instead of changing the root device in the u-boot config we would actually hard-code that in the ramdisk just because we wanted people to go back to the original firmware if they had to if they had to send it in for repair or something and and that kind of approach really worked well so I think we really had a lot of people, lot of users running in Debian in those kind of NAS devices and it was really easy to do. You get a firmware image, you connect to the installer via ssh, and it just works, it's a normal debian-installer, the way everybody knows it, because some of the other distros they basically provide, like, tarballs and instructions so you need to partition a disk, need to un-tar it, you need to change those files, and even if it sounds simple, it's so many steps that you always... you often get something wrong and then you put the drive into the NAS device, and it doesn't boot, and you don't know why where did you make that mistake, which step and you basically have to start from scratch so Debian really provided something unique by adding the debian-installer support but anyway, that's the way it sort of used to work. Nowadays, with a lot of those bareboard it's much easier I'll get to that. So at the moment there are three different ARM ports: There is the old armel which used to be the "newer" ARM and now it's old, and one of the discussions that we are probably going to have later today on the BoF is about, should we remove that after Stretch. There is armhf and the arm64 and we get basically the question I hope to answer. If, you know, device A works, I have a device which is really similar, but it doesn't work. Why is that? So, heh, There have been a lot of changes in various upstream projects, specially the kernel and U-boot that really make things easier. So, in the past we basically had a kernel image for each platform, where a platform is basically like a SSE family and there would be a different image because ARM takes a long time to compile, there was always some debate about adding a new platform because there would be a new image flavor, which takes some time, and that was just really like, we couldn't just have one ARM kernel which works everywhere. And a lot of people didn't understand why you had a different kernel because different platforms, although there has been a lot of progress upstream, at least nowadays, with armhf and with arm64 we just have one kernel. And upstream basically Maybe some of you remember the rant by Niels about the ARM people doing everything in different ways, and there has been a lot of standarization over the years. Basically, the other thing is there used to be for each device there was a board file it was like a C file to initialize the different components, and the boot loader would pass the machine ID to the kernel, and it would load that boot file. And nowadays, there is basically a device tree in the kernel, which is a description of the hardware and it will basically compile it to, like, a binary blob, the .dtb. And, so, basically you just need the kernel image, and the .dtb, which is hardware-specific, and then it boots. And obviously, for us in Debian that makes it much much easier to support a lot of devices. The other thing that changed in U-boot, when you install the Debian kernel image, it creates the vmlinux file and also the RAM disk but with U-boot, you couldn't actually load those files correctly. You basically had to wrap them in a U-boot image and it's not really hard it's just the command initram, but all of the different devices had different load addresses, and, again, that's hardware-specific knowledge that flash-kernel needed to know. And nowadays, there is a command which directly loads the kernel, so that, again, was a step to make things easier. And the last thing which really made things easier is distro support in U-boot. So, basically, in the past every U-boot, every devices in U-boot, booted in a different way, just in terms on where would it load the file from, or what variables would it use, and nowadays there is something called distro-support which is basically a standardized way to boot a Linux distro with U-boot. There are basically two ways, either can read a config file, or it can basically run a boot script, and that's what we use in Debian, so we basically have a generic boot script which loads the kernel, loads the ramdisk, the .dtb, and boots Debian. It can use the generic bootscript in almost all of the modern devices. So nowadays, because of that, it's much more standard, and it's much easier to support those devices. So here are some examples of flash-kernel So, basically, flash-kernel has like a database of devices which it supports so it's like the machine entry in /proc/cpuinfo, and then the kernel flavors it can run and, so, this one is an old device, it still uses a board file, and it needs the U-boot wrapper, So... You are basically setting the machine ID those are the flash partitions where the kernel and the ramdisk are stored, and that's the load address for the U-boot wrapper And, now, that's a device which used to have a boot file, and which then migrated to a .dtb, so basically, heh, that was really really painful for Debian so, basically, the kernel people said "Oh, you are going to move to device tree, so don't worry, we are not gonna remove those old board files, you can still use them." And then, a few years later they realized it's really hard to keep both alive, and they got rid of the board files. And that was really painful to us because we had to migrate So you can see, here, a kernel version, and so, from that kernel on, you needed to use the new way. And one of the reasons it was painful specially on the QNAP devices is because with they actually have two different CPUs so there are different barriers and whilst the board files, the same board file worked regardless of the CPU, because of the way the device tree worked it actually needed two different device trees depending on the CPU so now we basically, you know, something that just worked, you know, it used to work fine, you just had one kernel with the machine ID at least would work, and somehow with the device tree we needed to figure out which one we need, and so [?] fortunately did all of that work. So that's actually a script that runs to figure out which device tree that particular device needs. So now, that's actually the reason I want to show this is how simpler things are these days, so this is an example from [?] platform, which uses distro-support, and the only thing you really need is a machine entry with the name, and then like the kernel-flavor, but that's the same for... you know, there is only one kernel flavor. And then, the device tree ID and, again, all of that stuff is generic, so it just uses the generic bootscript, and the generic boot path, so basically all it pretty much needs for a new device is, like, you know, these two entries, it's really really simple. So here, I just wanted to tell about the different ARM ports and... So, for me it was really hard to structure this, because those changes in the kernel and U-boot you know, happen independent of our ARM ports, But at the same time, because because the armhf world is much newer, it works in a different way. So, basically, the armel we still have different flavors but we have already combined the orion and the kirkwood into one marvell flavor, and we have the versatile one. So one of the problems we have in armel is that a lot of those NAS devices boot from flash and they only have, some of them, 3MB for the kernel, which used to be a lot of space but nowadays it's not. So that really puts a lot of restrictions so basically we disable some stuff from armel but I think that armel is really really widely used because of those NAS devices, but I think they are slowly getting old, but there are still a lot of people that use them. Like I said, it requires the U-boot image Originally, we used board files and device tree, most of them have switched over to device tree even if some of them still use board files and adding a new device requires a number of changes in the installer. So basically, you needed to map the device to the complete image and there are just there a couple of things, so basically, any one device you have to change like five different places in the installer. And it was quite confusing for people who wanted to add new devices Because it isn't really documented very well So some examples are a list of three people who are involved in that port So, Roger is someone who is quite new, and who really got involved into porting those old devices. And so, armhf is much nicer, so the majority of devices support distro-support. And the other thing we do is, for some of the devices we provide SD card images, which contain U-boot and the Debian installer So basically Vagrant maintains U-boot in Debian, and a lot of those devices are supported in U-boot in Debian. So we just provide an SD image, so you can just store it in the SD card, you put it in and, because of the distro-support, it just loads debian-installer, you do the installation, reboot, and things just work. So I think it really has gone ...Come a long way. So nowadays, adding a new device requires much fewer changes than it used to be. Because as everything uses the same, like, one kernel flavor, you don't need to patch all those different places anymore, and because of distro-support, it just works. You can pretty much use the generic bootscript. So, arm64. So, the problem until recently is that there simply wasn't any hardware that people could buy. And that's changing rapidly now [?] We have for example the Raspberry Pi 3 which uses a 64 bit CPU but the software it ships is only 32 bits, but most of the work is now upstreamed to run 64 bit on it and there are a lot of devices which sort of work but not quite but anyway, so the idea for arm64 is that a lot of the new hardware specially on the server side will use UEFI, and so you basically just it just works like a PC. So you have Grub, you can run debian-installer from Grub and you get Grub afterwards. And just boots like a PC, and Steve has done a lot of work in that area, And in theory, it should just work out of the box. So, if it uses UEFI, we don't need to add anything. It just works. There's nothing to do. At least, that's the theory. So, what I found is ...I made a disclaimer, so ...Assuming the kernel you know, kernel support and stuff... ...To be honest, right now, that's a big assumption. So I've been playing with a few 64 bit ARM boards and basically, what I found is there is some support upstream, so I can boot a kernel, but, oh! There is no USB support! there is no Wifi support! So I cannot actually do anything with it. But I can get to something that because arm64 is still farily new. And there is a lot of work going on upstream to support the various platforms. So, I think over time that's really going to be much better. Even though that UEFI idea is there in reality, we are going to see different solutions for arm64. So we are going to see UEFI, in particular on servers, but we will also see U-boot. So a lot of those bare boards they have U-boot. And, so, right now we can use the distro support and I think that it works pretty well. But one thing that SuSE has done so, they just had the same issue, they want to support all those devices but they just want to use the same mechanism everywhere, so they have actually implemented UEFI on top of U-boot, so you can basically use U-boot to load Grub and then you have Grub so I think that's something we need to figure out; do we want to stay with distro-support? do we want to use UEFI on top of U-boot? is that something we want to give users the option? And then, Fastboot is something used in the Android world and a lot of those, like, I see a lot of both bare boards, but also game consoles and stuff, which which are sort of Android-oriented, but which can also run normal Linux, and they will use like Fastboot or something. And there are tons of other bootloaders out there But I would definitively say, like, the good ones are UEFI and U-boot So, I gave a similar talk a few weeks ago and turns out, a lot of non-free firmware, like, "can I run that stuff, you know, purely with free software?" ...And... So, the thing with ARM is that there are a lot of different platforms I'm not sure about all of them, but some of the platforms I looked at, yes, you do need some... There is always something propietary. So in a lot of cases I see where you have you use the proprietary first-stage boot loader, so the Raspberry Pi is an example, so, I don't actually have a Raspberry Pi, but the way I understand it is you basically put some boot files in an SD card, and they are proprietary, and then they load the kernel. Or in case of [?] supported in Debian, the first stage boot loader would basically be used to run U-boot, and then we could use U-boot, and the U-boot support all of it is free software, but the first stage boot loader isn't. I have had, there are some people working on a free replacement for the Raspberry Pi, though. With nVidia Tegra, which is something I'm working on at the moment you also have a tiny first stage boot loader, but then again, you have U-boot, which is free, and in that case, you also have some firmware images for the GPU and for other stuff. For the Dragon board, The Dragon board sounded really interesting because it actually has a a graphics chip which can be used with free software, so that sounded pretty cool, but again, it has a proprietary first stage boot loader, and then there is a second stage boot loader which is actually open source and then there's actually a U-boot of that, and then you have some binary blobs which also need to be installed in flash to work properly On the Marvell side, I'm not really aware of anything. I have never needed to flash anything proprietary, but I'm not sure how U-boot gets started on Marvell, so maybe there is something. So the future is all... So NAS devices are like I said, that's something that's really been popular in Debian. Specially on the QNAP devices, but the problem is, so, QNAP... so the devices we currently support are pretty old nowadays, and they have some newer devices, but they are not properly supported in the upstream kernel. So, I have no plans to support Debian on those. I recently did some work on Seagate NAS devices which are actually pretty interesting but again, they will go out of date already, and then there's the whole 64 bit ARM so I think people are really waiting for arm64 servers I think there's going to be a whole lot of work on that area. And then, there are all of those development boards Raspberry Pi, Pine64, Allwinder, Basically, all of them sound exciting, but if you look at them, all of them have some upstream issues, so it's... It is really quite frustrating at the moment. But I think things are really moving [?] And then there's this 96Board initiative, which is actually done by Linaro, and, so, Linaro supports Linux on ARM, so you'd think, "wow, there are some really nice boards coming out!" and they differentiated between the consumer edition and the enterprise edition beside, I bought some consumer-edition boards, and it's really horrible. So first of all, I had to spend like half a day just putting the components because it uses, like, a nonstandard power supply, a nonstandard serial console, so finally I found all the pieces I needed, and then I was expecting, well, it's from Linaro! Surely everything just works upstream! But it doesn't. It's like yes, I can boot the Linux kernel, but there's no USB, there's no Wifi, no nothing... So, yes, that's a little bit frustrating. On the enterprise edition, I think that looks more interesting. You know, that's more standardized. But again, there have been some delays. [audience; unintellegible] Yes, OK. So that would be interesting to see. So, the questions that I actually have nowadays is, so... Because of those changes, because of having, you know, a mode of U-boot, most of those new devices having a U-boot with distro-support, having a kernel which, you know, one kernel image that works on all of those devices which are supported, it's really easy to support a new device? As long as it's supported by the kernel. But, at the same time, I think it's a big challenge for Debian. Because right now, if you look at armhf, we basically say, well, hint the installer, and if there's a device tree, it's probably going to work. But, what does that mean, right? And... which really work, which means, so, we have Vagrant having U-boot support in Debian, we have people testing debian-installer, testing the Debian kernel, so we have devices which really work, well supported, and then we have some devices on the other hand where, well, yes, there is a device tree, but no one has ever tried it. And at the moment, we have no way for users to differentiate those use case... Those support levels. So I'm wondering if we need like a table, somewhere where maybe some support levels, like green, yellow... red? Where green is, "yes, we have Debian people who have testing that stuff", yellow would be, "well, we have heard some report that it might work", and green is, you know, doesn't work, or we haven't tried that it works. Maybe we need something like that. But right now, I see from users "I want to run Debian on my ARM device", and they don't know if it's going to work. Yes, then... [audience; unintellegible] Yes, so Ben is saying we also need to track what the earliest and the latest kernel versions that there have been tested. So I think we really need to come up with some criteria to have, you know, define those kernel support levels that indicate that And yes, the other question is related to, with all those boards, how do we actually test them? So, I keep -- it's really... remember [?] which is great, but also acknowledge those boards, they are so cheap! so it's like, "oh, there's a new board! It's £30! I'll just get it!" And then we have, like, those piles of boards and realize, well, I don't have time for testing all of that stuff! I think that's going to be a real challenge. hundreds -- I don't know, it's really hundreds of boards coming out. How do we support all of that? So, I think that's the question I wanted to raise, and maybe something we can talk about in the BoF But yes, I'm obviously open for questions now. [James / purpleidea:] Hello. So, don't quote me exactly, so, I believe RedHat has this problem as well, obviously, I mean, they are obviously more interested in the ARM64-only server stuff, but I believe the way they are going about it maybe it's something could collaborate on is, they are trying to make sure and push all the vendors to be standardized because, as you pointed out, it's just not, it's crazy with all the different device tree differences and so on, so I believe their strategy is to work with the vendors, and require everything to be upstreamed, and no device tree specifically, to push everything to just boot with one kernel, and so on. So maybe that could be sacrifice a few of the shitty boards, but work with the vendors that make the ones that are upstreamed. [Martin:] Yes, so I may be mistaken, but as far as I know, RedHat basically says, "we only support UEFI and ACPI" and that's fair enough, and I think that works for them, because it's just the server world they care about, but I think in the case of Debian there are so many boards out there which don't need those specs, and we sort of live, like, in the "real world" so I don't think we can Well -- I know it's different. I mean, if RedHat wants to target the server people, like, the people which give money that's fair enough, that makes sense for them but Debian, we run everywhere so I think we need to support all those weird cases as well. And maybe if it gets too weird, I mean, I put in some work in the Dragonboard, and then I realized, am I actually spending the time because no one, like, I have heard from no one that they have that board, I mean, like [?] for the Raspberry Pi, but I have heard like, pretty much no one has the Dragonboard, so maybe, ...it's not worth my while, but if there's a board that people want to use it, I think we should support it in Debian. And we do have the infrastructure so we, you know, it doesn't have to be UEFI and ACPI, we can support other devices, because we have done it before. But I definitively agree with the point about getting more standardization and that stuff, so I agree, yes. And the whole distro-support in U-boot, that has really made things easier for us. [Phil:] I may begin to say some of the same things Steve has, anyway. Steve]: So, yes, on the ACPI versus DT thing, it's more a question of the quality of the implementation of the of the firmware, and the upstream support that is... DT isn't fundamentally worse for upstream support than ACPI is, RedHat are have some reasons [?] of sensibility, but then, it's not fundamentally, it doesn't fundamentally stop it people supporting it, specially a community distro like Debian. I was also going to ask Martin, have you talked to people like kernel CI about testing and coverage stuff? [Martin:] Yes, not really, but I think there are some things we should look into. [Steve:] Yes, because the whole -- Obviously, making sure the kernel boots on random hardware stuff, is exactly what that's doing and there's at least infrastructure there that might be nice to play with. [Martin:] Yes. I think that's a good idea. [sledge:] So, on the whole 96Boards thing, sorry! Most of the engineers involved are totally aware of how [?] it really is. We tried to tell management they would -- They don't want to listen. Umm.. So, there has been a huge amount of pushback saying, you know, "we're Linaro we should make sure this is all upstreamed". [Martin:] Well, I am aware it's just, Linaro has a really good brand, so people expect, you know, when I saw 96Boards it's Linaro, obviously that stuff it's going to work! and that's why I was really disappointed. [Steve:] One positive thing there is that the first DE board the SoC does basically work upstream already with current upstream kernel it's not like there's some patches still to go in. Apart from the PCI, it should basically work... So, hopefully, hopefully, that's going to be a much less spectacular story than the consumer-edition boards have been. As they are unfortunate. [Sledge:] The first EE board the [?]board, is due to start shipping really soon now. There are examples already out there with engineers for validation. Literally, we are talking the next couple of weeks is what I have been told. That's the first 96Boards I would actually spend any time on at all personally, the CE boards are a joke. I forgot what else I was going to say. Oh! Yes! Then... I guess we will go through a lot of this again in the ARM BoF later on in terms of which things we support. We will carry on with the discussion. [Vagrant:] Um... Is this working? Yes, so... We have got all this great support for distro-boot command and U-boot, and now we are starting to get to UEFI emulation in U-boot, so even for boards that don't have UEFI emulation-- UEFI support, if they support U-boot, it might work although that means all the standarization we worked towards, we throw it away., Meh! [Martin:] Yes, I think that's something we need to figure out, which one do we want to standardize on, or is that something we want to leave up to the user. but yes, I mean, I think one I mean, I guess it was so confusing, because there are like all those different ways, but what I really wanted to show is that things are getting much more standardized and much better. So, it used to be really pretty horrible, and nowadays, you know, if a platform uses a modern U-boot, if it has upstream support, then it is actually pretty trivial to add Debian support, and I think that wasn't the case in the past. I think Ben had another one? [Ben:] So, I'm [laughs] I'm interested to know how much how much interest there is among the ARM porters in graphics support. GPU support, rather than settling for dumb framebuffers. How many... How many of these boards... Quite a lot of these boards do have HDMI and I don't know to what degree they are actually supported. Are any current projected work which definitively is using the GPU on ARM system, and what's in Debian, is the Debian base system does Debian... What's in Debian does not support GPU. [Martin:] So, I can't speak for Vagrant... I have personally done some work on the Tegra recently, and nVidia is actually working upstream on [?] so I'm really interested in it but I think that a lot of the board used, there's money GPUs I'm not sure would be ...you can get a [laughs] can we get a microphone for Steve? [Sledge:] So, on the Mali front, there has been a lot of haste where we have been scared of releasing any of this in any way, shape or form, without huge [?]-relays and all that kind of stuff. So it's not really distributable. Even, at all. We are a long way of it being releasable free, There are packages coming that we should be getting shippable in non-free at least if you want to get full acceleration on your Mali stuff. Hopefully, that will solve some of the problems There is a lot, there are a lot of people in [?] who are very very keen on supporting it properly, free and upstreamed. It's a long fight. It will take a while. I mean, most of the Mali driver developers themselves I have spoken to, would love to make it free. It just comes down to legal people being scared. [Tobi:] Are there some questions left? [Martin:] Well, thanks for coming! And there is going to be the ARM BoF later today, and Vagrant is also going to talk about his experience about running a build network on armhf boards.. Thanks! [audience clapping]