summaryrefslogtreecommitdiff
path: root/microkernel/mach/gnumach
diff options
context:
space:
mode:
Diffstat (limited to 'microkernel/mach/gnumach')
-rw-r--r--microkernel/mach/gnumach/building.mdwn28
-rw-r--r--microkernel/mach/gnumach/debugging.mdwn41
-rw-r--r--microkernel/mach/gnumach/memory_management.mdwn1
-rw-r--r--microkernel/mach/gnumach/projects/mach_5.mdwn10
4 files changed, 60 insertions, 20 deletions
diff --git a/microkernel/mach/gnumach/building.mdwn b/microkernel/mach/gnumach/building.mdwn
index aed87046..b23985ac 100644
--- a/microkernel/mach/gnumach/building.mdwn
+++ b/microkernel/mach/gnumach/building.mdwn
@@ -19,16 +19,19 @@ enabled) is around 50 MiB.
## Getting the Source Code
-You can either use the git repository (see <http://git.savannah.gnu.org/git/hurd/>),
+You can either use the git repository (see <https://git.savannah.gnu.org/git/hurd/>),
$ git clone https://git.savannah.gnu.org/git/hurd/gnumach.git/
+ $ cd gnumach
+ $ autoreconf --install
-... or get the Debian sources, if you're using Debian. (See
+... or get the Debian sources to build a Debian package, if you're using Debian. (See
[here](http://packages.debian.net/source/unstable/gnumach).)
$ apt source gnumach
+ $ cd gnumach-XXXXXXXX
-## On Debian Systems:
+## Building a `.deb` package on Debian Systems:
### Preparing for the Build
@@ -40,34 +43,29 @@ and some additional dependencies specified by the gnumach source package:
### Building and Installing ... Debian `.deb` files
-Change into the directory with the downloaded / unpacked GNU Mach sources,
+Start the build process with
- $ cd gnumach-XXXXXXXX
+ $ dpkg-buildpackage -us -uc -b
-Start the build process with
+But to get it built faster, you probably want to only build the most common uniprocessor variant:
- $ dpkg-buildpackage -us -uc -b -rfakeroot
+ $ dpkg-buildpackage -us -uc -b -Ppkg.gnumach.onlyup
[[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:
- # dpkg -i ../gnumach_XXXXXXXX-X_hurd-i386.deb
+ # dpkg -i ../gnumach-image-1.8-486_*_hurd-i386.deb
You can now reboot your computer and enjoy the new kernel.
-## On non-Debian Systems:
+## Building from the git repository:
### Preparing for the Build
Building GNU Mach requires a C compiler, a _static_ 32 bit standard C library,
your favourite flavor of awk (gawk) and GNU make.
-First, create the configuration files:
-
- $ cd gnumach
- $ autoreconf --install
-
GNU Mach (and the associated headers) need be built in a separate build directory:
$ mkdir build
@@ -77,7 +75,7 @@ Run configure:
$ ../configure --prefix=
-If building on a 64 bit host system,
+If building on a Linux 64 bit host system,
you need a number of additional settings to force a 32 bit build:
$ ../configure --prefix= --host=i686-gnu LD=i686-linux-gnu-ld CC=i686-linux-gnu-gcc
diff --git a/microkernel/mach/gnumach/debugging.mdwn b/microkernel/mach/gnumach/debugging.mdwn
index a134b618..bcff970e 100644
--- a/microkernel/mach/gnumach/debugging.mdwn
+++ b/microkernel/mach/gnumach/debugging.mdwn
@@ -73,6 +73,10 @@ and then type continue, to let Mach continue execution. The debugger will be ent
struct db_watchpoint watch = { .task = NULL, .loaddr= 0x40e, .hiaddr = 0x40e+2, .link = NULL};
db_set_hw_watchpoint(&watch, 0);
+To discover what an arbitrary address points to, try
+
+ whatis 0x123400
+
# GDB in QEMU
When you're [[running_a_system_in_QEMU|hurd/running/qemu]] you can directly
@@ -128,6 +132,43 @@ working directory. For example:
## [[open_issues/debugging_gnumach_startup_qemu_gdb]]
+## Debug 64-bit gnumach
+
+[[build|microkernel/mach/gnumach/building/]] 64-bit gnumach with:
+
+ $ export CFLAGS=-g
+ $ ../configure --enable-kdb ...
+
+run a spare Hurd vm (prepare for data loss in vm):
+
+* `kvm -net user,hostfwd=tcp:127.0.0.1:2222-:22 -net nic,model=e1000 -drive file=$(echo debian-hurd*.img),cache=writeback -m 1G`
+* `cd gnumach/build`
+* `scp -P 2222 gnumach.gz user@127.0.0.1:/home/user/`
+* You may copy `gnumach.gz` (also create new grub entry) or replace using `mv /home/user/gnumach.gz /boot/gnumach-xxx.gz`
+* Shutdown vm.
+* Append `console=com0` in boot menu and switch to console mode in qemu. (We have known issues with vga output for 64-bit.)
+* You may load only required modules for debugging.
+* `kvm -s -S -net user,hostfwd=tcp:127.0.0.1:2222-:22 -net nic,model=e1000 -drive file=$(echo debian-hurd*.img),cache=writeback -m 1G` (note: `-s -S` added.)
+* `gdb ./gnumach`
+* `(gdb) target remote :1234`
+* Press `c` to continue booting.
+
+
+example `/boot/grub/grub.cfg`:
+
+ multiboot /boot/gnumach-1.8-486.gz root=part:2:device:hd0 console=com0
+ ...
+ echo 'Loading the Hurd ...'
+ module /hurd/ext2fs.static ext2fs --readonly \
+ --multiboot-command-line='${kernel-command-line}' \
+ \
+ --host-priv-port='${host-port}' --device-master-port='${device-port}' \
+ --exec-server-task='${exec-task}' -T typed '${root}' \
+ '$(fs-task=task-create)' '$(task-resume)'
+ module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'
+
+
+
# Code Inside the Kernel
diff --git a/microkernel/mach/gnumach/memory_management.mdwn b/microkernel/mach/gnumach/memory_management.mdwn
index 477f0a18..6eca2bce 100644
--- a/microkernel/mach/gnumach/memory_management.mdwn
+++ b/microkernel/mach/gnumach/memory_management.mdwn
@@ -13,6 +13,7 @@ License|/fdl]]."]]"""]]
[[!toc]]
+A related page is the [[open_issues/resource_management_problems]].
# IRC, freenode, #hurd, 2011-02-15
diff --git a/microkernel/mach/gnumach/projects/mach_5.mdwn b/microkernel/mach/gnumach/projects/mach_5.mdwn
index 7b59170b..d7355f4b 100644
--- a/microkernel/mach/gnumach/projects/mach_5.mdwn
+++ b/microkernel/mach/gnumach/projects/mach_5.mdwn
@@ -54,11 +54,11 @@ rewrite rights and pointers to out-of-band memory, it has to parse the
message. As type information and values are interleaved, it has to
iterate over the whole message.
-Furthermore, there are two kinds of type descriptors, mach_msg_type_t
-and mach_msg_type_long_t. The reason for this is that the amount of
-data that can be described using mach_msg_type_t is just 131072 byte.
-This is because msgt_size is an 8-bit value describing the size of one
-element in bits, and msgt_number is an 12-bit value describing the
+Furthermore, there are two kinds of type descriptors, `mach_msg_type_t`
+and `mach_msg_type_long_t`. The reason for this is that the amount of
+data that can be described using `mach_msg_type_t` is just 131072 byte.
+This is because `msgt_size` is an 8-bit value describing the size of one
+element in bits, and `msgt_number` is an 12-bit value describing the
number of items.
### Required change to the message format