From 1de4ec0bcfad92dfa0b7cf69919d56c0dca4cb7a Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Wed, 19 Nov 2008 15:54:07 +0100 Subject: Revert "microkernel/mach/gnumach -> microkernel/mach/gnu_mach" This reverts commit ae9e4e22a7ce8b2b56e98ff1708c2e8d42eefd69. I've changed my mind again. Also resolve conflicts and adapt all new uses of the path. --- community/gsoc/project_ideas.mdwn | 6 +- contributing.mdwn | 6 +- hurd/building/cross-compiling.mdwn | 2 +- hurd/getting_help.mdwn | 2 +- hurd/libstore.mdwn | 2 +- hurd/running.mdwn | 2 +- microkernel/mach.mdwn | 2 +- microkernel/mach/documentation.mdwn | 2 +- microkernel/mach/gnu_mach.mdwn | 80 -------- microkernel/mach/gnu_mach/boot_trace.mdwn | 222 --------------------- microkernel/mach/gnu_mach/building.mdwn | 114 ----------- microkernel/mach/gnu_mach/building/example.mdwn | 54 ----- microkernel/mach/gnu_mach/debugging.mdwn | 68 ------- .../mach/gnu_mach/hardware_compatibility_list.mdwn | 111 ----------- .../hardware_compatibility_list/discussion.mdwn | 4 - microkernel/mach/gnu_mach/open_issues.mdwn | 19 -- microkernel/mach/gnu_mach/ports.mdwn | 15 -- microkernel/mach/gnu_mach/ports/xen.mdwn | 78 -------- microkernel/mach/gnu_mach/ports/xen/internals.mdwn | 14 -- .../ports/xen/networking_configuration.mdwn | 105 ---------- microkernel/mach/gnu_mach/projects.mdwn | 129 ------------ .../mach/gnu_mach/projects/clean_up_the_code.mdwn | 121 ----------- microkernel/mach/gnu_mach/projects/gdb_stubs.mdwn | 13 -- microkernel/mach/gnu_mach/reference_manual.mdwn | 26 --- microkernel/mach/gnumach.mdwn | 80 ++++++++ microkernel/mach/gnumach/boot_trace.mdwn | 222 +++++++++++++++++++++ microkernel/mach/gnumach/building.mdwn | 114 +++++++++++ microkernel/mach/gnumach/building/example.mdwn | 54 +++++ microkernel/mach/gnumach/debugging.mdwn | 68 +++++++ .../mach/gnumach/hardware_compatibility_list.mdwn | 111 +++++++++++ .../hardware_compatibility_list/discussion.mdwn | 4 + microkernel/mach/gnumach/open_issues.mdwn | 19 ++ microkernel/mach/gnumach/ports.mdwn | 15 ++ microkernel/mach/gnumach/ports/xen.mdwn | 78 ++++++++ microkernel/mach/gnumach/ports/xen/internals.mdwn | 14 ++ .../ports/xen/networking_configuration.mdwn | 105 ++++++++++ microkernel/mach/gnumach/projects.mdwn | 129 ++++++++++++ .../mach/gnumach/projects/clean_up_the_code.mdwn | 121 +++++++++++ microkernel/mach/gnumach/projects/gdb_stubs.mdwn | 13 ++ microkernel/mach/gnumach/reference_manual.mdwn | 26 +++ microkernel/mach/history.mdwn | 2 +- microkernel/mach/mig/documentation.mdwn | 2 +- microkernel/mach/mig/gnu_mig/building.mdwn | 2 +- news/2008-11-14.mdwn | 2 +- sidebar.mdwn | 2 +- 45 files changed, 1190 insertions(+), 1190 deletions(-) delete mode 100644 microkernel/mach/gnu_mach.mdwn delete mode 100644 microkernel/mach/gnu_mach/boot_trace.mdwn delete mode 100644 microkernel/mach/gnu_mach/building.mdwn delete mode 100644 microkernel/mach/gnu_mach/building/example.mdwn delete mode 100644 microkernel/mach/gnu_mach/debugging.mdwn delete mode 100644 microkernel/mach/gnu_mach/hardware_compatibility_list.mdwn delete mode 100644 microkernel/mach/gnu_mach/hardware_compatibility_list/discussion.mdwn delete mode 100644 microkernel/mach/gnu_mach/open_issues.mdwn delete mode 100644 microkernel/mach/gnu_mach/ports.mdwn delete mode 100644 microkernel/mach/gnu_mach/ports/xen.mdwn delete mode 100644 microkernel/mach/gnu_mach/ports/xen/internals.mdwn delete mode 100644 microkernel/mach/gnu_mach/ports/xen/networking_configuration.mdwn delete mode 100644 microkernel/mach/gnu_mach/projects.mdwn delete mode 100644 microkernel/mach/gnu_mach/projects/clean_up_the_code.mdwn delete mode 100644 microkernel/mach/gnu_mach/projects/gdb_stubs.mdwn delete mode 100644 microkernel/mach/gnu_mach/reference_manual.mdwn create mode 100644 microkernel/mach/gnumach.mdwn create mode 100644 microkernel/mach/gnumach/boot_trace.mdwn create mode 100644 microkernel/mach/gnumach/building.mdwn create mode 100644 microkernel/mach/gnumach/building/example.mdwn create mode 100644 microkernel/mach/gnumach/debugging.mdwn create mode 100644 microkernel/mach/gnumach/hardware_compatibility_list.mdwn create mode 100644 microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn create mode 100644 microkernel/mach/gnumach/open_issues.mdwn create mode 100644 microkernel/mach/gnumach/ports.mdwn create mode 100644 microkernel/mach/gnumach/ports/xen.mdwn create mode 100644 microkernel/mach/gnumach/ports/xen/internals.mdwn create mode 100644 microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn create mode 100644 microkernel/mach/gnumach/projects.mdwn create mode 100644 microkernel/mach/gnumach/projects/clean_up_the_code.mdwn create mode 100644 microkernel/mach/gnumach/projects/gdb_stubs.mdwn create mode 100644 microkernel/mach/gnumach/reference_manual.mdwn diff --git a/community/gsoc/project_ideas.mdwn b/community/gsoc/project_ideas.mdwn index 8f2fe385..c4b665b7 100644 --- a/community/gsoc/project_ideas.mdwn +++ b/community/gsoc/project_ideas.mdwn @@ -340,7 +340,7 @@ GSoC 2008. He is still working on some outstanding issues. Although a driver framework in userspace would be desirable, presently the Hurd uses kernel drivers in the microkernel, -[[microkernel/mach/GNU_Mach]]. (And changing this would be far beyond a +[[GNU_Mach|microkernel/mach/gnumach]]. (And changing this would be far beyond a GSoC project...) The problem is that the drivers in GNU Mach are presently old Linux drivers @@ -590,7 +590,7 @@ pthreads. The Hurd presently has no sound support. Fixing this, [[GNU_Savannah_task 5485]], requires two steps: the first is to port some other kernel's drivers to -[[microkernel/mach/GNU_Mach]] so we can get access to actual sound +[[GNU_Mach|microkernel/mach/gnumach]] so we can get access to actual sound hardware. The second is to implement a userspace server ([[hurd/translator]]), that implements an interface on top of the kernel device that can be used by applications -- probably OSS or maybe ALSA. @@ -741,7 +741,7 @@ directories and attaching other translators. Although there are some attempts to move to a more modern microkernel alltogether, the current Hurd implementation is based on -[[microkernel/mach/GNU_Mach]], which is only a slightly modified +[[GNU_Mach|microkernel/mach/gnumach]], which is only a slightly modified variant of the original CMU [[microkernel/Mach]]. Unfortunately, Mach was created about two decades ago, and is in turn based on diff --git a/contributing.mdwn b/contributing.mdwn index aac255bd..a647382a 100644 --- a/contributing.mdwn +++ b/contributing.mdwn @@ -33,7 +33,7 @@ There are essential two kinds of Hurd system designs. ## Hurd on Mach For one there's the implementation of the *[[Hurd]] running on the -[[microkernel/mach/GNU_Mach]] microkernel*. This is what is commonly +[[GNU_Mach_microkernel|microkernel/mach/gnumach]]*. This is what is commonly meant when people are talking about GNU/Hurd systems. This system has mostly been designed and implemented @@ -84,8 +84,8 @@ Here is a [[list_of_open_issues|hurd/open_issues]] for the [[GNU_Hurd|hurd]]. ### Open Issues: GNU Mach -Here is a [[list_of_open_issues|microkernel/mach/gnu_mach/open_issues]] for -[[microkernel/mach/GNU_Mach]]. +Here is a [[list_of_open_issues|microkernel/mach/gnumach/open_issues]] for +[[GNU_Mach|microkernel/mach/gnumach]]. ### Open Issues: GNU MIG diff --git a/hurd/building/cross-compiling.mdwn b/hurd/building/cross-compiling.mdwn index 81303b0a..b007928c 100644 --- a/hurd/building/cross-compiling.mdwn +++ b/hurd/building/cross-compiling.mdwn @@ -98,7 +98,7 @@ guarantee is given. Always the preferred version is listed first. `gcc-4_3-branch` needs. --> -* `src/gnumach`: [[microkernel/mach/GNU_Mach]] +* `src/gnumach`: [[GNU_Mach|microkernel/mach/gnumach]] * CVS `gnumach-1-branch` diff --git a/hurd/getting_help.mdwn b/hurd/getting_help.mdwn index c4f80ff9..342410dd 100644 --- a/hurd/getting_help.mdwn +++ b/hurd/getting_help.mdwn @@ -11,7 +11,7 @@ is included in the section entitled # Essential Documentation * [[FAQ]] -* [[microkernel/mach/gnu_mach/Hardware_Compatibility_List]] +* [[microkernel/mach/gnumach/Hardware_Compatibility_List]] # Forums diff --git a/hurd/libstore.mdwn b/hurd/libstore.mdwn index 3de42be3..ab649ebc 100644 --- a/hurd/libstore.mdwn +++ b/hurd/libstore.mdwn @@ -9,7 +9,7 @@ is included in the section entitled [[GNU_Free_Documentation_License|/fdl]]."]]"""]] `libstore` is more than just a thin layer between -[[microkernel/mach/GNU_Mach]] devices (`hd0` for example) and the +[[GNU_Mach|microkernel/mach/gnumach]] devices (`hd0` for example) and the device node below `/dev`... # Available Stores diff --git a/hurd/running.mdwn b/hurd/running.mdwn index 78815099..162bc9ea 100644 --- a/hurd/running.mdwn +++ b/hurd/running.mdwn @@ -9,7 +9,7 @@ is included in the section entitled [[GNU_Free_Documentation_License|/fdl]]."]]"""]] * [[Distrib]] - Distributions based on the Hurd -* [[microkernel/mach/gnu_mach/ports/Xen]] - In Xen +* [[microkernel/mach/gnumach/ports/Xen]] - In Xen * [[Live_CD]] * [[QEMU]] - In QEMU * [[vmware]] (**non-free!**) diff --git a/microkernel/mach.mdwn b/microkernel/mach.mdwn index 9d3289b4..39d0f4d2 100644 --- a/microkernel/mach.mdwn +++ b/microkernel/mach.mdwn @@ -7,7 +7,7 @@ microkernel currently used by the [[Hurd]]. # Implementations -* [[GNU_Mach]] +* [[GNU_Mach|gnumach]] * [[Mach/OskitMach]] - A Once Successor of Mach based on OSKit * [Apple's Darwin](http://developer.apple.com/darwin/) ([API](http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/index.html)) (**non-free**) diff --git a/microkernel/mach/documentation.mdwn b/microkernel/mach/documentation.mdwn index f6f2eb79..b4187f78 100644 --- a/microkernel/mach/documentation.mdwn +++ b/microkernel/mach/documentation.mdwn @@ -12,7 +12,7 @@ is included in the section entitled - [Meet Mach](http://www.stepwise.com/Articles/Technical/MeetMach.html), a summary of Mach's history and main concepts. - * *[[The_GNU_Mach_Reference_Manual|gnu_mach/reference_manual]]*. + * *[[The_GNU_Mach_Reference_Manual|gnumach/reference_manual]]*. - OSF's [Kernel Interface (ps)](ftp://ftp.cs.cmu.edu/afs/cs/project/mach/public/doc/osf/kernel_interface.ps) [Kernel Interface (pdf)](http://shakthimaan.com/downloads/hurd/kernel_interface.pdf) diff --git a/microkernel/mach/gnu_mach.mdwn b/microkernel/mach/gnu_mach.mdwn deleted file mode 100644 index 19e1ea53..00000000 --- a/microkernel/mach/gnu_mach.mdwn +++ /dev/null @@ -1,80 +0,0 @@ -[[meta copyright="Copyright © 2001, 2002, 2007, 2008 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 Mach is the microkernel that the [[GNU_Hurd|hurd]] system is based on. - -It is maintained by the Hurd developers for the GNU project and remains -compatible with [[Mach]] 3.0. - -The majority of GNU Mach's [[device_driver]]s are from Linux 2.0. They were -added using glue code, i.e., a Linux [[emulation]] layer in Mach. - -GNU Mach runs on x86 machines. See the -[[hardware_compatibility_list]] and information about -[[ports]] to other architectures. - - -# Advantages of GNU Mach - -GNU Mach is not the most advanced [[microkernel]] known to the planet, nor is -it the fastest or smallest, but it has a rich set of [[interface]]s and some -features which make it useful as the base of the [[Hurd]] system. - - * **it's free software** - - Anybody can use, modify, and redistribute it under the terms of the - [[GNU_General_Public_License_(GPL)|gpl]]. - - * **it's built to survive** - - As a [[microkernel]], GNU Mach doesn't implement a lot of the features - commonly found in an operating system, but only the bare minimum that is - required to implement a full operating system on top of it. This means - that a lot of the operating system code is maintained outside of GNU Mach, - and while this code may go through a complete redesign, the code of the - microkernel can remain comparatively stable. - - * **it's scalable** - - Mach is particularly well suited for SMP and network cluster techniques. - Thread support is provided at the kernel level, and the kernel itself takes - advantage of that. Network transparency at the [[IPC]] level makes - resources of the system available across machine boundaries (with NORMA - IPC, currently not available in GNU Mach). - - * **it exists** - - The Mach microkernel is real software that works Right Now. It is not a - research or a proposal. You don't have to wait at all before you can start - using and developing it. Mach has been used in many operating systems in - the past, usually as the base for a single UNIX server. In the GNU system, - Mach is the base of a functional multi-server operating system, the - [[Hurd]]. - - -# Booting - -To actually use the kernel and boot the GNU operating system, you need a boot -loader. Not all boot loaders are capable to boot the GNU system, you need one -that supports the multiboot standard. The bootloader of the GNU system is -[[GNU_GRUB|grub]], which supports a broad range of operating systems including -GNU/Hurd. - - -# Development - - * [[Reference_Manual]] - * [[Building]] - * [[Debugging]] - * [[Boot_Trace]] - * [[Projects]] - * [[Rules]] - * [[Open_Issues]] diff --git a/microkernel/mach/gnu_mach/boot_trace.mdwn b/microkernel/mach/gnu_mach/boot_trace.mdwn deleted file mode 100644 index a08384f0..00000000 --- a/microkernel/mach/gnu_mach/boot_trace.mdwn +++ /dev/null @@ -1,222 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - -`if NCPUS > 1` stuff is not being considered so far. - - -> i386/i386at/boothdr.S: \_start - -> i386/i386at/boothdr.S: boot\_entry - ->> i386/i386at/model\_dep.c: c\_boot\_entry - ->>> i386/i386at/boothdr.S: discover\_x86\_cpu\_type - ->>> i386/i386at/model\_dep.c: i386at\_init - ->>>> i386/i386/pic.c: picinit - ->>>> i386/i386at/model\_dep.c: mem\_size\_init - ->>>> i386/intel/pmap.c: pmap\_bootstrap - ->>>> i386/i386/gdt.c: gdt\_init - ->>>> i386/i386/idt.c: idt\_init - ->>>> i386/i386at/int\_init.c: int\_init - ->>>> i386/i386/ldt.c: ldt\_init - ->>>> i386/i386/ktss.c: ktss\_init - ->>> kern/startup.c: setup\_main - ->>>> kern/debug.c: panic\_init - ->>>> kern/printf.c: printf\_init - ->>>> kern/sched\_prim.c: sched\_init - ->>>>> kern/sched\_prim.c: wait\_queue\_init - ->>>>> kern/processor.c: pset\_sys\_bootstrap - ->>>>> kern/ast.c: ast\_init - ->>>> vm/vm\_init.c: vm\_mem\_bootstrap - ->>>>> vm/vm\_resident.c: vm\_page\_bootstrap - ->>>>>> vm/vm\_resident.c: pmap\_startup - ->>>>> kern/zalloc.c: zone\_bootstrap - ->>>>> vm/vm\_object.c: vm\_object\_bootstrap - ->>>>>> vm/vm\_external.c: vm\_external\_module\_initialize - ->>>>> vm/vm\_map.c: vm\_map\_init - ->>>>> vm/vm\_kern.c: kmem\_init - ->>>>> i386/intel/pmap.c: pmap\_init - ->>>>> kern/zalloc.c: zone\_init - ->>>>> kern/kalloc.c: kalloc\_init - ->>>>> vm/vm\_fault.c: vm\_fault\_init - ->>>>> vm/vm\_resident.c: vm\_page\_module\_init - ->>>>> vm/memory\_object.c: memory\_manager\_default\_init - ->>>> ipc/ipc\_init.c: ipc\_bootstrap - ->>>>> ipc/ipc\_table.c: ipc\_table\_init - ->>>>> ipc/ipc\_notify.c: ipc\_notify\_init - ->>>>> ipc/ipc\_hash.c: ipc\_hash\_init - ->>>>> ipc/ipc\_marequest.c: ipc\_marequest\_init - ->>>> vm/vm\_init.c: vm\_mem\_init - ->>>>> vm/vm\_object.c: vm\_object\_init - ->>>> ipc/ipc\_init.c: ipc\_init - ->>>>> kern/ipc\_host.c: ipc\_host\_init - ->>>>>> kern/ipc\_host.c: ipc\_pset\_init - ->>>>>> kern/ipc\_host.c: ipc\_pset\_enable - ->>>>>> kern/ipc\_host.c: ipc\_processor\_init - ->>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL - ->>>> kern/timer.c: init\_timers - ->>>> kern/mach\_clock.c: init\_timeout - ->>>> kern/xpr.c: xprbootstrap - ->>>> kern/time\_stamp.c: timestamp\_init - ->>>> kern/mach\_clock.c: mapable\_time\_init - ->>>> i386/i386at/model\_dep.c: machine\_init - ->>>>> device/cons.c: cninit - ->>>>> i386/i386/fpu.c: init\_fpu - ->>>>> linux/dev/init/main.c: linux\_init - ->>>>>> linux/dev/arch/i386/kernel/irq.c: init\_IRQ - ->>>>>>> linux/dev/arch/i386/kernel/irq.c: reserve\_mach\_irqs - ->>>>>> linux/dev/kernel/sched.c: linux\_sched\_init - ->>>>>> linux/dev/init/main.c: calibrate\_delay - ->>>>>> linux/dev/glue/kmem.c: linux\_kmem\_init - ->>>>>> linux/src/drivers/pci/pci.c: pci\_init - ->>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_init - ->>>>>>> linux/src/drivers/pci/pci.c: scan\_bus - ->>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_fixup - ->>>>>> linux/dev/glue/net.c: linux\_net\_emulation\_init - ->>>>>> linux/dev/drivers/block/genhd.c: device\_setup - ->>>>>>> linux/dev/glue/block.c: blk\_dev\_init - ->>>>>>>> linux/src/drivers/block/ide.c: ide\_init - ->>>>>>>> linux/dev/drivers/block/floppy.c: floppy\_init - ->>>>>>> linux/src/drivers/scsi/scsi.c: scsi\_dev\_init - ->>>>>>> linux/dev/net/core/dev.c: net\_dev\_init - ->>>>>> linux/pcmcia-cs/glue/pcmcia.c: pcmcia\_init - ->>>>> i386/i386at/autoconf.c: probeio - ->>>>> i386/i386at/model\_dep.c: inittodr - ->>>>> i386/intel/pmap.c: pmap\_unmap\_page\_zero - ->>>> kern/task.c: task\_init - ->>>>> kern/syscall\_emulation.c: eml\_init - ->>>> kern/thread.c: thread\_init - ->>>>> i386/i386/pcb.c: pcb\_module\_init - ->>>>>> i386/i386/fpu.c: fpu\_module\_init - ->>>>>> i386/i386/iopb.c: iopb\_init - ->>>> kern/thread\_swap.c: swapper\_init - ->>>> kern/sched\_prim.c: recompute\_priorities - ->>>> kern/mach\_factor.c: compute\_mach\_factor - ->>>> kern/startup.c: start\_kernel\_threads - -[...] - ->>>> kern/startup.c: cpu\_launch\_first\_thread - ->>>>> i386/i386at/model\_dep.c: startrtclock - ->>>>>> i386/i386/pit.c: clkstart - ->>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL - ->>>>> i386/i386/pcb.c: load\_context - -[...] - -> kern/startup.c: start\_kernel\_threads - -> Threads get created. - ->> kern/sched\_prim.c: idle\_thread - ->> One for each CPU. - ->> kern/thread.c: reaper\_thread - ->> kern/thread\_swap.c: swapin\_thread - ->> kern/sched\_prim.c: sched\_thread - ->> [...] - ->> kern/bootstrap.c: bootstrap\_create - ->> [...] - ->> vm\_pageout - ->> Does not return. diff --git a/microkernel/mach/gnu_mach/building.mdwn b/microkernel/mach/gnu_mach/building.mdwn deleted file mode 100644 index 014d3e87..00000000 --- a/microkernel/mach/gnu_mach/building.mdwn +++ /dev/null @@ -1,114 +0,0 @@ -Additional to the following text, a further [[example]] has be posted. - - -# Building [[GNU_Mach]] from Source - -If you want to build the [[GNU_Mach]] kernel yourself instead of just using a -pre-built binary, follow these instructions. - -The unpacked source tree is around 20 MiB, and the build tree (with all drivers -enabled) is around 50 MiB. - -## Getting the Source Code - -### Developers's RCS - -See . - - $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach - -(Most probably you want to get hold of the *GNU Mach 1 branch* and not the -trunk, which is also what we've done above.) - -You then have to create the automatically generatable files: - - $ ( cd gnumach && autoreconf --install ) - -### What Debian is currently using - -See [here](http://packages.debian.net/source/unstable/gnumach). - - $ apt-get source gnumach - -Please see the Debian [[running/debian/FAQ]] before using `apt-get source`. - -## Preparing for the Build - -### ... on Debian systems - -Building GNU Mach requires the *build-essential* and *fakeroot* packages, their -dependencies and additional packages that are specified by the source gnumach -package: - - # apt-get install build-essential fakeroot - # apt-get build-dep gnumach - -### ... on non-Debian systems - -Apart from the case that you only want to install GNU Mach's header files (see -below), building GNU Mach requires you to have the Mach Interface Generator -installed. See [[building_MIG|mig/gnu_mig/building]] about how to do that, then come -back here. - -Additionally, building GNU Mach requires a C compiler, a standard C library and -your favourite flavor of awk (gawk) and GNU make. - -## Building and Installing - -### ... Debian `.deb` files - -Change into the directory with the downloaded / unpacked GNU Mach sources, e.g. - - $ cd gnumach-20050801 - -Start the build process with - - $ dpkg-buildpackage -us -uc -b -rfakeroot - -[[GNU_Mach]] is now building. To use the new kernel, you must install the -resulting `.deb` package which is located one directory above the build -directory and has a similar name as the build directory, e.g. - - # dpkg -i ../gnumach_20050801-4_hurd-i386.deb - -You can now reboot your computer and enjoy the new kernel. - -### [TODO] - -GNU Mach should be built in a separate directory: - - $ mkdir gnumach-build - $ cd gnumach-build - -Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure -it: - - $ [...]/gnumach-1-branch/configure [TODO] - -Build the kernel image: - - $ make gnumach.gz - -Optionally run the (tiny) test suite: - - $ make check - -You can then install and use `gnumach.gz`. - -[TODO.] - -### Installing only the Header Files - -GNU Mach should be built in a separate directory: - - $ mkdir gnumach-build - $ cd gnumach-build - -Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure -it: - - $ [...]/gnumach-1-branch/configure --prefix= - -Install the header files into e.g. `~/gnu/include/`: - - $ make DESTDIR=~/gnu install-data diff --git a/microkernel/mach/gnu_mach/building/example.mdwn b/microkernel/mach/gnu_mach/building/example.mdwn deleted file mode 100644 index 6da05c5b..00000000 --- a/microkernel/mach/gnu_mach/building/example.mdwn +++ /dev/null @@ -1,54 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - -## Compiling GNU Mach microkernel - -Host development system is IBM T41 running Debian Sarge 3.1r0a GNU/Linux. - -* gcc version: 3.3.5 -* GNU sed version: 4.1.2 -* GNU make version: 3.8 -* mig version: 1.3-4 - -Obtained gnumach-1-branch sources from cvs: - - export CVS_RSH="ssh" - cvs -z3 -d:ext:anoncvs@ savannah.gnu.org:/cvsroot/hurd co -r gnumach-1-branch gnumach - -Obtained mig_1.3-4_i386.deb from -http://www.hadrons.org/~guillem/debian/pool/main/mig/. Installed it using dpkg: - - dpkg -i mig_1.3-4_i386.deb - -Entered into the gnumach sources and did the following for compilation: - - mkdir build - cd build - ../configure --host=i386-unknown-gnu0.2 --build=i586-pc-linux-gnu \ - --enable-kdb --enable-ide - make - -The kernel file is created in the build directory. Move it to /boot on the -testing x86 system Hurd partition. Rename it as gnumach1 and compress it: - - mv kernel gnumach1 - gzip gnumach1 - -Add a new entry on the testing machine /boot/grub/menu.lst to boot the new -kernel. - - title GNU Hurd K10 Compiled gnumach - kernel (hd0,3)/boot/gnumach1.gz root=device:hd2s4 -s - module (hd0,3)/hurd/ext2fs.static--multiboot-command-line=${kernel-command-line} \\ - --host-priv-port=${host-port} --device-master-port=${device-port} \\ - --exec-server-task=${exec-task} -T typed ${root} $(task-create)$(task-resume) - module (hd0,3)/lib/ld.so.1 /hurd/exec $(exec-task=task-create) - -Reboot into the new compiled mygnumach1.gz kernel! diff --git a/microkernel/mach/gnu_mach/debugging.mdwn b/microkernel/mach/gnu_mach/debugging.mdwn deleted file mode 100644 index fa2a9d42..00000000 --- a/microkernel/mach/gnu_mach/debugging.mdwn +++ /dev/null @@ -1,68 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - -Mach has a built-in kernel debugger. -[Manual](http://www.gnu.org/software/hurd/gnumach-doc/Kernel-Debugger.html). - - -When you're [[running_a_system_in_QEMU|hurd/running/qemu]] you can directly -[use GDB on the running -kernel](http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC36). - - -Alternatively you can use an approach like this one: add the following code -snippet to `device/ds_routines.c`'s `ds_device_open` function, right at the top -of the function, and modify the code as needed. - - void D (char *s) - { - switch (s[0] - '0') - { - case 0: - printf ("Hello from %s!\n", __FUNCTION__); - break; - case 1: - printf ("%s: Invoking task_collect_scan.\n", __FUNCTION__); - extern void task_collect_scan (void); - task_collect_scan (); - break; - default: - printf ("No idea what you want me to do.\n"); - break; - } - } - - if (name && name[0] == 'D') - D (name + 1); - -Then boot your system and do something like this: - - # devprobe D0 - Hello from D! - # devprobe D1 - D: Invoking task_collect_scan. - # devprobe D2 - No idea what you want me to do. - -This is especially useful if you need to manually trigger some stuff inside the -running kernel, as with the *D1* example. - - -If you're doing real low level debugging, you might want to put variations of -the following snipped into the code, this code will write a `#` character at -line `[LINE]`, column `[COLUMN]` on the screen: - - *((char *) 0xb8000 + 2 * ([LINE] * 80 + [COLUMN])) = '#'; - halt_cpu (); - -The call of `halt_cpu` will -- as the name suggests -- halt the system -afterwards. This might be what you want or it might not, but it is needed at -some place when running the kernel inside QEMU, as QEMU somehow decides not to -update its display buffer anymore under certain conditions. diff --git a/microkernel/mach/gnu_mach/hardware_compatibility_list.mdwn b/microkernel/mach/gnu_mach/hardware_compatibility_list.mdwn deleted file mode 100644 index 09882467..00000000 --- a/microkernel/mach/gnu_mach/hardware_compatibility_list.mdwn +++ /dev/null @@ -1,111 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - -# CPU Architecture - -GNU Mach current only supports the `x86` (alias `ia32` or `i386`) architecture. - -`amd64`/`ix64` should work in `32-bit` compatibility mode. However, in practice -`amd64` systems seem to be troublesome more often than not. This is probably -related to the same (chipset-related) problems we often see with recent -machines; but it seems that `amd64` ones use problematic chipsets particularily -often. So far we haven't heard of similar problems with Intel's eqivalent -`ix64` (or `EM64T` as it used to be called) -- but maybe that just means fewer -people tried running the Hurd on such machines :-) - -Support for running GNU Mach (and a complete GNU/Hurd system) in a -[Xen](http://www.cl.cam.ac.uk/research/srg/netos/xen/) `domU` (again on `x86` -only) is [[being_worked_on|ports/xen]]. - -Read about further [[ports]]. - -# Memory - -GNU Mach will use a maximum of 1 GiB of RAM. If your system has more, -the surplus will silently be ignored. (In past times, this would hinder GNU -Mach from booting at all, but this has been fixed, so you no longer need to -apply GRUB's `uppermem` directive.) - -# Video Cards - -Debian distributes a version of [X.org](http://x.org/). If your video card driver -depends on a special kernel interface such as that provided by -the `agpgart` kernel module for the Linux kernel, then your video -card will only be supported by the VESA driver. - -Using an internal i815 videocard [won't -work](http://lists.debian.org/debian-hurd/2007/12/msg00007.html) (at least when -using the specialized driver), because of [missing AGP GART support in GNU -Mach](http://lists.debian.org/debian-hurd/2007/12/msg00011.html). - -# Sound - -No sound cards are supported at this time. - -# USB 1.1/2.0 - -USB is not supported at this time. - -However, USB-type keyboards and mice may (and have been reported to) work -nevertheless, given that the hardware / BIOS is doing emulation to the -supported legacy interfaces. - -# IEEE 1394 (Firewire) - -IEEE 1394 is not supported at this time - -# Storage - -All common IDE drives should work. Some drive geometries do not work, -e.g. drives with hundreds of GiB of storage space. If you find a specific IDE -drive that does not work, make a note of the model and technical specifications -here. - -[[toggle id="SATA" text="SATA drives may work in compatibility mode."]] - - -[[toggleable id="SATA" text=""" -This is how booting a [[GNU/Hurd_system|hurd]] will typically fail if GNU Mach -couldn't connect to the hard disk, e.g., in a SATA system without IDE -compatibility mode: - - start (hd0,3)/hurd/ext2fs.static: (hd0,3)/hurd/ext2fs.static - device:hd0s4: No such device or address - -There *may* be an option in the system's BIOS setup to configure enabling such -a compatibility mode. -"""]] - -# Device Drivers - -[GNU Mach Reference Manual, -Configuration](http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html) -contains a list of device drivers that are included in GNU Mach and elaborates -on the hardware devices they support. - -# User Success Reports - -These boards are known to work. Gnumach/Hurd has been installed and run on these board successfully. - -* ASUS P2B motherboard with an Intel PII 450MHz CPU with Intel Pro/100 NIC in PCI slot -* Intel SE-440BX motherboard -* VIA EPIA-M Mini-ITX motherboard with VIA Nehemiah C3 1Ghz processor. Onboard NIC (VIA Rhine) works good. -* Compaq Deskpro ENS, Pentium3 (666 MHz upgraded to 1 GHz), Intel i815 chipset, chipset integrated NIC (detected twice, but works fine with eth0; trying to access eth1 confuses the driver and makes the system unusable), Matrox Mystique 220 (PCI) graphics card. Also works with rtl8029 (NE2000 PCI) NIC when onboard NIC disabled in BIOS setup. -* Abit BX6 Rev. 2.0 with Celeron 400, after disabling "memory hole at 15MB" option in BIOS setup. (Otherwise, Mach detects only 15MiB of RAM, making Hurd run *extremely* slow and instable.) Should also work with PentiumII or Pentium3. - -# User Failure Reports - -Some people couldn't get these hardware combinations to work with Hurd. - -Note: The Debian GNU/Hurd installer actually runs on Linux, so it (almost) always works. The critical bit is booting after installation. - -* ASUS P5A motherboard and AMD K6-2 333MHz CPU - doesn't boot -* ASUS P2B-LS motherboard with an Intel PII-MMX 400 MHz CPU - this board had a defective onboard NIC (that could not be disable in BIOS) and working 3COM Etherlink III NIC in a PCI bus slot. This combination worked with GNU/Linux. The 3COM NIC is known to work with the Hurd. However, while gnumach/Hurd will boot on this system, it is confused by the defective onboard NIC and unable to use the 3COM NIC. Attempting to start networking generates a continous stream of eth0 and eth1 reset messages on the console that renders the system unusable. -* ASrock 775Twins-HDTV with a Pentium D 810 (533 MGz FSB/2600GHz core -- information no longer present on intel's site). Doesn't boot. diff --git a/microkernel/mach/gnu_mach/hardware_compatibility_list/discussion.mdwn b/microkernel/mach/gnu_mach/hardware_compatibility_list/discussion.mdwn deleted file mode 100644 index 69ca3190..00000000 --- a/microkernel/mach/gnu_mach/hardware_compatibility_list/discussion.mdwn +++ /dev/null @@ -1,4 +0,0 @@ -Further information may still be found on - -and could perhaps be incorporated into that page. ---[[tschwinge]] diff --git a/microkernel/mach/gnu_mach/open_issues.mdwn b/microkernel/mach/gnu_mach/open_issues.mdwn deleted file mode 100644 index 433ec3ef..00000000 --- a/microkernel/mach/gnu_mach/open_issues.mdwn +++ /dev/null @@ -1,19 +0,0 @@ -[[meta copyright="Copyright © 2008 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]]."]]"""]] - -[[meta title="Open Issues"]] - -This is a dumping ground for open issues for GNU Mach. - -[[inline -pages="microkernel/mach/gnumach/open_issues/* and !*/discussion" -show=0 -actions=yes -rootpage="microkernel/mach/gnumach/open_issues" postformtext="Add a new item titled:"]] diff --git a/microkernel/mach/gnu_mach/ports.mdwn b/microkernel/mach/gnu_mach/ports.mdwn deleted file mode 100644 index 00cdee8c..00000000 --- a/microkernel/mach/gnu_mach/ports.mdwn +++ /dev/null @@ -1,15 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - - * x86. This is the main port. - * [PowerPC](http://www.pjbruin.dds.nl/hurd/). Is not in a usable state. - * Alpha. Was once started, but isn't in a usable state either. - - * [[Xen]] diff --git a/microkernel/mach/gnu_mach/ports/xen.mdwn b/microkernel/mach/gnu_mach/ports/xen.mdwn deleted file mode 100644 index c492d9a0..00000000 --- a/microkernel/mach/gnu_mach/ports/xen.mdwn +++ /dev/null @@ -1,78 +0,0 @@ -[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] - -[[toc ]] - -## Xen dom0, hypervisor - -/!\ Now that GNU Mach handles PAE you can use a PAE-enabled hypervisor. - -You can either get binaries at or build them yourself. - -- Copy `gnumach-xen` and `hurd-modules` to your dom0 /boot. -- Copy `hurd` into `/etc/xen`, edit it for fixing access to your hurd / and swap - -## GNU/Hurd system - -/!\ You need an already installed GNU/Hurd system. - -If you have a free partition, you can fdisk to type 0x83, create a filesystem using: - - sudo mke2fs -b 4096 -I 128 -o hurd /dev/sda4 - -Replace /dev/sda4 with your partition. Install and use crosshurd to setup a GNU/Hurd system on this partition. - -## /etc/xen/hurd configuration - -Here is a sample /etc/xen/hurd configuration - - kernel = "/boot/gnumach-xen" - memory = 256 - disk = ['phy:sda4,hda,w'] - extra = "root=device:hd0" - vif = [ '' ] - ramdisk = "/boot/hurd-modules" - -Suggestions about [[networking_configuration]] are available. - -If you need stable MAC addresses, use a syntax like `vif = [ -'mac=00:16:3e:XX:XX:XX, bridge=br0' ]`. - -## Running Hurd with Xen - -To run Hurd with Xen, use: - - xm create -c hurd - -and gnumach should get started. Proceed with native-install. - - export TERM=mach - ./native-install - -- If `xm` complains about networking (`vif could not be connected`), it's Xen scripts' fault, see Xen documentation for how to configure the network. The simplest way is network-bridge with fixed IPs (note that you need the bridge-utils package for this). You can also just disable networking by commenting the vif line in the config. -- If `xm` complains `Error: (2, 'Invalid kernel', 'xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n')`, you most probably have a PAE-enabled hypervisor and a non-PAE gnumach. Either install and boot non-PAE hypervisor and kernel, or rebuilt gnumach in PAE mode. - -## Building from sources - -If you want to generate these images, first get the `gnumach-1-branch-Xen-branch` branch from gnumach CVS. -Then look for "Ugly" in `kern/bootstrap.c`, how to generate `hurd-modules` is explained there, and you'll have to fix `EXT2FS_SIZE` and `LD_SO_SIZE` by hand. -Then use - - ./configure --enable-platform=xen - make - -The current `hurd-modules` was built from the debian packages `hurd 20070606-2` and `libc0.3 2.6.1-1`. -/!\ This means that when using this image, your GNU/Hurd system also needs to be a glibc version 2.6-based one! - ---- - -[[Internals]]. - -[[GNU_Savannah_task 5468]], [[GNU_Savannah_task 6584]]. diff --git a/microkernel/mach/gnu_mach/ports/xen/internals.mdwn b/microkernel/mach/gnu_mach/ports/xen/internals.mdwn deleted file mode 100644 index 09e707ea..00000000 --- a/microkernel/mach/gnu_mach/ports/xen/internals.mdwn +++ /dev/null @@ -1,14 +0,0 @@ -[[meta copyright="Copyright © 2008 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]]."]]"""]] - -The port does use Xen's para-virtualized interface for device (ide, network, -etc.) access. - -[[Virtualization]]. diff --git a/microkernel/mach/gnu_mach/ports/xen/networking_configuration.mdwn b/microkernel/mach/gnu_mach/ports/xen/networking_configuration.mdwn deleted file mode 100644 index 71a72bac..00000000 --- a/microkernel/mach/gnu_mach/ports/xen/networking_configuration.mdwn +++ /dev/null @@ -1,105 +0,0 @@ -[[meta copyright="Copyright © 2008 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]]."]]"""]] - -[[toc ]] - -The Xen dom0 infrastructure provides for a bridged networking setup using shell -scripts to configure the bridging device properly and attach the domUs' virtual -interfaces to the bridge. However, we've [seen -problems](http://lists.gnu.org/archive/html/bug-hurd/2008-08/msg00023.html) -when using this approach, so to [solve these -issues](http://lists.gnu.org/archive/html/bug-hurd/2008-09/msg00071.html), -instead suggest the following configuration method (to achieve the same thing). - -This is for a Debian dom0. - -# */etc/network/interfaces* - -Comment out everything referencing your physical devices. Add this: - - auto br0 - iface br0 inet dhcp - bridge_ports regex (eth|vif).* noregex - -... or if you want to do the manual configuration dance: - - auto br0 - iface br0 inet static - bridge_ports regex (eth|vif).* noregex - address 192.168.10.60 - netmask 255.255.255.0 - [...] - -This needs a version of the `bridge-utils` package more recent than the current -Debian stable one ([[debbug 405215]]). (It's trivial to rebuild the `dpkg` of, -e.g., the Debian testing one on Debian stable.) - -# */etc/xen/xend-config.sxp* - -Make sure that only `(network-script network-dummy)` and `(vif-script -vif-bridge)` are activated and all other `(network-script network-WHATEVER)`, -respective `(vif-script vif-WHATEVER)` are commented out. - - -# Sample configuration files on Debian Lenny - -## /etc/xen/hurd on dom0 - - kernel = "/boot/gnumach-xen" - memory = 256 - disk = ['phy:sda5,hda,w'] - extra = "root=device:hd0" - vif = [ 'mac=00:16:3e:00:00:00, bridge=br0' ] - ramdisk = "/boot/hurd-modules" - -/dev/sda5 is an extended partition. br0 is bridge interface on dom0. - -## /etc/xen/xend-config.sxp on dom0 - - (network-script 'network-bridge netdev=br0') - (dom0-min-mem 196) - (dom0-cpus 0) - (vncpasswd '') - -## /etc/network/interfaces on dom0 - - auto br0 - iface br0 inet static - address 192.168.1.211 - network 192.168.1.0 - netmask 255.255.255.0 - broadcast 192.168.1.255 - gateway 192.168.1.1 - bridge_ports eth1 - -eth1 is the interface that is connected to the Internet on the LAN: - -## Doing settrans on domU - - settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.210 -g 192.168.1.1 -m 255.255.255.0 - -## /sbin/ifconfig on dom0 - - br0 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 - inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0 - inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link - UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 - RX packets:14187 errors:0 dropped:0 overruns:0 frame:0 - TX packets:9214 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:0 - RX bytes:936563 (914.6 KiB) TX bytes:746184 (728.6 KiB) - - eth1 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 - inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link - UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 - RX packets:34339 errors:0 dropped:0 overruns:0 frame:0 - TX packets:18526 errors:0 dropped:0 overruns:0 carrier:0 - collisions:0 txqueuelen:1000 - RX bytes:3019251 (2.8 MiB) TX bytes:1453672 (1.3 MiB) diff --git a/microkernel/mach/gnu_mach/projects.mdwn b/microkernel/mach/gnu_mach/projects.mdwn deleted file mode 100644 index 9ace6270..00000000 --- a/microkernel/mach/gnu_mach/projects.mdwn +++ /dev/null @@ -1,129 +0,0 @@ -[[meta copyright="Copyright © 2005, 2006, 2007, 2008 -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]]."]]"""]] - -This page is a place to keep track of ideas about things that may be improved -in GNU Mach, so that it'll evolve to a reliable microkernel for The Hurd, both -in terms of stability and performance. If you find anything missing here, -please feel free to add a entry with a short description. - -If you want to help with any of the task (thanks!), please send a mail to -*[[mailing_lists/bug-hurd]]* stating what task you wish to work on, -so that no duplicate efforts end up. - -# Active Branches - - * `gnumach-1-branch` is the main branch. - - * `gnumach-1-branch-Xen-branch` is a branch created by Samuel Thibault for - working on a [[ports/Xen]] port. - - * `gnumach-1-branch-gdb-branch` is a branch created by Michael Casadevall for - working on [[GDB_stubs]]. - - -# Task List - - * [[Clean_up_the_code]] - - * [[Open_Issues]] - - * Update the core architecture and drivers - - * Check what NetBSD, FreeBSD and Linux do with their host specific code - (i486, PPC, Sparc, ...). And if it might be wise to take that and use - it in GNU Mach. There is no need to worry about purely internal API's, - but the external ones shouldn't require any major changes. - - * Write a list of all functions provided by the host dependant code in - GNU Mach that gets used in the non-host specific code (kernel, IPC and - VM). - - * Once we have decided what the new internal API should look like, make a - list of the new API and the old one, and try to make things as - compatible as possible, but not at the expense of anything. - - * Implement Migrating Threads - - * Migrating Threads (MT) could improve IPC performance and making easier - the work of the scheduler. For more information, check - - - * Improve the external pagers interface - - * Implement read-ahead (huge I/O improvements expected). - - * Making this interface synchronous should improve I/O performance - significantly, without (almost) any drawbacks (we also get some - advantage from MT's). - - * Implement more paging eviction policies, so they fit better with usual - behaviour of the pagers. - - * Implement resource accounting for external pagers. - - * VM - - * Put it on user level (?) - - * Clean up the mess. - - * Provide a fast way to read/write from/to a memory object. - - * Simplify/normalise the code. - - * Simplify the IPC Semantics - - * There are a lot of things in GNU Mach's IPC that we don't need. Track - down those things, and get rid of them without requiring many changes - in the Hurd (the changes will affect MiG, but that is OK). - - * Temporary mappings for Client-Server memory transfers - - * Extend Mach's IPC to provide some kind of object which can represent a - range of memory that can temporarily be mapped into the servers address - space for sending/receiving data. This would allow us to avoid - excessive memory copies. - - * Find a new way to work with unaligned memory. - - * GDB remote debugging support - - * Implement support for GDB debugging via serial line and/or network. - Maybe this can be done together with the host-specific work above. - - See [[GDB_stubs]]. - - * Make it run as a [[UNIX]]/Linux executable. - - * Neal: - - here's a fun project: port the mach interface to Linux - (e.g., via kernel modifications) - or, to posix/glibc - (mmap, some minimal ptrace, etc.) - - * From the [Hurd bits at - sourceforge.net](http://sourceforge.net/projects/hurd): - , started by John - Tobey. Last time touched in 2003. Status completely unknown. - - * [README](http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/README?view=markup) - - -# Wish List - - * Interface for userspace non-critical drivers. - - * Sound Support - - * WLAN support (ipw2200) with WEP/WPA - - * ACPI support diff --git a/microkernel/mach/gnu_mach/projects/clean_up_the_code.mdwn b/microkernel/mach/gnu_mach/projects/clean_up_the_code.mdwn deleted file mode 100644 index 875bb8cd..00000000 --- a/microkernel/mach/gnu_mach/projects/clean_up_the_code.mdwn +++ /dev/null @@ -1,121 +0,0 @@ -[[meta copyright="Copyright © 2005, 2006, 2007, 2008 - 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]]."]]"""]] - -# Restructure the tree in a sane way - -Merge `linux/src` and `linux/dev`. But only if using a sane RCS, so leave it -as-is for now. Also, a bunch of (header) files from there may probably be -discarded. - - -# Remove dead files from the GNU Mach source tree - -For *exported* files (via `make install`), the plan is to first stick some -`#error This file is scheduled for removal. Write to if you -have a reason to have it kept available.` into them, and then actually remove -them after some months. - -For some of the internal header files (containing function prototypes and the -like), it might actually be useful to use them. (And then get rid of a bunch -of `extern ...` statements in other files.) - -This following list was assembled by putting such a `#error ...` line into each -of the `gnumach-1-branch`'s header files (exported and internal; save the -`linux/` ones (only internal) for simplicity), and then trying to build GNU -Mach until this would succeed again (by removing offending `#error ...`s), and -afterwards using the set of exported files for building a cross toolchain -(again still removing offending `#error ...`s). A very crude and imprecise -method. - -So, additionally to the list given below, there may actually be a bunch of -further files (also exported ones) that serve no real value, but are being -`#include`d through one way or another. - -* [[source_gnumach-1-branch ddb/db_expr.h]] - - Currently used, but copyright violation? Rewrite? - -* [[source_gnumach-1-branch ddb/db_print.h]] - - Copyright violation? Currently unused, but could be used in principle (or - be rewritten, to avoid the copyright oddity). - -* [[source_gnumach-1-branch ddb/tr.h]] - - Copyright violation. Unused. Remove. - -* [[source_gnumach-1-branch device/dev_master.h]] - - Might be usable for SMP? Remove otherwise. - -* [[source_gnumach-1-branch i386/i386/kttd_machdep.h]] - -* [[source_gnumach-1-branch i386/i386/sched_param.h]] - -* [[source_gnumach-1-branch i386/include/mach/i386/cthreads.h]] - - Was probably once exported, but is no longer. - -* [[source_gnumach-1-branch i386/include/mach/i386/ioccom.h]] - - Exported. - -* [[source_gnumach-1-branch include/device/audio_status.h]] - - Exported. - -* [[source_gnumach-1-branch include/device/tape_status.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/alert.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/boot.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/macro_help.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/multiboot.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/profil.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/profilparam.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach/exec/a.out.h]] - - Exported. - -* [[source_gnumach-1-branch include/mach_debug/pc_info.h]] - - Currently not exported, but was probably once meant to be. - -* [[source_gnumach-1-branch kern/act.h]] - -* [[source_gnumach-1-branch kern/refcount.h]] - -* [[source_gnumach-1-branch kern/shuttle.h]] - - -# Remove dead functions, variables, etc. from source files - - -# Rewrite ugly code diff --git a/microkernel/mach/gnu_mach/projects/gdb_stubs.mdwn b/microkernel/mach/gnu_mach/projects/gdb_stubs.mdwn deleted file mode 100644 index 9a11a82b..00000000 --- a/microkernel/mach/gnu_mach/projects/gdb_stubs.mdwn +++ /dev/null @@ -1,13 +0,0 @@ -[[meta copyright="Copyright © 2008 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]]."]]"""]] - - * - - * [ChangeLog.gdb](http://cvs.savannah.gnu.org/viewvc/gnumach/ChangeLog.gdb?root=hurd&view=markup&pathrev=gnumach-1-branch-gdb-branch) diff --git a/microkernel/mach/gnu_mach/reference_manual.mdwn b/microkernel/mach/gnu_mach/reference_manual.mdwn deleted file mode 100644 index 225ab176..00000000 --- a/microkernel/mach/gnu_mach/reference_manual.mdwn +++ /dev/null @@ -1,26 +0,0 @@ -[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -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]]."]]"""]] - -*The GNU Mach Reference Manual* documents the architecture, the usage and the -programming of the GNU Mach microkernel. At the moment, the manual documents -the interface completely, but is not very useful as a tutorial or introduction -into the Mach architecture. - - * [HTML version](http://www.gnu.org/software/hurd/gnumach-doc/index.html) - for browsing online, - * [PostScript - version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps) [around - 900KiB], - * [gzipped PostScript - version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps.gz) - [around 300KiB], - * [PDF version](http://www.gnu.org/software/hurd/gnumach-doc/mach.pdf) - [around 700KiB]. diff --git a/microkernel/mach/gnumach.mdwn b/microkernel/mach/gnumach.mdwn new file mode 100644 index 00000000..19e1ea53 --- /dev/null +++ b/microkernel/mach/gnumach.mdwn @@ -0,0 +1,80 @@ +[[meta copyright="Copyright © 2001, 2002, 2007, 2008 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 Mach is the microkernel that the [[GNU_Hurd|hurd]] system is based on. + +It is maintained by the Hurd developers for the GNU project and remains +compatible with [[Mach]] 3.0. + +The majority of GNU Mach's [[device_driver]]s are from Linux 2.0. They were +added using glue code, i.e., a Linux [[emulation]] layer in Mach. + +GNU Mach runs on x86 machines. See the +[[hardware_compatibility_list]] and information about +[[ports]] to other architectures. + + +# Advantages of GNU Mach + +GNU Mach is not the most advanced [[microkernel]] known to the planet, nor is +it the fastest or smallest, but it has a rich set of [[interface]]s and some +features which make it useful as the base of the [[Hurd]] system. + + * **it's free software** + + Anybody can use, modify, and redistribute it under the terms of the + [[GNU_General_Public_License_(GPL)|gpl]]. + + * **it's built to survive** + + As a [[microkernel]], GNU Mach doesn't implement a lot of the features + commonly found in an operating system, but only the bare minimum that is + required to implement a full operating system on top of it. This means + that a lot of the operating system code is maintained outside of GNU Mach, + and while this code may go through a complete redesign, the code of the + microkernel can remain comparatively stable. + + * **it's scalable** + + Mach is particularly well suited for SMP and network cluster techniques. + Thread support is provided at the kernel level, and the kernel itself takes + advantage of that. Network transparency at the [[IPC]] level makes + resources of the system available across machine boundaries (with NORMA + IPC, currently not available in GNU Mach). + + * **it exists** + + The Mach microkernel is real software that works Right Now. It is not a + research or a proposal. You don't have to wait at all before you can start + using and developing it. Mach has been used in many operating systems in + the past, usually as the base for a single UNIX server. In the GNU system, + Mach is the base of a functional multi-server operating system, the + [[Hurd]]. + + +# Booting + +To actually use the kernel and boot the GNU operating system, you need a boot +loader. Not all boot loaders are capable to boot the GNU system, you need one +that supports the multiboot standard. The bootloader of the GNU system is +[[GNU_GRUB|grub]], which supports a broad range of operating systems including +GNU/Hurd. + + +# Development + + * [[Reference_Manual]] + * [[Building]] + * [[Debugging]] + * [[Boot_Trace]] + * [[Projects]] + * [[Rules]] + * [[Open_Issues]] diff --git a/microkernel/mach/gnumach/boot_trace.mdwn b/microkernel/mach/gnumach/boot_trace.mdwn new file mode 100644 index 00000000..a08384f0 --- /dev/null +++ b/microkernel/mach/gnumach/boot_trace.mdwn @@ -0,0 +1,222 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +`if NCPUS > 1` stuff is not being considered so far. + + +> i386/i386at/boothdr.S: \_start + +> i386/i386at/boothdr.S: boot\_entry + +>> i386/i386at/model\_dep.c: c\_boot\_entry + +>>> i386/i386at/boothdr.S: discover\_x86\_cpu\_type + +>>> i386/i386at/model\_dep.c: i386at\_init + +>>>> i386/i386/pic.c: picinit + +>>>> i386/i386at/model\_dep.c: mem\_size\_init + +>>>> i386/intel/pmap.c: pmap\_bootstrap + +>>>> i386/i386/gdt.c: gdt\_init + +>>>> i386/i386/idt.c: idt\_init + +>>>> i386/i386at/int\_init.c: int\_init + +>>>> i386/i386/ldt.c: ldt\_init + +>>>> i386/i386/ktss.c: ktss\_init + +>>> kern/startup.c: setup\_main + +>>>> kern/debug.c: panic\_init + +>>>> kern/printf.c: printf\_init + +>>>> kern/sched\_prim.c: sched\_init + +>>>>> kern/sched\_prim.c: wait\_queue\_init + +>>>>> kern/processor.c: pset\_sys\_bootstrap + +>>>>> kern/ast.c: ast\_init + +>>>> vm/vm\_init.c: vm\_mem\_bootstrap + +>>>>> vm/vm\_resident.c: vm\_page\_bootstrap + +>>>>>> vm/vm\_resident.c: pmap\_startup + +>>>>> kern/zalloc.c: zone\_bootstrap + +>>>>> vm/vm\_object.c: vm\_object\_bootstrap + +>>>>>> vm/vm\_external.c: vm\_external\_module\_initialize + +>>>>> vm/vm\_map.c: vm\_map\_init + +>>>>> vm/vm\_kern.c: kmem\_init + +>>>>> i386/intel/pmap.c: pmap\_init + +>>>>> kern/zalloc.c: zone\_init + +>>>>> kern/kalloc.c: kalloc\_init + +>>>>> vm/vm\_fault.c: vm\_fault\_init + +>>>>> vm/vm\_resident.c: vm\_page\_module\_init + +>>>>> vm/memory\_object.c: memory\_manager\_default\_init + +>>>> ipc/ipc\_init.c: ipc\_bootstrap + +>>>>> ipc/ipc\_table.c: ipc\_table\_init + +>>>>> ipc/ipc\_notify.c: ipc\_notify\_init + +>>>>> ipc/ipc\_hash.c: ipc\_hash\_init + +>>>>> ipc/ipc\_marequest.c: ipc\_marequest\_init + +>>>> vm/vm\_init.c: vm\_mem\_init + +>>>>> vm/vm\_object.c: vm\_object\_init + +>>>> ipc/ipc\_init.c: ipc\_init + +>>>>> kern/ipc\_host.c: ipc\_host\_init + +>>>>>> kern/ipc\_host.c: ipc\_pset\_init + +>>>>>> kern/ipc\_host.c: ipc\_pset\_enable + +>>>>>> kern/ipc\_host.c: ipc\_processor\_init + +>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL + +>>>> kern/timer.c: init\_timers + +>>>> kern/mach\_clock.c: init\_timeout + +>>>> kern/xpr.c: xprbootstrap + +>>>> kern/time\_stamp.c: timestamp\_init + +>>>> kern/mach\_clock.c: mapable\_time\_init + +>>>> i386/i386at/model\_dep.c: machine\_init + +>>>>> device/cons.c: cninit + +>>>>> i386/i386/fpu.c: init\_fpu + +>>>>> linux/dev/init/main.c: linux\_init + +>>>>>> linux/dev/arch/i386/kernel/irq.c: init\_IRQ + +>>>>>>> linux/dev/arch/i386/kernel/irq.c: reserve\_mach\_irqs + +>>>>>> linux/dev/kernel/sched.c: linux\_sched\_init + +>>>>>> linux/dev/init/main.c: calibrate\_delay + +>>>>>> linux/dev/glue/kmem.c: linux\_kmem\_init + +>>>>>> linux/src/drivers/pci/pci.c: pci\_init + +>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_init + +>>>>>>> linux/src/drivers/pci/pci.c: scan\_bus + +>>>>>>> linux/src/arch/i386/kernel/bios32.c: pcibios\_fixup + +>>>>>> linux/dev/glue/net.c: linux\_net\_emulation\_init + +>>>>>> linux/dev/drivers/block/genhd.c: device\_setup + +>>>>>>> linux/dev/glue/block.c: blk\_dev\_init + +>>>>>>>> linux/src/drivers/block/ide.c: ide\_init + +>>>>>>>> linux/dev/drivers/block/floppy.c: floppy\_init + +>>>>>>> linux/src/drivers/scsi/scsi.c: scsi\_dev\_init + +>>>>>>> linux/dev/net/core/dev.c: net\_dev\_init + +>>>>>> linux/pcmcia-cs/glue/pcmcia.c: pcmcia\_init + +>>>>> i386/i386at/autoconf.c: probeio + +>>>>> i386/i386at/model\_dep.c: inittodr + +>>>>> i386/intel/pmap.c: pmap\_unmap\_page\_zero + +>>>> kern/task.c: task\_init + +>>>>> kern/syscall\_emulation.c: eml\_init + +>>>> kern/thread.c: thread\_init + +>>>>> i386/i386/pcb.c: pcb\_module\_init + +>>>>>> i386/i386/fpu.c: fpu\_module\_init + +>>>>>> i386/i386/iopb.c: iopb\_init + +>>>> kern/thread\_swap.c: swapper\_init + +>>>> kern/sched\_prim.c: recompute\_priorities + +>>>> kern/mach\_factor.c: compute\_mach\_factor + +>>>> kern/startup.c: start\_kernel\_threads + +[...] + +>>>> kern/startup.c: cpu\_launch\_first\_thread + +>>>>> i386/i386at/model\_dep.c: startrtclock + +>>>>>> i386/i386/pit.c: clkstart + +>>>>> i386/intel/pmap.h: PMAP\_ACTIVATE\_KERNEL + +>>>>> i386/i386/pcb.c: load\_context + +[...] + +> kern/startup.c: start\_kernel\_threads + +> Threads get created. + +>> kern/sched\_prim.c: idle\_thread + +>> One for each CPU. + +>> kern/thread.c: reaper\_thread + +>> kern/thread\_swap.c: swapin\_thread + +>> kern/sched\_prim.c: sched\_thread + +>> [...] + +>> kern/bootstrap.c: bootstrap\_create + +>> [...] + +>> vm\_pageout + +>> Does not return. diff --git a/microkernel/mach/gnumach/building.mdwn b/microkernel/mach/gnumach/building.mdwn new file mode 100644 index 00000000..9c075600 --- /dev/null +++ b/microkernel/mach/gnumach/building.mdwn @@ -0,0 +1,114 @@ +Additional to the following text, a further [[example]] has be posted. + + +# Building [[GNU_Mach|gnumach]] from Source + +If you want to build the [[GNU_Mach|gnumach]] kernel yourself instead of just using a +pre-built binary, follow these instructions. + +The unpacked source tree is around 20 MiB, and the build tree (with all drivers +enabled) is around 50 MiB. + +## Getting the Source Code + +### Developers's RCS + +See . + + $ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/hurd co -r gnumach-1-branch gnumach + +(Most probably you want to get hold of the *GNU Mach 1 branch* and not the +trunk, which is also what we've done above.) + +You then have to create the automatically generatable files: + + $ ( cd gnumach && autoreconf --install ) + +### What Debian is currently using + +See [here](http://packages.debian.net/source/unstable/gnumach). + + $ apt-get source gnumach + +Please see the Debian [[running/debian/FAQ]] before using `apt-get source`. + +## Preparing for the Build + +### ... on Debian systems + +Building GNU Mach requires the *build-essential* and *fakeroot* packages, their +dependencies and additional packages that are specified by the source gnumach +package: + + # apt-get install build-essential fakeroot + # apt-get build-dep gnumach + +### ... on non-Debian systems + +Apart from the case that you only want to install GNU Mach's header files (see +below), building GNU Mach requires you to have the Mach Interface Generator +installed. See [[building_MIG|mig/gnu_mig/building]] about how to do that, then come +back here. + +Additionally, building GNU Mach requires a C compiler, a standard C library and +your favourite flavor of awk (gawk) and GNU make. + +## Building and Installing + +### ... Debian `.deb` files + +Change into the directory with the downloaded / unpacked GNU Mach sources, e.g. + + $ cd gnumach-20050801 + +Start the build process with + + $ dpkg-buildpackage -us -uc -b -rfakeroot + +[[GNU_Mach|gnumach]] is now building. To use the new kernel, you must install the +resulting `.deb` package which is located one directory above the build +directory and has a similar name as the build directory, e.g. + + # dpkg -i ../gnumach_20050801-4_hurd-i386.deb + +You can now reboot your computer and enjoy the new kernel. + +### [TODO] + +GNU Mach should be built in a separate directory: + + $ mkdir gnumach-build + $ cd gnumach-build + +Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure +it: + + $ [...]/gnumach-1-branch/configure [TODO] + +Build the kernel image: + + $ make gnumach.gz + +Optionally run the (tiny) test suite: + + $ make check + +You can then install and use `gnumach.gz`. + +[TODO.] + +### Installing only the Header Files + +GNU Mach should be built in a separate directory: + + $ mkdir gnumach-build + $ cd gnumach-build + +Find the path to your GNU Mach sources (`[...]/gnumach-1-branch`) and configure +it: + + $ [...]/gnumach-1-branch/configure --prefix= + +Install the header files into e.g. `~/gnu/include/`: + + $ make DESTDIR=~/gnu install-data diff --git a/microkernel/mach/gnumach/building/example.mdwn b/microkernel/mach/gnumach/building/example.mdwn new file mode 100644 index 00000000..6da05c5b --- /dev/null +++ b/microkernel/mach/gnumach/building/example.mdwn @@ -0,0 +1,54 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +## Compiling GNU Mach microkernel + +Host development system is IBM T41 running Debian Sarge 3.1r0a GNU/Linux. + +* gcc version: 3.3.5 +* GNU sed version: 4.1.2 +* GNU make version: 3.8 +* mig version: 1.3-4 + +Obtained gnumach-1-branch sources from cvs: + + export CVS_RSH="ssh" + cvs -z3 -d:ext:anoncvs@ savannah.gnu.org:/cvsroot/hurd co -r gnumach-1-branch gnumach + +Obtained mig_1.3-4_i386.deb from +http://www.hadrons.org/~guillem/debian/pool/main/mig/. Installed it using dpkg: + + dpkg -i mig_1.3-4_i386.deb + +Entered into the gnumach sources and did the following for compilation: + + mkdir build + cd build + ../configure --host=i386-unknown-gnu0.2 --build=i586-pc-linux-gnu \ + --enable-kdb --enable-ide + make + +The kernel file is created in the build directory. Move it to /boot on the +testing x86 system Hurd partition. Rename it as gnumach1 and compress it: + + mv kernel gnumach1 + gzip gnumach1 + +Add a new entry on the testing machine /boot/grub/menu.lst to boot the new +kernel. + + title GNU Hurd K10 Compiled gnumach + kernel (hd0,3)/boot/gnumach1.gz root=device:hd2s4 -s + module (hd0,3)/hurd/ext2fs.static--multiboot-command-line=${kernel-command-line} \\ + --host-priv-port=${host-port} --device-master-port=${device-port} \\ + --exec-server-task=${exec-task} -T typed ${root} $(task-create)$(task-resume) + module (hd0,3)/lib/ld.so.1 /hurd/exec $(exec-task=task-create) + +Reboot into the new compiled mygnumach1.gz kernel! diff --git a/microkernel/mach/gnumach/debugging.mdwn b/microkernel/mach/gnumach/debugging.mdwn new file mode 100644 index 00000000..fa2a9d42 --- /dev/null +++ b/microkernel/mach/gnumach/debugging.mdwn @@ -0,0 +1,68 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +Mach has a built-in kernel debugger. +[Manual](http://www.gnu.org/software/hurd/gnumach-doc/Kernel-Debugger.html). + + +When you're [[running_a_system_in_QEMU|hurd/running/qemu]] you can directly +[use GDB on the running +kernel](http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC36). + + +Alternatively you can use an approach like this one: add the following code +snippet to `device/ds_routines.c`'s `ds_device_open` function, right at the top +of the function, and modify the code as needed. + + void D (char *s) + { + switch (s[0] - '0') + { + case 0: + printf ("Hello from %s!\n", __FUNCTION__); + break; + case 1: + printf ("%s: Invoking task_collect_scan.\n", __FUNCTION__); + extern void task_collect_scan (void); + task_collect_scan (); + break; + default: + printf ("No idea what you want me to do.\n"); + break; + } + } + + if (name && name[0] == 'D') + D (name + 1); + +Then boot your system and do something like this: + + # devprobe D0 + Hello from D! + # devprobe D1 + D: Invoking task_collect_scan. + # devprobe D2 + No idea what you want me to do. + +This is especially useful if you need to manually trigger some stuff inside the +running kernel, as with the *D1* example. + + +If you're doing real low level debugging, you might want to put variations of +the following snipped into the code, this code will write a `#` character at +line `[LINE]`, column `[COLUMN]` on the screen: + + *((char *) 0xb8000 + 2 * ([LINE] * 80 + [COLUMN])) = '#'; + halt_cpu (); + +The call of `halt_cpu` will -- as the name suggests -- halt the system +afterwards. This might be what you want or it might not, but it is needed at +some place when running the kernel inside QEMU, as QEMU somehow decides not to +update its display buffer anymore under certain conditions. diff --git a/microkernel/mach/gnumach/hardware_compatibility_list.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn new file mode 100644 index 00000000..09882467 --- /dev/null +++ b/microkernel/mach/gnumach/hardware_compatibility_list.mdwn @@ -0,0 +1,111 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +# CPU Architecture + +GNU Mach current only supports the `x86` (alias `ia32` or `i386`) architecture. + +`amd64`/`ix64` should work in `32-bit` compatibility mode. However, in practice +`amd64` systems seem to be troublesome more often than not. This is probably +related to the same (chipset-related) problems we often see with recent +machines; but it seems that `amd64` ones use problematic chipsets particularily +often. So far we haven't heard of similar problems with Intel's eqivalent +`ix64` (or `EM64T` as it used to be called) -- but maybe that just means fewer +people tried running the Hurd on such machines :-) + +Support for running GNU Mach (and a complete GNU/Hurd system) in a +[Xen](http://www.cl.cam.ac.uk/research/srg/netos/xen/) `domU` (again on `x86` +only) is [[being_worked_on|ports/xen]]. + +Read about further [[ports]]. + +# Memory + +GNU Mach will use a maximum of 1 GiB of RAM. If your system has more, +the surplus will silently be ignored. (In past times, this would hinder GNU +Mach from booting at all, but this has been fixed, so you no longer need to +apply GRUB's `uppermem` directive.) + +# Video Cards + +Debian distributes a version of [X.org](http://x.org/). If your video card driver +depends on a special kernel interface such as that provided by +the `agpgart` kernel module for the Linux kernel, then your video +card will only be supported by the VESA driver. + +Using an internal i815 videocard [won't +work](http://lists.debian.org/debian-hurd/2007/12/msg00007.html) (at least when +using the specialized driver), because of [missing AGP GART support in GNU +Mach](http://lists.debian.org/debian-hurd/2007/12/msg00011.html). + +# Sound + +No sound cards are supported at this time. + +# USB 1.1/2.0 + +USB is not supported at this time. + +However, USB-type keyboards and mice may (and have been reported to) work +nevertheless, given that the hardware / BIOS is doing emulation to the +supported legacy interfaces. + +# IEEE 1394 (Firewire) + +IEEE 1394 is not supported at this time + +# Storage + +All common IDE drives should work. Some drive geometries do not work, +e.g. drives with hundreds of GiB of storage space. If you find a specific IDE +drive that does not work, make a note of the model and technical specifications +here. + +[[toggle id="SATA" text="SATA drives may work in compatibility mode."]] + + +[[toggleable id="SATA" text=""" +This is how booting a [[GNU/Hurd_system|hurd]] will typically fail if GNU Mach +couldn't connect to the hard disk, e.g., in a SATA system without IDE +compatibility mode: + + start (hd0,3)/hurd/ext2fs.static: (hd0,3)/hurd/ext2fs.static + device:hd0s4: No such device or address + +There *may* be an option in the system's BIOS setup to configure enabling such +a compatibility mode. +"""]] + +# Device Drivers + +[GNU Mach Reference Manual, +Configuration](http://www.gnu.org/software/hurd/gnumach-doc/Configuration.html) +contains a list of device drivers that are included in GNU Mach and elaborates +on the hardware devices they support. + +# User Success Reports + +These boards are known to work. Gnumach/Hurd has been installed and run on these board successfully. + +* ASUS P2B motherboard with an Intel PII 450MHz CPU with Intel Pro/100 NIC in PCI slot +* Intel SE-440BX motherboard +* VIA EPIA-M Mini-ITX motherboard with VIA Nehemiah C3 1Ghz processor. Onboard NIC (VIA Rhine) works good. +* Compaq Deskpro ENS, Pentium3 (666 MHz upgraded to 1 GHz), Intel i815 chipset, chipset integrated NIC (detected twice, but works fine with eth0; trying to access eth1 confuses the driver and makes the system unusable), Matrox Mystique 220 (PCI) graphics card. Also works with rtl8029 (NE2000 PCI) NIC when onboard NIC disabled in BIOS setup. +* Abit BX6 Rev. 2.0 with Celeron 400, after disabling "memory hole at 15MB" option in BIOS setup. (Otherwise, Mach detects only 15MiB of RAM, making Hurd run *extremely* slow and instable.) Should also work with PentiumII or Pentium3. + +# User Failure Reports + +Some people couldn't get these hardware combinations to work with Hurd. + +Note: The Debian GNU/Hurd installer actually runs on Linux, so it (almost) always works. The critical bit is booting after installation. + +* ASUS P5A motherboard and AMD K6-2 333MHz CPU - doesn't boot +* ASUS P2B-LS motherboard with an Intel PII-MMX 400 MHz CPU - this board had a defective onboard NIC (that could not be disable in BIOS) and working 3COM Etherlink III NIC in a PCI bus slot. This combination worked with GNU/Linux. The 3COM NIC is known to work with the Hurd. However, while gnumach/Hurd will boot on this system, it is confused by the defective onboard NIC and unable to use the 3COM NIC. Attempting to start networking generates a continous stream of eth0 and eth1 reset messages on the console that renders the system unusable. +* ASrock 775Twins-HDTV with a Pentium D 810 (533 MGz FSB/2600GHz core -- information no longer present on intel's site). Doesn't boot. diff --git a/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn new file mode 100644 index 00000000..69ca3190 --- /dev/null +++ b/microkernel/mach/gnumach/hardware_compatibility_list/discussion.mdwn @@ -0,0 +1,4 @@ +Further information may still be found on + +and could perhaps be incorporated into that page. +--[[tschwinge]] diff --git a/microkernel/mach/gnumach/open_issues.mdwn b/microkernel/mach/gnumach/open_issues.mdwn new file mode 100644 index 00000000..433ec3ef --- /dev/null +++ b/microkernel/mach/gnumach/open_issues.mdwn @@ -0,0 +1,19 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +[[meta title="Open Issues"]] + +This is a dumping ground for open issues for GNU Mach. + +[[inline +pages="microkernel/mach/gnumach/open_issues/* and !*/discussion" +show=0 +actions=yes +rootpage="microkernel/mach/gnumach/open_issues" postformtext="Add a new item titled:"]] diff --git a/microkernel/mach/gnumach/ports.mdwn b/microkernel/mach/gnumach/ports.mdwn new file mode 100644 index 00000000..00cdee8c --- /dev/null +++ b/microkernel/mach/gnumach/ports.mdwn @@ -0,0 +1,15 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + + * x86. This is the main port. + * [PowerPC](http://www.pjbruin.dds.nl/hurd/). Is not in a usable state. + * Alpha. Was once started, but isn't in a usable state either. + + * [[Xen]] diff --git a/microkernel/mach/gnumach/ports/xen.mdwn b/microkernel/mach/gnumach/ports/xen.mdwn new file mode 100644 index 00000000..c492d9a0 --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen.mdwn @@ -0,0 +1,78 @@ +[[meta copyright="Copyright © 2007, 2008 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]]."]]"""]] + +[[toc ]] + +## Xen dom0, hypervisor + +/!\ Now that GNU Mach handles PAE you can use a PAE-enabled hypervisor. + +You can either get binaries at or build them yourself. + +- Copy `gnumach-xen` and `hurd-modules` to your dom0 /boot. +- Copy `hurd` into `/etc/xen`, edit it for fixing access to your hurd / and swap + +## GNU/Hurd system + +/!\ You need an already installed GNU/Hurd system. + +If you have a free partition, you can fdisk to type 0x83, create a filesystem using: + + sudo mke2fs -b 4096 -I 128 -o hurd /dev/sda4 + +Replace /dev/sda4 with your partition. Install and use crosshurd to setup a GNU/Hurd system on this partition. + +## /etc/xen/hurd configuration + +Here is a sample /etc/xen/hurd configuration + + kernel = "/boot/gnumach-xen" + memory = 256 + disk = ['phy:sda4,hda,w'] + extra = "root=device:hd0" + vif = [ '' ] + ramdisk = "/boot/hurd-modules" + +Suggestions about [[networking_configuration]] are available. + +If you need stable MAC addresses, use a syntax like `vif = [ +'mac=00:16:3e:XX:XX:XX, bridge=br0' ]`. + +## Running Hurd with Xen + +To run Hurd with Xen, use: + + xm create -c hurd + +and gnumach should get started. Proceed with native-install. + + export TERM=mach + ./native-install + +- If `xm` complains about networking (`vif could not be connected`), it's Xen scripts' fault, see Xen documentation for how to configure the network. The simplest way is network-bridge with fixed IPs (note that you need the bridge-utils package for this). You can also just disable networking by commenting the vif line in the config. +- If `xm` complains `Error: (2, 'Invalid kernel', 'xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n')`, you most probably have a PAE-enabled hypervisor and a non-PAE gnumach. Either install and boot non-PAE hypervisor and kernel, or rebuilt gnumach in PAE mode. + +## Building from sources + +If you want to generate these images, first get the `gnumach-1-branch-Xen-branch` branch from gnumach CVS. +Then look for "Ugly" in `kern/bootstrap.c`, how to generate `hurd-modules` is explained there, and you'll have to fix `EXT2FS_SIZE` and `LD_SO_SIZE` by hand. +Then use + + ./configure --enable-platform=xen + make + +The current `hurd-modules` was built from the debian packages `hurd 20070606-2` and `libc0.3 2.6.1-1`. +/!\ This means that when using this image, your GNU/Hurd system also needs to be a glibc version 2.6-based one! + +--- + +[[Internals]]. + +[[GNU_Savannah_task 5468]], [[GNU_Savannah_task 6584]]. diff --git a/microkernel/mach/gnumach/ports/xen/internals.mdwn b/microkernel/mach/gnumach/ports/xen/internals.mdwn new file mode 100644 index 00000000..09e707ea --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen/internals.mdwn @@ -0,0 +1,14 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +The port does use Xen's para-virtualized interface for device (ide, network, +etc.) access. + +[[Virtualization]]. diff --git a/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn new file mode 100644 index 00000000..71a72bac --- /dev/null +++ b/microkernel/mach/gnumach/ports/xen/networking_configuration.mdwn @@ -0,0 +1,105 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + +[[toc ]] + +The Xen dom0 infrastructure provides for a bridged networking setup using shell +scripts to configure the bridging device properly and attach the domUs' virtual +interfaces to the bridge. However, we've [seen +problems](http://lists.gnu.org/archive/html/bug-hurd/2008-08/msg00023.html) +when using this approach, so to [solve these +issues](http://lists.gnu.org/archive/html/bug-hurd/2008-09/msg00071.html), +instead suggest the following configuration method (to achieve the same thing). + +This is for a Debian dom0. + +# */etc/network/interfaces* + +Comment out everything referencing your physical devices. Add this: + + auto br0 + iface br0 inet dhcp + bridge_ports regex (eth|vif).* noregex + +... or if you want to do the manual configuration dance: + + auto br0 + iface br0 inet static + bridge_ports regex (eth|vif).* noregex + address 192.168.10.60 + netmask 255.255.255.0 + [...] + +This needs a version of the `bridge-utils` package more recent than the current +Debian stable one ([[debbug 405215]]). (It's trivial to rebuild the `dpkg` of, +e.g., the Debian testing one on Debian stable.) + +# */etc/xen/xend-config.sxp* + +Make sure that only `(network-script network-dummy)` and `(vif-script +vif-bridge)` are activated and all other `(network-script network-WHATEVER)`, +respective `(vif-script vif-WHATEVER)` are commented out. + + +# Sample configuration files on Debian Lenny + +## /etc/xen/hurd on dom0 + + kernel = "/boot/gnumach-xen" + memory = 256 + disk = ['phy:sda5,hda,w'] + extra = "root=device:hd0" + vif = [ 'mac=00:16:3e:00:00:00, bridge=br0' ] + ramdisk = "/boot/hurd-modules" + +/dev/sda5 is an extended partition. br0 is bridge interface on dom0. + +## /etc/xen/xend-config.sxp on dom0 + + (network-script 'network-bridge netdev=br0') + (dom0-min-mem 196) + (dom0-cpus 0) + (vncpasswd '') + +## /etc/network/interfaces on dom0 + + auto br0 + iface br0 inet static + address 192.168.1.211 + network 192.168.1.0 + netmask 255.255.255.0 + broadcast 192.168.1.255 + gateway 192.168.1.1 + bridge_ports eth1 + +eth1 is the interface that is connected to the Internet on the LAN: + +## Doing settrans on domU + + settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a 192.168.1.210 -g 192.168.1.1 -m 255.255.255.0 + +## /sbin/ifconfig on dom0 + + br0 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 + inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0 + inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:14187 errors:0 dropped:0 overruns:0 frame:0 + TX packets:9214 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:0 + RX bytes:936563 (914.6 KiB) TX bytes:746184 (728.6 KiB) + + eth1 Link encap:Ethernet HWaddr 00:19:d1:2e:06:33 + inet6 addr: fe80::219:d1ff:fe2e:633/64 Scope:Link + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:34339 errors:0 dropped:0 overruns:0 frame:0 + TX packets:18526 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:1000 + RX bytes:3019251 (2.8 MiB) TX bytes:1453672 (1.3 MiB) diff --git a/microkernel/mach/gnumach/projects.mdwn b/microkernel/mach/gnumach/projects.mdwn new file mode 100644 index 00000000..9ace6270 --- /dev/null +++ b/microkernel/mach/gnumach/projects.mdwn @@ -0,0 +1,129 @@ +[[meta copyright="Copyright © 2005, 2006, 2007, 2008 +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]]."]]"""]] + +This page is a place to keep track of ideas about things that may be improved +in GNU Mach, so that it'll evolve to a reliable microkernel for The Hurd, both +in terms of stability and performance. If you find anything missing here, +please feel free to add a entry with a short description. + +If you want to help with any of the task (thanks!), please send a mail to +*[[mailing_lists/bug-hurd]]* stating what task you wish to work on, +so that no duplicate efforts end up. + +# Active Branches + + * `gnumach-1-branch` is the main branch. + + * `gnumach-1-branch-Xen-branch` is a branch created by Samuel Thibault for + working on a [[ports/Xen]] port. + + * `gnumach-1-branch-gdb-branch` is a branch created by Michael Casadevall for + working on [[GDB_stubs]]. + + +# Task List + + * [[Clean_up_the_code]] + + * [[Open_Issues]] + + * Update the core architecture and drivers + + * Check what NetBSD, FreeBSD and Linux do with their host specific code + (i486, PPC, Sparc, ...). And if it might be wise to take that and use + it in GNU Mach. There is no need to worry about purely internal API's, + but the external ones shouldn't require any major changes. + + * Write a list of all functions provided by the host dependant code in + GNU Mach that gets used in the non-host specific code (kernel, IPC and + VM). + + * Once we have decided what the new internal API should look like, make a + list of the new API and the old one, and try to make things as + compatible as possible, but not at the expense of anything. + + * Implement Migrating Threads + + * Migrating Threads (MT) could improve IPC performance and making easier + the work of the scheduler. For more information, check + + + * Improve the external pagers interface + + * Implement read-ahead (huge I/O improvements expected). + + * Making this interface synchronous should improve I/O performance + significantly, without (almost) any drawbacks (we also get some + advantage from MT's). + + * Implement more paging eviction policies, so they fit better with usual + behaviour of the pagers. + + * Implement resource accounting for external pagers. + + * VM + + * Put it on user level (?) + + * Clean up the mess. + + * Provide a fast way to read/write from/to a memory object. + + * Simplify/normalise the code. + + * Simplify the IPC Semantics + + * There are a lot of things in GNU Mach's IPC that we don't need. Track + down those things, and get rid of them without requiring many changes + in the Hurd (the changes will affect MiG, but that is OK). + + * Temporary mappings for Client-Server memory transfers + + * Extend Mach's IPC to provide some kind of object which can represent a + range of memory that can temporarily be mapped into the servers address + space for sending/receiving data. This would allow us to avoid + excessive memory copies. + + * Find a new way to work with unaligned memory. + + * GDB remote debugging support + + * Implement support for GDB debugging via serial line and/or network. + Maybe this can be done together with the host-specific work above. + + See [[GDB_stubs]]. + + * Make it run as a [[UNIX]]/Linux executable. + + * Neal: + + here's a fun project: port the mach interface to Linux + (e.g., via kernel modifications) + or, to posix/glibc + (mmap, some minimal ptrace, etc.) + + * From the [Hurd bits at + sourceforge.net](http://sourceforge.net/projects/hurd): + , started by John + Tobey. Last time touched in 2003. Status completely unknown. + + * [README](http://hurd.cvs.sourceforge.net/hurd/gnumach-otop/README?view=markup) + + +# Wish List + + * Interface for userspace non-critical drivers. + + * Sound Support + + * WLAN support (ipw2200) with WEP/WPA + + * ACPI support diff --git a/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn new file mode 100644 index 00000000..875bb8cd --- /dev/null +++ b/microkernel/mach/gnumach/projects/clean_up_the_code.mdwn @@ -0,0 +1,121 @@ +[[meta copyright="Copyright © 2005, 2006, 2007, 2008 + 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]]."]]"""]] + +# Restructure the tree in a sane way + +Merge `linux/src` and `linux/dev`. But only if using a sane RCS, so leave it +as-is for now. Also, a bunch of (header) files from there may probably be +discarded. + + +# Remove dead files from the GNU Mach source tree + +For *exported* files (via `make install`), the plan is to first stick some +`#error This file is scheduled for removal. Write to if you +have a reason to have it kept available.` into them, and then actually remove +them after some months. + +For some of the internal header files (containing function prototypes and the +like), it might actually be useful to use them. (And then get rid of a bunch +of `extern ...` statements in other files.) + +This following list was assembled by putting such a `#error ...` line into each +of the `gnumach-1-branch`'s header files (exported and internal; save the +`linux/` ones (only internal) for simplicity), and then trying to build GNU +Mach until this would succeed again (by removing offending `#error ...`s), and +afterwards using the set of exported files for building a cross toolchain +(again still removing offending `#error ...`s). A very crude and imprecise +method. + +So, additionally to the list given below, there may actually be a bunch of +further files (also exported ones) that serve no real value, but are being +`#include`d through one way or another. + +* [[source_gnumach-1-branch ddb/db_expr.h]] + + Currently used, but copyright violation? Rewrite? + +* [[source_gnumach-1-branch ddb/db_print.h]] + + Copyright violation? Currently unused, but could be used in principle (or + be rewritten, to avoid the copyright oddity). + +* [[source_gnumach-1-branch ddb/tr.h]] + + Copyright violation. Unused. Remove. + +* [[source_gnumach-1-branch device/dev_master.h]] + + Might be usable for SMP? Remove otherwise. + +* [[source_gnumach-1-branch i386/i386/kttd_machdep.h]] + +* [[source_gnumach-1-branch i386/i386/sched_param.h]] + +* [[source_gnumach-1-branch i386/include/mach/i386/cthreads.h]] + + Was probably once exported, but is no longer. + +* [[source_gnumach-1-branch i386/include/mach/i386/ioccom.h]] + + Exported. + +* [[source_gnumach-1-branch include/device/audio_status.h]] + + Exported. + +* [[source_gnumach-1-branch include/device/tape_status.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/alert.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/boot.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/macro_help.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/multiboot.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/profil.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/profilparam.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach/exec/a.out.h]] + + Exported. + +* [[source_gnumach-1-branch include/mach_debug/pc_info.h]] + + Currently not exported, but was probably once meant to be. + +* [[source_gnumach-1-branch kern/act.h]] + +* [[source_gnumach-1-branch kern/refcount.h]] + +* [[source_gnumach-1-branch kern/shuttle.h]] + + +# Remove dead functions, variables, etc. from source files + + +# Rewrite ugly code diff --git a/microkernel/mach/gnumach/projects/gdb_stubs.mdwn b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn new file mode 100644 index 00000000..9a11a82b --- /dev/null +++ b/microkernel/mach/gnumach/projects/gdb_stubs.mdwn @@ -0,0 +1,13 @@ +[[meta copyright="Copyright © 2008 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]]."]]"""]] + + * + + * [ChangeLog.gdb](http://cvs.savannah.gnu.org/viewvc/gnumach/ChangeLog.gdb?root=hurd&view=markup&pathrev=gnumach-1-branch-gdb-branch) diff --git a/microkernel/mach/gnumach/reference_manual.mdwn b/microkernel/mach/gnumach/reference_manual.mdwn new file mode 100644 index 00000000..225ab176 --- /dev/null +++ b/microkernel/mach/gnumach/reference_manual.mdwn @@ -0,0 +1,26 @@ +[[meta copyright="Copyright © 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +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]]."]]"""]] + +*The GNU Mach Reference Manual* documents the architecture, the usage and the +programming of the GNU Mach microkernel. At the moment, the manual documents +the interface completely, but is not very useful as a tutorial or introduction +into the Mach architecture. + + * [HTML version](http://www.gnu.org/software/hurd/gnumach-doc/index.html) + for browsing online, + * [PostScript + version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps) [around + 900KiB], + * [gzipped PostScript + version](http://www.gnu.org/software/hurd/gnumach-doc/mach.ps.gz) + [around 300KiB], + * [PDF version](http://www.gnu.org/software/hurd/gnumach-doc/mach.pdf) + [around 700KiB]. diff --git a/microkernel/mach/history.mdwn b/microkernel/mach/history.mdwn index 8f4b528b..a8951737 100644 --- a/microkernel/mach/history.mdwn +++ b/microkernel/mach/history.mdwn @@ -41,7 +41,7 @@ Meanwhile, OSKit became unmaintained, thus posing more of a burden on than being In 2005 Gianluca Guida started a different attempt to use the osenv interface with minimal changes to GNU Mach 1.x, thus allowing use of the generic driver interface while importing as little of the umaintained OSKit code as possible. However, there turned out to be serious problems with OSKit, so this attempt was abandoned as well. Today, GNU Mach development focuses on the 1.x branch again -- see also this -list of [[gnu_mach/projects]]. +list of [[gnumach/projects]]. # Status of the project diff --git a/microkernel/mach/mig/documentation.mdwn b/microkernel/mach/mig/documentation.mdwn index a0bbbe14..8afad31c 100644 --- a/microkernel/mach/mig/documentation.mdwn +++ b/microkernel/mach/mig/documentation.mdwn @@ -66,7 +66,7 @@ pp. 67--77." # Further Relevant Documentation - * The [[GNU_Mach_Reference_Manual|gnu_mach/reference_manual]], espacially + * The [[GNU_Mach_Reference_Manual|gnumach/reference_manual]], espacially [Chapter 4, Inter Process Communication](http://www.gnu.org/software/hurd/gnumach-doc/Inter-Process-Communication.html), which, for example, explains how the `dealloc` flag diff --git a/microkernel/mach/mig/gnu_mig/building.mdwn b/microkernel/mach/mig/gnu_mig/building.mdwn index 8b553b6b..f92f7dbe 100644 --- a/microkernel/mach/mig/gnu_mig/building.mdwn +++ b/microkernel/mach/mig/gnu_mig/building.mdwn @@ -31,7 +31,7 @@ Building the Mach Interface Generator requires the _build-essential_ and _fakero Building the Mach Interface Generator requires a C compiler, a standard C library (with corresponding header files) and your favourite flavor of awk (gawk), yacc (bison), lex (flex) and make. Additionally, you need to have GNU Mach's header files installed. See -[[mach/gnu_mach/building]] about how to do that, then come back here. +[[mach/gnumach/building]] about how to do that, then come back here. ## Building and Installing diff --git a/news/2008-11-14.mdwn b/news/2008-11-14.mdwn index ab8d2f24..1e2c8802 100644 --- a/news/2008-11-14.mdwn +++ b/news/2008-11-14.mdwn @@ -10,5 +10,5 @@ is included in the section entitled [[Samuel_Thibault|samuelthibault]] has implemented support for the PAE feature offered by modern x86 processors. This largely faciliates the deployment of -GNU/Hurd systems running as a [[Xen_domU|microkernel/mach/gnu_mach/ports/xen]] +GNU/Hurd systems running as a [[Xen_domU|microkernel/mach/gnumach/ports/xen]] on top of a standard Debian GNU/Linux Xen dom0, for example. diff --git a/sidebar.mdwn b/sidebar.mdwn index 6a132e6d..b7acb592 100644 --- a/sidebar.mdwn +++ b/sidebar.mdwn @@ -23,7 +23,7 @@ Hurd! * *[[hurd/Running]]*"]] * **[[microkernel/Mach]]**[[if test="destpage(microkernel/mach*)" then=" * *[[microkernel/mach/Documentation]]* - * *[[microkernel/mach/GNU_Mach]]*"]] + * *[[GNU_Mach|microkernel/mach/gnumach]]*"]] * *[[microkernel/mach/MIG]]*[[if test="destpage(microkernel/mach/mig*)" then=" * [[microkernel/mach/mig/GNU_MIG]]"]] -- cgit v1.2.3