From d7be0fc7747c63aa8cebf7cb8f57a2ab74d72bc9 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 27 Sep 2016 21:56:29 -0600 Subject: [PATCH] Build with filesystem --- .gitignore | 1 + Makefile | 64 +++++++++++++++++++++------------ bootloader/x86_64/harddrive.asm | 2 ++ initfs/etc/init.rc | 3 +- schemes/redoxfs | 2 +- 5 files changed, 47 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 6738f91..3d6f0d2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ Cargo.lock build target initfs/bin +filesystem/bin diff --git a/Makefile b/Makefile index 5ae454e..cccdca4 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ clean: cargo clean --manifest-path programs/coreutils/Cargo.toml cargo clean --manifest-path schemes/example/Cargo.toml rm -rf initfs/bin + rm -rf filesystem/bin rm -rf build FORCE: @@ -74,7 +75,7 @@ else %.list: % objdump -C -M intel -D $< > $@ -$(KBUILD)/harddrive.bin: $(KBUILD)/kernel bootloader/$(ARCH)/** +$(KBUILD)/harddrive.bin: $(KBUILD)/kernel $(BUILD)/filesystem.bin bootloader/$(ARCH)/** nasm -f bin -o $@ -D ARCH_$(ARCH) -ibootloader/$(ARCH)/ bootloader/$(ARCH)/harddrive.asm qemu: $(KBUILD)/harddrive.bin @@ -147,44 +148,47 @@ initfs/bin/%: programs/%/Cargo.toml programs/%/src/** $(BUILD)/libstd.rlib strip $@ rm $@.d -initfs/bin/%: programs/coreutils/Cargo.toml programs/coreutils/src/bin/%.rs $(BUILD)/libstd.rlib - mkdir -p initfs/bin - $(CARGO) rustc --manifest-path $< --bin $* $(CARGOFLAGS) -o $@ - strip $@ - rm $@.d - initfs/bin/%: schemes/%/Cargo.toml schemes/%/src/** $(BUILD)/libstd.rlib mkdir -p initfs/bin $(CARGO) rustc --manifest-path $< --bin $* $(CARGOFLAGS) -o $@ strip $@ rm $@.d -drivers: \ +initfs_drivers: \ initfs/bin/ahcid \ initfs/bin/pcid \ initfs/bin/ps2d \ initfs/bin/vesad -coreutils: \ - initfs/bin/cat \ - initfs/bin/echo \ - initfs/bin/env \ - initfs/bin/ls \ - initfs/bin/printenv \ - initfs/bin/pwd \ - initfs/bin/realpath - -schemes: \ +initfs_schemes: \ initfs/bin/example \ initfs/bin/redoxfs +filesystem/bin/%: programs/%/Cargo.toml programs/%/src/** $(BUILD)/libstd.rlib + mkdir -p filesystem/bin + $(CARGO) rustc --manifest-path $< $(CARGOFLAGS) -o $@ + strip $@ + rm $@.d + +filesystem/bin/%: programs/coreutils/Cargo.toml programs/coreutils/src/bin/%.rs $(BUILD)/libstd.rlib + mkdir -p filesystem/bin + $(CARGO) rustc --manifest-path $< --bin $* $(CARGOFLAGS) -o $@ + strip $@ + rm $@.d + +coreutils: \ + filesystem/bin/cat \ + filesystem/bin/echo \ + filesystem/bin/env \ + filesystem/bin/ls \ + filesystem/bin/printenv \ + filesystem/bin/pwd \ + filesystem/bin/realpath + $(BUILD)/initfs.rs: \ initfs/bin/init \ - initfs/bin/ion \ - initfs/bin/login \ - drivers \ - coreutils \ - schemes + initfs_drivers \ + initfs_schemes echo 'use collections::BTreeMap;' > $@ echo 'pub fn gen() -> BTreeMap<&'"'"'static [u8], (&'"'"'static [u8], bool)> {' >> $@ echo ' let mut files: BTreeMap<&'"'"'static [u8], (&'"'"'static [u8], bool)> = BTreeMap::new();' >> $@ @@ -197,3 +201,17 @@ $(BUILD)/initfs.rs: \ find initfs -type f -o -type l | cut -d '/' -f2- | sort | awk '{printf(" files.insert(b\"%s\", (include_bytes!(\"../../initfs/%s\"), false));\n", $$0, $$0)}' >> $@ echo ' files' >> $@ echo '}' >> $@ + +$(BUILD)/filesystem.bin: \ + coreutils \ + filesystem/bin/ion \ + filesystem/bin/login + rm -rf $@ $(BUILD)/filesystem/ + echo exit | cargo run --manifest-path schemes/redoxfs/Cargo.toml --bin redoxfs-utility $@ + mkdir -p $(BUILD)/filesystem/ + cargo run --manifest-path schemes/redoxfs/Cargo.toml --bin redoxfs-fuse $@ $(BUILD)/filesystem/ & + sleep 2 + -cp -RL initfs/* $(BUILD)/filesystem/ + sync + -fusermount -u $(BUILD)/filesystem/ + rm -rf $(BUILD)/filesystem/ diff --git a/bootloader/x86_64/harddrive.asm b/bootloader/x86_64/harddrive.asm index c0f228b..b2c0255 100644 --- a/bootloader/x86_64/harddrive.asm +++ b/bootloader/x86_64/harddrive.asm @@ -17,3 +17,5 @@ kernel_file: .end: .length equ kernel_file.end - kernel_file .length_sectors equ .length / 512 + +incbin "build/userspace/filesystem.bin" diff --git a/initfs/etc/init.rc b/initfs/etc/init.rc index d4e8892..d48e4cc 100644 --- a/initfs/etc/init.rc +++ b/initfs/etc/init.rc @@ -1,4 +1,5 @@ initfs:bin/vesad initfs:bin/ps2d initfs:bin/pcid initfs:etc/pcid.toml -initfs:bin/login display: initfs:bin/ion +initfs:bin/redoxfs disk:0 +file:bin/login display: file:bin/ion diff --git a/schemes/redoxfs b/schemes/redoxfs index 11f3485..9bd5d69 160000 --- a/schemes/redoxfs +++ b/schemes/redoxfs @@ -1 +1 @@ -Subproject commit 11f3485173cf63d5beea42e9e1ce519d503c56a6 +Subproject commit 9bd5d69776e2df6a831e775631549aafcc5597af