diff --git a/recipes/kernel/init.rc b/recipes/kernel/init.rc
index 25c5ba031d069ad03a6d605cd0f1e89c7d32a79c..dedda2d0f735554e96dd3965eac0831931cf5952 100644
--- a/recipes/kernel/init.rc
+++ b/recipes/kernel/init.rc
@@ -6,8 +6,9 @@ randd
 vesad T T G
 stdio display:1
 ps2d us
+ramfs logging
 pcid /etc/pcid/initfs.toml
-redoxfs --uuid $REDOXFS_UUID file
+redoxfs --uuid $REDOXFS_UUID file $REDOXFS_BLOCK
 cd file:
 export PATH file:/bin
 run.d /etc/init.d
diff --git a/recipes/kernel/kernel_ld.sh b/recipes/kernel/kernel_ld.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0f82b89d6ab2a9b0a0f3e08ec34b48478a9fbeb1
--- /dev/null
+++ b/recipes/kernel/kernel_ld.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+set -ex
+
+LD="$1"
+shift
+
+if "${LD}" -z use-gs-for-tls 2>&1 |
+grep "warning: -z use-gs-for-tls ignored" &> /dev/null
+then
+	echo "Please update your prefix:" >&2
+	echo "  rm -rf prefix" >&2
+	echo "  make prefix" >&2
+	exit 1
+fi
+
+exec "${LD}" -z use-gs-for-tls "$@"
diff --git a/recipes/kernel/recipe.sh b/recipes/kernel/recipe.sh
index b30cc51c685b6068c02c671881973f70fb4e58dd..d2b9dd6b508510d9cebc575193ed0e26c9e45821 100644
--- a/recipes/kernel/recipe.sh
+++ b/recipes/kernel/recipe.sh
@@ -5,15 +5,17 @@ function recipe_build {
     export INITFS_FOLDER="$(realpath ../sysroot)"
     mkdir -pv "$INITFS_FOLDER/etc"
     cp -v "$(realpath ../init.rc)" "$INITFS_FOLDER/etc/init.rc"
-    xargo rustc \
+    cargo rustc \
         --lib \
         --target "${ARCH}-unknown-none" \
         --release \
+		-Z build-std=core,alloc \
         -- \
         -C soft-float \
         -C debuginfo=2 \
+		-C lto \
         --emit link=libkernel.a
-    "${LD}" \
+    ../kernel_ld.sh "${LD}" \
         --gc-sections \
         -z max-page-size=0x1000 \
         -T "linkers/${ARCH}.ld" \