From 0c56ae16e892b274326d086649d4e2d1f1996049 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 25 Feb 2019 12:10:16 -0700 Subject: [PATCH] Add support for building as a coreboot payload --- .gitmodules | 3 + Makefile | 2 + bootloader-coreboot | 1 + config/coreboot.toml | 304 +++++++++++++++++++++++++++++++++++++++++++ initfs_coreboot.toml | 27 ++++ mk/disk.mk | 6 + mk/initfs.mk | 8 ++ mk/kernel.mk | 12 ++ 8 files changed, 363 insertions(+) create mode 160000 bootloader-coreboot create mode 100644 config/coreboot.toml create mode 100644 initfs_coreboot.toml diff --git a/.gitmodules b/.gitmodules index 6048492..045ef57 100644 --- a/.gitmodules +++ b/.gitmodules @@ -34,3 +34,6 @@ path = relibc url = https://gitlab.redox-os.org/redox-os/relibc.git branch = master +[submodule "bootloader-coreboot"] + path = bootloader-coreboot + url = https://gitlab.redox-os.org/redox-os/bootloader-coreboot.git diff --git a/Makefile b/Makefile index 50be1b1..8256035 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,8 @@ include mk/config.mk all: build/harddrive.bin +coreboot: build/coreboot.elf + live: build/livedisk.bin iso: build/livedisk.iso diff --git a/bootloader-coreboot b/bootloader-coreboot new file mode 160000 index 0000000..f88d1c9 --- /dev/null +++ b/bootloader-coreboot @@ -0,0 +1 @@ +Subproject commit f88d1c95e27c4ae6ce5bcc6ffeaf561811c88d47 diff --git a/config/coreboot.toml b/config/coreboot.toml new file mode 100644 index 0000000..6d1c247 --- /dev/null +++ b/config/coreboot.toml @@ -0,0 +1,304 @@ +# This is the default configuration file + +# General settings +[general] +# Do not prompt if settings are not defined +prompt = false + +# Package settings +[packages] +#acid = {} +#audiod = {} +#autoconf = {} +#automake = {} +#bash = {} +#binutils = {} +#ca-certificates = {} +#cairo = {} +#cairodemo = {} +#cargo = {} +#cleye = {} +#cmatrix = {} +#contain = {} +coreutils = {} +#cpal = {} +#curl = {} +#dash = {} +#diffutils = {} +#dosbox = {} +#drivers = {} +#drivers-041 = {} +#duktape = {} +#eduke32 = {} +#exampled = {} +#expat = {} +#extrautils = {} +#fd = {} +#ffmpeg = {} +#findutils = {} +#freeciv = {} +#freedoom = {} +#freeglut = {} +#freetype = {} +#friar = {} # mio patch +#game-2048 = {} +#games = {} +#gawk = {} +#gcc = {} +#gears = {} +#generaluser-gs = {} +#gettext = {} +#gigalomania = {} +#git = {} +#glib = {} +#glium = {} +#glutin = {} +#gnu-binutils = {} +#gnu-grep = {} +#gnu-make = {} +#gstreamer = {} +#harfbuzz = {} +#hematite = {} +#init = {} +#installer = {} +ion = {} +ipcd = {} +#jansson = {} +#keyboard-sfx = {} +#lci = {} +#libc-bench = {} +#libffi = {} +#libiconv = {} +#libjpeg = {} +#liborbital = {} +#libpng = {} +#libsodium = {} +#llvm = {} +#logd = {} +#lua = {} +#mdp = {} +#mesa = {} +#mesa_glu = {} +#miniserve = {} +#nasm = {} +#ncdu = {} +#ncurses = {} +#ncursesw = {} +#netdb = {} +#netstack = {} +#netsurf = {} +#netutils = {} +#newlib = {} +#newlibtest = {} +nulld = {} +#openjazz = {} +#openssl = {} +#openttd = {} +#openttd-opengfx = {} +#openttd-openmsx = {} +#openttd-opensfx = {} +orbdata = {} +orbital = {} +orbterm = {} +orbutils = {} +#osdemo = {} +#pastel = {} +#patch = {} +#pcre = {} +#periodictable = {} +#perl = {} +#pixelcannon = {} +#pixman = {} +#pkgutils = {} +#powerline = {} +#prboom = {} +ptyd = {} +#python = {} +#qemu = {} +randd = {} +#readline = {} # ncurses +#redoxfs = {} +#redox-ssh = {} +#relibc = {} +#ripgrep = {} +#rodioplay = {} +#rs-nes = {} +#rust = {} +#rust64 = {} +#rust-cairo = {} +#rust-cairo-demo = {} +#rustual-boy = {} +#schismtracker = {} +#scummvm = {} +#sdl = {} +#sdl2 = {} +#sdl_gfx = {} +#sdl_image = {} +#sdl_mixer = {} +#sdl_ttf = {} +#sdl-player = {} +#sed = {} +#servo = {} +#shellstorm = {} +#smith = {} +#sodium = {} +#sopwith = {} +#ssh = {} +#syobonaction = {} +#terminfo = {} +#termplay = {} +#timidity = {} +#ttf-hack = {} +#userutils = {} +uutils = {} +#vim = {} +#vttest = {} +#webrender = {} +#winit = {} +#xz = {} +zerod = {} +#zlib = {} + +# User settings +[users.root] +password = "password" +uid = 0 +gid = 0 +name = "root" +home = "/root" + +[users.user] +# Password is unset +password = "" + +[[files]] +path = "/etc/init.d/00_base" +data = """ +nulld +zerod +randd +ipcd +#logd +ptyd +#pcid /etc/pcid/filesystem.toml +""" + +# [[files]] +# path = "/etc/init.d/10_net" +# data = """ +# smolnetd +# dnsd +# dhcpd -b +# """ + +[[files]] +path = "/etc/init.d/20_orbital" +data = """ +#audiod +orbital display:2/activate orblogin launcher +""" + +# [[files]] +# path = "/etc/init.d/30_console" +# data = """ +# getty display:2 +# getty debug: -J +# """ +# +# [[files]] +# path = "/etc/net/dns" +# data = """ +# 208.67.222.222 +# """ +# +# [[files]] +# path = "/etc/net/ip" +# data = """ +# 10.0.2.15 +# """ +# +# [[files]] +# path = "/etc/net/ip_router" +# data = """ +# 10.0.2.2 +# """ +# +# [[files]] +# path = "/etc/net/ip_subnet" +# data = """ +# 255.255.255.0 +# """ +# +# [[files]] +# path = "/etc/net/mac" +# data = """ +# 54-52-00-ab-cd-ef +# """ +# +# [[files]] +# path = "/etc/pkg.d/50_redox" +# data = "https://static.redox-os.org/pkg" + +[[files]] +path = "/etc/group" +data = """ +root;0;root +user;1000;user +sudo;1;user +""" + +[[files]] +path = "/etc/hostname" +data = """ +redox +""" + +[[files]] +path = "/etc/issue" +data = """ +########## Redox OS ########## +# Login with the following: # +# `user` # +# `root`:`password` # +############################## + +""" + +[[files]] +path = "/etc/motd" +data = """ +Welcome to Redox OS! + +""" + +[[files]] +path = "/usr/bin" +data = "/bin" +symlink = true + +[[files]] +path = "/usr/games" +data = "/games" +symlink = true + +[[files]] +path = "/usr/include" +data = "/include" +symlink = true + +[[files]] +path = "/usr/lib" +data = "/lib" +symlink = true + +[[files]] +path = "/usr/share" +data = "/share" +symlink = true + +[[files]] +path = "/tmp" +data = "" +directory= true +# 0o1777 +mode = 1023 diff --git a/initfs_coreboot.toml b/initfs_coreboot.toml new file mode 100644 index 0000000..25f2548 --- /dev/null +++ b/initfs_coreboot.toml @@ -0,0 +1,27 @@ +# This is the default configuration file + +# General settings +[general] +# Do not prompt if settings are not defined +prompt = false + +# Package settings +[packages] +drivers = {} +init = {} +redoxfs = {} + +[[files]] +path="/etc/init.rc" +data=""" +export PATH /bin +export TMPDIR /tmp +vesad T G +stdio display:1 +ps2d us +pcid /etc/pcid/initfs.toml +redoxfs disk/live: file +cd file: +export PATH file:/bin +run.d /etc/init.d +""" diff --git a/mk/disk.mk b/mk/disk.mk index aaa65d1..ef1d062 100644 --- a/mk/disk.mk +++ b/mk/disk.mk @@ -24,6 +24,12 @@ build/livedisk.iso: build/livedisk.bin.gz build/iso/ isohybrid $@ +bootloader-coreboot/build/bootloader: build/kernel_coreboot + $(MAKE) -C bootloader-coreboot clean build/bootloader KERNEL="$(ROOT)/$<" + +build/coreboot.elf: bootloader-coreboot/build/bootloader + cp $< $@ + bootloader-efi/build/redox_bootloader/boot.efi: $(MAKE) -C bootloader-efi build/redox_bootloader/boot.efi diff --git a/mk/initfs.mk b/mk/initfs.mk index 1229218..59bb6d6 100644 --- a/mk/initfs.mk +++ b/mk/initfs.mk @@ -6,6 +6,14 @@ build/initfs.tag: initfs.toml prefix cargo run --manifest-path installer/Cargo.toml -- $(INSTALLER_FLAGS) -c $< build/initfs/ touch $@ +build/initfs_coreboot.tag: initfs_coreboot.toml prefix + rm -f build/libkernel_coreboot.a + rm -rf build/initfs_coreboot + mkdir -p build/initfs_coreboot + export PATH="$(PREFIX_PATH):$$PATH" && \ + cargo run --manifest-path installer/Cargo.toml -- $(INSTALLER_FLAGS) -c $< build/initfs_coreboot/ + touch $@ + build/initfs_live.tag: initfs_live.toml prefix rm -f build/libkernel_live.a rm -rf build/initfs_live diff --git a/mk/kernel.mk b/mk/kernel.mk index 39f477d..505491c 100644 --- a/mk/kernel.mk +++ b/mk/kernel.mk @@ -4,6 +4,12 @@ build/libkernel.a: kernel/Cargo.lock kernel/Cargo.toml kernel/src/* kernel/src/* cd kernel && \ xargo rustc --lib --target $(KTARGET) --release -- -C soft-float -C debuginfo=2 --emit link=../$@ +build/libkernel_coreboot.a: kernel/Cargo.toml kernel/src/* kernel/src/*/* kernel/src/*/*/* kernel/src/*/*/*/* build/initfs_coreboot.tag + export PATH="$(PREFIX_PATH):$$PATH" && \ + export INITFS_FOLDER=$(ROOT)/build/initfs_coreboot && \ + cd kernel && \ + xargo rustc --lib --target $(KTARGET) --release --features live -- -C soft-float -C debuginfo=2 --emit link=../$@ + build/libkernel_live.a: kernel/Cargo.toml kernel/src/* kernel/src/*/* kernel/src/*/*/* kernel/src/*/*/*/* build/initfs_live.tag export PATH="$(PREFIX_PATH):$$PATH" && \ export INITFS_FOLDER=$(ROOT)/build/initfs_live && \ @@ -16,6 +22,12 @@ build/kernel: kernel/linkers/$(ARCH).ld build/libkernel.a $(OBJCOPY) --only-keep-debug $@ $@.sym && \ $(OBJCOPY) --strip-debug $@ +build/kernel_coreboot: kernel/linkers/$(ARCH).ld build/libkernel_coreboot.a build/live.o + export PATH="$(PREFIX_PATH):$$PATH" && \ + $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_coreboot.a build/live.o && \ + $(OBJCOPY) --only-keep-debug $@ $@.sym && \ + $(OBJCOPY) --strip-debug $@ + build/kernel_live: kernel/linkers/$(ARCH).ld build/libkernel_live.a build/live.o export PATH="$(PREFIX_PATH):$$PATH" && \ $(LD) --gc-sections -z max-page-size=0x1000 -T $< -o $@ build/libkernel_live.a build/live.o && \