From 168d8955145bb010c1b162c1e23af8a1e9f4fb2d Mon Sep 17 00:00:00 2001 From: "jbranso@dismail.de" Date: Sat, 12 Oct 2024 10:36:49 -0400 Subject: document libmachdev * hurd/libmachdev.mdwn: new file. * hurd/documentation.mdwn: link to libmachdev Message-ID: <20241012143852.2101-2-jbranso@dismail.de> --- hurd/documentation.mdwn | 1 + hurd/libmachdev.mdwn | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 hurd/libmachdev.mdwn diff --git a/hurd/documentation.mdwn b/hurd/documentation.mdwn index b79ddb0a..68914697 100644 --- a/hurd/documentation.mdwn +++ b/hurd/documentation.mdwn @@ -74,6 +74,7 @@ is included in the section entitled * [[libstore]] * [[libchannel]] * [[libtrivfs]] + * [[libmachdev]] * [[libnetfs]] -- short introductory material * [[libdiskfs]] * [[libihash]] diff --git a/hurd/libmachdev.mdwn b/hurd/libmachdev.mdwn new file mode 100644 index 00000000..3f8634e4 --- /dev/null +++ b/hurd/libmachdev.mdwn @@ -0,0 +1,28 @@ +[[!meta copyright="Copyright © 2024 Free Software Foundation, Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled [[GNU Free Documentation +License|/fdl]]."]]"""]] + +GNU/Linux is a monolithic kernel, meaning that a lot of functionality +is baked into the kernel, including filesystems like `ext4` or `xfs`. +Alternatively, the Hurd's filesystems are in userspace, but our disk +device drivers are baked into the GNU Mach kernel image (via +[[DDE|hurd/dde]]). With [[rumpdisk|hurd/rump/rumpdisk]], the Hurd can +use SSDs with userspace device drivers! RumpDisk uses `libmachdev` as +a helper library. + +`libmachdev` exposes devices to userspace via some Mach `device-*` RPC +calls. `libmachdev` provides a trivfs that intercepts the +`device_open` RPC, which the `/dev` node uses. It also fakes a +filesystem node, so you can mount a `netfs` onto it. You still have +to implement `device_read` and `device_write` yourself, but that code +runs in userspace. An example of this can be found in +`rumpdisk/block-rump.c`. + +If [[serverboot V2|open_issues/serverbootv2]] is written, then +`libmachdev` could be simplified or maybe removed. -- cgit v1.2.3