WEBVTT

00:00.000 --> 00:15.000
Welcome to a talk about USB 9PFS, let's do a short introduction and a good one.

00:15.000 --> 00:20.000
My name is Michael Graschick and here's my colleague, Ahmed, Patum.

00:20.000 --> 00:25.000
We work at Pengentronics, a company located in Hillsheim.

00:26.000 --> 00:32.000
We work mostly on embedded tasks for companies as we do consulting,

00:32.000 --> 00:36.000
drive a development graphics and system integration.

00:36.000 --> 00:43.000
Actually, this picture was taken in a special time once in a year

00:43.000 --> 00:49.000
when all members of our companies travelling to one place

00:49.000 --> 00:55.000
and then we just break all our development for the customers and talk about issues.

00:55.000 --> 01:01.000
And then we try to figure out what could be possible solution to get something better done

01:01.000 --> 01:02.000
and something like that.

01:02.000 --> 01:07.000
And this leads me to the first question issues.

01:07.000 --> 01:16.000
Do a lot of you would network embedded devices over NFS, how many of you?

01:17.000 --> 01:21.000
Do you sometimes see issues by doing this?

01:21.000 --> 01:26.000
For example, not the right privileges of your root file system,

01:26.000 --> 01:28.000
or the root file system is not suitable.

01:28.000 --> 01:32.000
How many of you would say it's a common issue?

01:32.000 --> 01:34.000
Yeah, perfect.

01:34.000 --> 01:39.000
And sometimes do you have the issues that you have to know network interface

01:39.000 --> 01:44.000
on the embedded device available because you are developing on the network interface.

01:44.000 --> 01:46.000
Perhaps a switch or something like that.

01:46.000 --> 01:49.000
Okay, like two, three, four, five hands.

01:49.000 --> 01:53.000
Yeah, always use otherwise because application needs it

01:53.000 --> 01:57.000
and you need to debug something because it's running.

01:57.000 --> 01:59.000
You know, it's a user space.

01:59.000 --> 02:00.000
Okay.

02:00.000 --> 02:04.000
Does anybody use NFS in some situations?

02:04.000 --> 02:06.000
Okay, it's not so many.

02:06.000 --> 02:08.000
But we do.

02:09.000 --> 02:14.000
We now do an MPSF over is a USB-get at transport.

02:14.000 --> 02:20.000
Some because a lot of embedded devices have an USB-get at port available

02:20.000 --> 02:24.000
while the Ethernet port is not available.

02:24.000 --> 02:28.000
And so what we thought about is to the way around

02:28.000 --> 02:31.000
we connect the get at port to and host.

02:31.000 --> 02:36.000
So it's exposing the file systems that we want to see

02:36.000 --> 02:40.000
the embedded device over USB.

02:40.000 --> 02:44.000
This is a little bit tricky because usually you see the other way around

02:44.000 --> 02:46.000
when you plug in your phone.

02:46.000 --> 02:52.000
It's actually also a get it and you see the file system of your mobile phone

02:52.000 --> 02:54.000
but it's a different way around.

02:54.000 --> 02:58.000
So you see the file system from the hard drive on your mobile on your desktop

02:58.000 --> 03:00.000
in the embedded device.

03:00.000 --> 03:04.000
This is actually the preferable way to debug the system.

03:04.000 --> 03:10.000
So a lot of you usually see an MPFS in the wide

03:10.000 --> 03:13.000
when you develop, for example, QMO.

03:13.000 --> 03:15.000
You have an embedded device.

03:15.000 --> 03:18.000
Your application stack could run in QMO.

03:18.000 --> 03:24.000
By booting the root file system, you exported by the WITIO

03:24.000 --> 03:30.000
and an MP device interface that is implemented in the QMO application.

03:30.000 --> 03:35.000
But there's a lot of other client transports in the Linux kernel.

03:35.000 --> 03:40.000
For example, the TCP stacks, and it's usually also possible to boot

03:40.000 --> 03:43.000
and embed a device over an IP.

03:43.000 --> 03:47.000
This is located in the file descriptor transport.

03:47.000 --> 03:51.000
And then the, like I mentioned, the WITIO interface is available

03:51.000 --> 03:57.000
in the kernel or there are different other specialties for data farming

03:57.000 --> 04:00.000
and RDMA or upset.

04:00.000 --> 04:04.000
The exported part, I was talking about the client part.

04:04.000 --> 04:09.000
The exported part that is exporting the file system on the host,

04:09.000 --> 04:13.000
is you can use two open source applications like NFS

04:13.000 --> 04:14.000
Ganesha or Diodes.

04:14.000 --> 04:16.000
NFS Ganesha is a little bit more complex,

04:16.000 --> 04:18.000
and you can do a lot of NFS and stuff.

04:18.000 --> 04:21.000
But here, Diodes is a simple way.

04:21.000 --> 04:26.000
And it's easier to configure and run for a pass.

04:26.000 --> 04:29.000
So what is an IPFS actually?

04:29.000 --> 04:32.000
It's actually only a protocol.

04:32.000 --> 04:37.000
It's a representation of data on another namespace.

04:37.000 --> 04:41.000
And for this, you can, as I said,

04:41.000 --> 04:43.000
there are different profiles.

04:43.000 --> 04:45.000
It's actually from the 90s.

04:45.000 --> 04:46.000
It's pretty old.

04:46.000 --> 04:52.000
But they defined the L profile extra for Linux.

04:52.000 --> 04:57.000
So you could map and hold file system over the 9PFS

04:57.000 --> 05:00.000
with other operations that are specified.

05:00.000 --> 05:04.000
Flash, more, read files and clunk and everything.

05:04.000 --> 05:07.000
Sticks is another name for an older implementation.

05:07.000 --> 05:09.000
That's an interesting story about it.

05:09.000 --> 05:11.000
You don't have to export file systems.

05:11.000 --> 05:13.000
You can also export different things.

05:13.000 --> 05:18.000
And in that case, Sticks was used by LEGO.

05:18.000 --> 05:23.000
Sticks on a brick is a robotic system from LEGO,

05:23.000 --> 05:31.000
where you can expose the motors, sensors and motors

05:31.000 --> 05:35.000
and everything over the 9PFS.

05:35.000 --> 05:39.000
And they use a transport of infrared.

05:39.000 --> 05:42.000
So they transport it to the host.

05:42.000 --> 05:45.000
And then you can control in the rooms, the robots,

05:45.000 --> 05:47.000
and they use 9PFS.

05:47.000 --> 05:50.000
It's only another name for the same thing.

05:50.000 --> 05:53.000
So 9PFS has some transport restrictions.

05:53.000 --> 05:56.000
It must be reliable.

05:56.000 --> 06:01.000
So UDP is not possible because you may not lose any package.

06:01.000 --> 06:05.000
But USB is possible since you have bulk endpoints.

06:05.000 --> 06:11.000
So you see a C checked and the C's endpoints are not being.

06:11.000 --> 06:16.000
They're always reliable.

06:16.000 --> 06:19.000
And the messages may not be a transport.

06:19.000 --> 06:22.000
So every request needs to map to the same request

06:22.000 --> 06:24.000
when it comes back.

06:24.000 --> 06:26.000
This is another limitation.

06:26.000 --> 06:32.000
And USB is a good transport for exactly this purpose.

06:32.000 --> 06:36.000
We took an example by the serial gadget

06:36.000 --> 06:39.000
where you have TX and RX endpoint and for this.

06:39.000 --> 06:43.000
For UDP, we also took one endpoint for the request.

06:43.000 --> 06:47.000
That we sent to the host and then we get the responses back.

06:47.000 --> 06:51.000
By the other endpoint.

06:51.000 --> 06:56.000
And we also only allocate one USB request per endpoint.

06:56.000 --> 06:58.000
So it's much simpler.

06:58.000 --> 07:03.000
So we don't have to household a lot of infrared transmissions.

07:03.000 --> 07:06.000
And when a transmit is going on,

07:06.000 --> 07:10.000
the transmit has to wait for the receiver to come back.

07:10.000 --> 07:16.000
Until another MPFS request can be transmitted again.

07:16.000 --> 07:19.000
They all get cut up in the link list.

07:19.000 --> 07:25.000
So they will be catched up later when the request is available again.

07:25.000 --> 07:28.000
For now, USB and I'm PFS got merged.

07:28.000 --> 07:33.000
In Colonel Lennox, Colonel Version 612.

07:33.000 --> 07:36.000
It's called TransNetUSBG.C.

07:36.000 --> 07:41.000
And it also includes an forwarder since

07:41.000 --> 07:45.000
she mentioned TCP demons, diode, and it has

07:45.000 --> 07:49.000
Ganesha that do not from itself connect to the USB endpoint.

07:49.000 --> 07:56.000
We needed something to map the 9P transmit to the USB endpoint.

07:56.000 --> 08:01.000
And for this we added a forward Python script that you can use.

08:01.000 --> 08:05.000
Getting into the details of the driver shortly.

08:05.000 --> 08:08.000
It's actually not that sophisticated.

08:08.000 --> 08:11.000
A lot of things were already available in the Colonel.

08:11.000 --> 08:15.000
So we did actually just drive a good driver,

08:15.000 --> 08:19.000
where we implemented some callbacks.

08:19.000 --> 08:24.000
The 9P transport only needs a few of implementations like

08:25.000 --> 08:31.000
a create, so the client that is requesting the transport

08:31.000 --> 08:34.000
can attach to it.

08:34.000 --> 08:36.000
This usually is a mount callback.

08:36.000 --> 08:38.000
And then the clause is detaching it.

08:38.000 --> 08:42.000
And the request is only queueing up the USB request

08:42.000 --> 08:44.000
into the endpoint.

08:44.000 --> 08:50.000
On the USB side, the

08:51.000 --> 08:54.000
seggerget implementation is also not set.

08:54.000 --> 08:57.000
Have you implemented the bind functions?

08:57.000 --> 09:03.000
And the set for all function is actually only enabling.

09:03.000 --> 09:07.000
It's enabling the device, so it knows it is present and

09:07.000 --> 09:10.000
can go on with the transfers.

09:10.000 --> 09:17.000
It's not set as to implement because everything was there.

09:17.000 --> 09:19.000
It's a gadget side.

09:19.000 --> 09:22.000
So here's a mount example if you want to use it.

09:22.000 --> 09:27.000
On the gadget side, you have to set up the gadget.

09:27.000 --> 09:30.000
Usually in a modern system and in a embedded system,

09:30.000 --> 09:33.000
you have to get a tool and lift USB-GX.

09:33.000 --> 09:37.000
Then PFAS is also already in part of the USB-GX.

09:37.000 --> 09:40.000
So you can just ride the scheme file.

09:40.000 --> 09:43.000
It's like a DT that's a little bit different.

09:43.000 --> 09:48.000
We'll describe the gadget a little bit with all its parts.

09:48.000 --> 09:53.000
And then you can load it and get configured with configFS.

09:53.000 --> 10:00.000
And then all you need to do is call the mount callback as a mount function

10:00.000 --> 10:02.000
or the mount call.

10:02.000 --> 10:10.000
And then you pass the USB-G-Trans option to the mount call.

10:10.000 --> 10:14.000
And to which parts you want to mount on your lock and file system.

10:14.000 --> 10:20.000
On the outside, that's a little bit more complex because we have this transmitter

10:20.000 --> 10:24.000
pison tool in between.

10:24.000 --> 10:29.000
So we start the diode and then we only start the pison scripts

10:29.000 --> 10:32.000
that is starting to forwarder.

10:32.000 --> 10:37.000
If you have multiple devices available, you can also

10:37.000 --> 10:40.000
set the right one with the past argument.

10:40.000 --> 10:41.000
It's optional.

10:41.000 --> 10:47.000
So I think that's it for the development part and I hand over to Ahmed.

10:47.000 --> 10:49.000
Thank you, Michean.

10:49.000 --> 10:54.000
So having garnered support is, of course, a necessary precondition to make

10:54.000 --> 10:55.000
this viable.

10:55.000 --> 10:58.000
So we don't want to patch the garnered to be able to use it.

10:58.000 --> 11:01.000
But there are a lot more moving parts until we can have the same

11:01.000 --> 11:04.000
development experience that we have with NFS.

11:04.000 --> 11:08.000
And we want to go further than that and solve these solutions.

11:08.000 --> 11:10.000
Problems have solutions for these problems.

11:10.000 --> 11:12.000
That Michean showed in the first slides.

11:12.000 --> 11:15.000
So first thing is how's the kernel loaded?

11:15.000 --> 11:20.000
We want to use preferably the same protocol that loaded the kernel.

11:20.000 --> 11:22.000
That's the kernel uses to load the kernel itself.

11:22.000 --> 11:25.000
So that means we need an NFS support in the bootloader.

11:25.000 --> 11:32.000
So we can just use the same mechanism during the whole debugging cycle.

11:32.000 --> 11:38.000
And unfortunately, so with legacy gadgets, you could set some up via kernel

11:38.000 --> 11:39.000
command line.

11:39.000 --> 11:42.000
But with non-legacy gadgets, you can do that anymore.

11:42.000 --> 11:46.000
You have configfs and you need to like create directories,

11:46.000 --> 11:47.000
write files, and so on.

11:47.000 --> 11:50.000
And it's more complicated and can be expressed in the kernel command line.

11:50.000 --> 11:55.000
So you need a cooperating user space to set up the mount point.

11:55.000 --> 11:58.000
And then we need to generate a root of S.

11:58.000 --> 12:01.000
So for me, I usually work with Yachto about support packages.

12:01.000 --> 12:04.000
So I want a root of S coming out of Yachto that I can use.

12:04.000 --> 12:06.000
And that's what I'm going to show.

12:06.000 --> 12:12.000
So first thing is I ported my PFS, which Micheal contributed

12:12.000 --> 12:14.000
to Linux to Burbox.

12:14.000 --> 12:18.000
It I didn't port the TCP back end, but I ported that I owe and

12:18.000 --> 12:20.000
USB gadget transport.

12:20.000 --> 12:24.000
And the nice thing is that the file system layer is really good in Burbox.

12:24.000 --> 12:26.000
And you have a lot of convenience functions.

12:26.000 --> 12:28.000
I'm going to show you in a demo later.

12:28.000 --> 12:31.000
So it integrates really well with 9p.

12:31.000 --> 12:34.000
So I want, yeah, I will show you in the demo what I mean with that.

12:34.000 --> 12:40.000
So now Burbox can boot the kernel out of a 9p file system

12:40.000 --> 12:42.000
exported over USB.

12:42.000 --> 12:48.000
Then we need an inner trauma of S to set up a root file system for

12:48.000 --> 12:49.000
with 9pfs.

12:49.000 --> 12:53.000
We wrote a program for that, our S in it.

12:53.000 --> 12:56.000
It's our S because it's written in Rust, but it's also an RD in it.

12:56.000 --> 12:58.000
So it's a RAM disk in it.

12:58.000 --> 13:02.000
And it's meant to be just a minimalistic, single, executable that you can

13:02.000 --> 13:03.000
statically link.

13:03.000 --> 13:07.000
And that will do the stuff that you need an inner trauma of S for for example.

13:07.000 --> 13:11.000
It can mount at the inverted device or it can set up NFS root or

13:11.000 --> 13:13.000
it can mount 9pfs.

13:13.000 --> 13:19.000
So the inverted device in an AB system, you need to have some logic to

13:19.000 --> 13:22.000
select which device you need.

13:22.000 --> 13:24.000
And yeah, our S in it does that for you.

13:24.000 --> 13:26.000
And here's an example.

13:26.000 --> 13:29.000
This minus S that you might see is it's blue.

13:29.000 --> 13:31.000
That means it's static linked.

13:31.000 --> 13:32.000
I am using muzzle.

13:32.000 --> 13:35.000
So I can just statically link again.

13:35.000 --> 13:36.000
So let's see.

13:36.000 --> 13:38.000
And with CPI or I create an inner trauma of S.

13:38.000 --> 13:41.000
And then I have a single executable that I can use.

13:41.000 --> 13:45.000
And yeah, it can just boot my system.

13:45.000 --> 13:48.000
Then next step is my system.

13:48.000 --> 13:49.000
It's a rootfs.

13:49.000 --> 13:51.000
How to get the rootfs.

13:51.000 --> 13:55.000
So the problem is if I unpack without pseudo.

13:55.000 --> 13:57.000
I as a file set are being extracted.

13:57.000 --> 13:59.000
We'll have my user ID.

13:59.000 --> 14:01.000
And that's not good.

14:01.000 --> 14:03.000
For example, if you have PASWD.

14:03.000 --> 14:05.000
It's a suite binary.

14:05.000 --> 14:09.000
And that means it will adopt the user ID of file itself.

14:09.000 --> 14:10.000
When you execute it.

14:10.000 --> 14:14.000
And it want to work nicely if something which is supposed to be

14:14.000 --> 14:16.000
user ID root to use ID zero.

14:16.000 --> 14:20.000
When it runs with my 1065 at the development server.

14:20.000 --> 14:22.000
That's one to work.

14:22.000 --> 14:27.000
And there is a solution for that already upstream in Poké or in O.A.

14:27.000 --> 14:33.000
Core, which is run QEmoExport rootfs, which runs user space and F.S.

14:33.000 --> 14:37.000
Demon under pseudo's fake root environment.

14:37.000 --> 14:40.000
And as far as U.N.F.S.D. is concerned,

14:40.000 --> 14:41.000
it's running with root.

14:41.000 --> 14:43.000
It is seeing a rootfile system.

14:43.000 --> 14:47.000
And it will send over.

14:47.000 --> 14:50.000
NFS everything as it is.

14:50.000 --> 14:52.000
As it is on the target.

14:52.000 --> 14:57.000
So if a file has suite and UIDGID zero in the target rootfs,

14:57.000 --> 15:00.000
it will have so over NFS as well.

15:00.000 --> 15:04.000
And my colleague Enrico wrote Poké NFS root.

15:04.000 --> 15:09.000
And in Prague, there was a Yachto summit or Yachto workshop or something.

15:09.000 --> 15:11.000
He has a talk about that.

15:11.000 --> 15:14.000
And what set does is that it listens on the package feed

15:15.000 --> 15:18.000
from BitBake and continuously updates the rootfs.

15:18.000 --> 15:22.000
So you can just build a package and see it pop up directly in your NFS root

15:22.000 --> 15:24.000
without having to reboot.

15:24.000 --> 15:27.000
And what I did additionally to that,

15:27.000 --> 15:31.000
that I thought run QEmoExport rootfs is a generic name,

15:31.000 --> 15:33.000
but it's basically only doing NFS.

15:33.000 --> 15:36.000
I extended it so it can do 9p.

15:36.000 --> 15:38.000
That was just some refactoring.

15:38.000 --> 15:43.000
What needed a bit more work was the lobotomy I had to do to diet.

15:43.000 --> 15:47.000
So diet is a bit more sophisticated than UNFSD.

15:47.000 --> 15:51.000
And it does stuff like look up users and check groups and so on.

15:51.000 --> 15:55.000
And it doesn't like at all that the runs inside a fake root argument,

15:55.000 --> 15:57.000
a fake root environment.

15:57.000 --> 16:02.000
But with some strategically placed returns and commented out code,

16:02.000 --> 16:06.000
it's fine with running the fake root environment.

16:06.000 --> 16:10.000
And yeah, so we have everything in place.

16:10.000 --> 16:13.000
And I can show you that demo.

16:13.000 --> 16:16.000
I need to, yeah.

16:16.000 --> 16:19.000
Yeah, so that's some arm V7 board.

16:19.000 --> 16:22.000
You see here, barbox has booted up.

16:22.000 --> 16:25.000
You see it has created a multi gadget with a fast boot.

16:25.000 --> 16:27.000
You want to set, but also with 9pfs.

16:27.000 --> 16:30.000
So you can export multiple function over USB.

16:30.000 --> 16:33.000
You could also export a console so you just need USB.

16:33.000 --> 16:36.000
You will see here there is an auto mount entry.

16:36.000 --> 16:39.000
It will automatically detect that there is a 9p.

16:39.000 --> 16:43.000
You can see a gadget that has been set up and create for use this path.

16:43.000 --> 16:47.000
And on first access to this path, it will mount remote file system.

16:47.000 --> 16:48.000
It's not mounted yet.

16:48.000 --> 16:51.000
So these auto mounts are only mounted when you need them.

16:51.000 --> 16:54.000
Now the first access, you see here in the bootloader.

16:54.000 --> 17:00.000
You have the remote mounted, the remote file system.

17:00.000 --> 17:03.000
And it's the implementation in barbox.

17:03.000 --> 17:04.000
It's read right.

17:04.000 --> 17:05.000
You can write to it if you have something.

17:05.000 --> 17:07.000
You can also read from it.

17:07.000 --> 17:11.000
I'm going to read now's bootloader spec file.

17:11.000 --> 17:13.000
This describes how to boot the system.

17:13.000 --> 17:14.000
I have a kernel.

17:14.000 --> 17:15.000
I have a device tree.

17:15.000 --> 17:17.000
I have an inner trauma fs, which is the RS in it.

17:17.000 --> 17:21.000
I talked about and it has this extension Linux abandoned route through.

17:21.000 --> 17:27.000
This tells barbox, please compute a convenient or matching route

17:27.000 --> 17:30.000
command line argument for Linux.

17:30.000 --> 17:31.000
You can see it now.

17:31.000 --> 17:33.000
9p0 is our device.

17:33.000 --> 17:39.000
This is what barbox compute would be the correct route argument to pass to Linux.

17:39.000 --> 17:42.000
And when you normally boot, you don't need all of that.

17:42.000 --> 17:44.000
It's an auto mount and everything is automatic.

17:44.000 --> 17:49.000
So the only thing you need is to just type boot and then the path.

17:49.000 --> 17:55.000
And it will do the bootloader spec stuff to find out what's the kernel,

17:55.000 --> 17:57.000
what's the inner trauma fs and it will just boot.

17:57.000 --> 18:00.000
So bootloader spec is what system deboot for example,

18:00.000 --> 18:02.000
which is a fedora patched graph.

18:02.000 --> 18:05.000
And so on, you see here that it talks a command line.

18:05.000 --> 18:07.000
That barbox computed.

18:07.000 --> 18:09.000
You see here the inner test started.

18:09.000 --> 18:12.000
There are some not-so-nice warnings.

18:12.000 --> 18:14.000
I hope to remove this here, finally.

18:14.000 --> 18:18.000
Then here the system has booted.

18:18.000 --> 18:21.000
Normally you have a lot of system d errors here,

18:21.000 --> 18:24.000
because system decamp files,

18:24.000 --> 18:28.000
they want to be happy about you ID not matching and so on.

18:28.000 --> 18:30.000
But here it's only one of them.

18:30.000 --> 18:33.000
I didn't have enough time to fix before the talk.

18:33.000 --> 18:34.000
I don't understand it.

18:34.000 --> 18:35.000
I am passing a machine ID.

18:35.000 --> 18:39.000
So I am not sure why it says it can commit a transient machine ID.

18:39.000 --> 18:40.000
But everything is working.

18:40.000 --> 18:43.000
So it's my P as route fs type.

18:43.000 --> 18:45.000
It's has transmission USBG.

18:45.000 --> 18:50.000
And yeah, you can now on your remote system do an on your development host,

18:50.000 --> 18:55.000
do stuff like bootback, something and see it appear here.

18:55.000 --> 19:02.000
Or you can run s-trays and it's will end up in your remote system.

19:02.000 --> 19:07.000
There is also an NFS CP helper that allows you to copy stuff while observing

19:07.000 --> 19:12.000
the pseudo limitations or pseudo requirements.

19:12.000 --> 19:13.000
Here is an example.

19:13.000 --> 19:17.000
This is for means it's a suede binary and you ID zero g ID zero.

19:17.000 --> 19:19.000
These are the stuff that normally breaks.

19:19.000 --> 19:24.000
If you were to run your NFS day or diet without any fake route around it.

19:24.000 --> 19:29.000
You would end up with your user ID or you have to use pseudo for extraction,

19:29.000 --> 19:32.000
which is not really viable.

19:32.000 --> 19:36.000
And yeah, that's the demo.

19:36.000 --> 19:38.000
No.

19:38.000 --> 19:39.000
Okay, thank you.

19:39.000 --> 19:40.000
Thank you.

19:40.000 --> 19:41.000
But I'm not done yet.

19:41.000 --> 19:43.000
I don't.

19:43.000 --> 19:44.000
Yeah.

19:44.000 --> 19:49.000
It gets a bug.

19:49.000 --> 19:52.000
Yeah.

19:53.000 --> 19:55.000
I don't want you to think everything is done.

19:55.000 --> 19:57.000
So it's the right to do.

19:57.000 --> 20:00.000
So in bear box, I need to upstream the support.

20:00.000 --> 20:03.000
I think I might get around to it this week.

20:03.000 --> 20:07.000
In Linux, we have a limitation of only one inflight request.

20:07.000 --> 20:08.000
You could increase that.

20:08.000 --> 20:11.000
So as some robustness issues, like with rest conditions,

20:11.000 --> 20:14.000
very early on that we need to fix.

20:14.000 --> 20:19.000
Boot config might be a really nice idea to be able to set up gadgets

20:19.000 --> 20:22.000
without using config fs.

20:22.000 --> 20:24.000
We need to try that out.

20:24.000 --> 20:25.000
Our S in it.

20:25.000 --> 20:27.000
We want to package for this.

20:27.000 --> 20:30.000
And maybe merge boot splash functionality into it.

20:30.000 --> 20:31.000
So it's real.

20:31.000 --> 20:32.000
So it's army knife.

20:32.000 --> 20:36.000
Like our inner drum Fs needs open embedded core.

20:36.000 --> 20:39.000
So yeah, it would be cool to contribute to stuff.

20:39.000 --> 20:42.000
I talked about and we would also need a diagnosis.

20:42.000 --> 20:43.000
A recipe.

20:43.000 --> 20:45.000
But that should of course include my patches.

20:45.000 --> 20:48.000
And these need to be cleaned up a bit.

20:48.000 --> 20:51.000
So they are not nice at the moment.

20:51.000 --> 20:52.000
P9 forward.

20:52.000 --> 20:54.000
We could improve the detection of the gadget.

20:54.000 --> 20:58.000
Currently it matches on vendor ID and product ID.

20:58.000 --> 21:02.000
Which is not sufficient if you have like a multi gadget or want to use your custom stuff.

21:02.000 --> 21:03.000
You can specify it.

21:03.000 --> 21:06.000
But some more automation would be nice.

21:06.000 --> 21:07.000
And same.

21:07.000 --> 21:12.000
And I think with lab grid that might be some things that we will look into in the future.

21:12.000 --> 21:16.000
So lab grid can provide you a fast boot resource.

21:16.000 --> 21:17.000
For example.

21:17.000 --> 21:19.000
And then you can say lab grid client.

21:19.000 --> 21:22.000
Fast boot flash called a Python function to flash it.

21:22.000 --> 21:24.000
And it would be nice if I could do the same thing.

21:24.000 --> 21:27.000
Lab grid can do TCP forwarding over SSH.

21:27.000 --> 21:28.000
So I could just tell it.

21:28.000 --> 21:30.000
Hey, this has an IPFS port.

21:30.000 --> 21:32.000
Please give it this diode instance.

21:32.000 --> 21:33.000
Is that running here.

21:33.000 --> 21:35.000
And then it would be just.

21:35.000 --> 21:36.000
Yeah.

21:36.000 --> 21:39.000
So it would be the most convenient way to use this I think.

21:39.000 --> 21:42.000
But as it is already functional.

21:42.000 --> 21:47.000
If you are interested, we have put up a GitHub repository.

21:47.000 --> 21:50.000
And you can see our patches there.

21:50.000 --> 21:56.000
And read me where we which we will update as we are going forward with upstreaming more stuff.

21:56.000 --> 21:57.000
Yeah.

21:57.000 --> 21:58.000
And that's it.

21:58.000 --> 21:59.000
Now you can clap.

21:59.000 --> 22:00.000
Sorry.

22:01.000 --> 22:06.000
Any questions?

22:06.000 --> 22:07.000
I think we have some time.

22:07.000 --> 22:08.000
Yeah.

22:08.000 --> 22:17.000
Three minutes.

22:17.000 --> 22:18.000
Okay.

22:18.000 --> 22:19.000
Thank you for your work.

22:19.000 --> 22:21.000
I have been dressed in it.

22:21.000 --> 22:23.000
And.

22:23.000 --> 22:24.000
Okay.

22:24.000 --> 22:28.000
Do think about standardization of the.

22:28.000 --> 22:35.000
Nine BFS protocol over the USB because it would be big win against.

22:35.000 --> 22:38.000
MTP and such horrible stuff.

22:38.000 --> 22:40.000
Yeah.

22:40.000 --> 22:43.000
As the other nine P product transmissions.

22:43.000 --> 22:44.000
Standardized.

22:44.000 --> 22:45.000
Okay.

22:45.000 --> 22:46.000
Overall, I owe it's probably.

22:46.000 --> 22:47.000
There is a better.

22:47.000 --> 22:48.000
I respect.

22:48.000 --> 22:49.000
But it's worth.

22:49.000 --> 22:50.000
I owe it.

22:50.000 --> 22:51.000
It really have a specification.

22:51.000 --> 22:55.000
I'm not sure who I would even talk to to make this.

22:55.000 --> 23:00.000
No, but to make it as a standard class for USB.

23:00.000 --> 23:03.000
To standardization it for USB.

23:03.000 --> 23:04.000
Okay.

23:04.000 --> 23:09.000
Because it would be a win against MTP and all that horrible.

23:09.000 --> 23:11.000
That's it's actually not the.

23:11.000 --> 23:15.000
The way you think of because MTP is the other way around.

23:15.000 --> 23:18.000
Because the gadget is exporting the file system.

23:18.000 --> 23:19.000
Yeah.

23:19.000 --> 23:21.000
And in our case, it's the other way around.

23:22.000 --> 23:26.000
And I think about even the second way that it can be.

23:26.000 --> 23:27.000
Standardized us.

23:27.000 --> 23:28.000
Yeah.

23:28.000 --> 23:32.000
But usually you don't want to expose your local file system to.

23:32.000 --> 23:33.000
So you get it.

23:33.000 --> 23:36.000
But anyway, to get an.

23:36.000 --> 23:38.000
I identify for the USB class for it.

23:38.000 --> 23:39.000
It's.

23:39.000 --> 23:40.000
It's a good idea.

23:40.000 --> 23:41.000
Probably.

23:45.000 --> 23:47.000
So when you have.

23:47.000 --> 23:50.000
Instability on the USB data connection.

23:50.000 --> 23:54.000
You will will you have.

23:54.000 --> 23:58.000
We will also mount a break.

23:58.000 --> 23:59.000
So.

23:59.000 --> 24:03.000
So if you have a short break on the data.

24:03.000 --> 24:05.000
Line for a second.

24:05.000 --> 24:07.000
Maybe.

24:07.000 --> 24:08.000
So your.

24:08.000 --> 24:11.000
Will your mount be lost or.

24:11.000 --> 24:13.000
There's something recover.

24:13.000 --> 24:15.000
And now it's.

24:15.000 --> 24:17.000
It's currently it's recoverable.

24:17.000 --> 24:19.000
And in the beginning, when the.

24:19.000 --> 24:22.000
We have a current race when the.

24:22.000 --> 24:25.000
Get it is exporting itself.

24:25.000 --> 24:27.000
But the mount layer did not.

24:27.000 --> 24:29.000
It's a client layer did not.

24:29.000 --> 24:31.000
Created device.

24:31.000 --> 24:33.000
It's a short gap.

24:33.000 --> 24:36.000
So we we have to wait for some seconds.

24:36.000 --> 24:38.000
But this will be fixable.

24:38.000 --> 24:40.000
It's only that.

24:40.000 --> 24:42.000
Short moment.

24:43.000 --> 24:45.000
Okay.

24:45.000 --> 24:48.000
Other than Linux fix system.

24:48.000 --> 24:52.000
So I thought I thought this could be also useful.

24:52.000 --> 24:55.000
For example debugging.

24:55.000 --> 25:00.000
Pips and filter with networking problems.

25:00.000 --> 25:04.000
Do you have any intentions to.

25:04.000 --> 25:09.000
Add the USB 9 PFS support to the previous day.

25:10.000 --> 25:12.000
Backpotting him in to previous.

25:12.000 --> 25:13.000
Yes.

25:13.000 --> 25:14.000
Well, yeah.

25:14.000 --> 25:15.000
To other corners.

25:15.000 --> 25:16.000
No, I don't.

25:16.000 --> 25:17.000
I don't know.

25:17.000 --> 25:19.000
Not we did not think about it yet.

25:19.000 --> 25:20.000
Okay.

25:20.000 --> 25:21.000
Okay.

25:21.000 --> 25:24.000
I just thought that this could be really useful.

25:24.000 --> 25:25.000
Yeah.

25:25.000 --> 25:27.000
So at least in.

25:27.000 --> 25:28.000
At least in Linux.

25:28.000 --> 25:30.000
It's pretty nicely abstracted.

25:30.000 --> 25:31.000
It's.

25:31.000 --> 25:34.000
And you have like multiple transmit transport modules.

25:34.000 --> 25:36.000
So it's was.

25:36.000 --> 25:39.000
It's it's really super easy to add to Linux.

25:39.000 --> 25:40.000
Of course.

25:40.000 --> 25:42.000
After fixing all bugs.

25:42.000 --> 25:45.000
So if you're he cann� does a similar.

25:45.000 --> 25:48.000
Separation might be easy to add or easy.

25:48.000 --> 25:51.000
Add them doing suit from scratch.

25:51.000 --> 25:52.000
Okay, so that's it.

25:52.000 --> 25:53.000
Thank you for listening.

25:53.000 --> 25:55.000
Thank you.

