From 3cfde6d30029d446ecbcaddfe890a5cf7de482d7 Mon Sep 17 00:00:00 2001 From: Zihao Yu Date: Thu, 3 Aug 2017 23:59:53 +0800 Subject: [PATCH] apps,nanos-lite,loader: use fs api to load the first prog --- Makefile.compile | 1 + apps/nanos-lite/Makefile | 26 ++++++++++++++------------ apps/nanos-lite/src/loader.c | 9 +++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Makefile.compile b/Makefile.compile index 8598a533..662f875e 100644 --- a/Makefile.compile +++ b/Makefile.compile @@ -16,6 +16,7 @@ CC = $(CROSS_COMPILE)gcc CXX = $(CROSS_COMPILE)g++ LD = $(CROSS_COMPILE)ld OBJCOPY = $(CROSS_COMPILE)objcopy +READELF = $(CROSS_COMPILE)readelf ISA_DEF = __ISA_$(shell echo $(ISA) | tr a-z A-Z)__ diff --git a/apps/nanos-lite/Makefile b/apps/nanos-lite/Makefile index cc65baa0..eb0704d9 100644 --- a/apps/nanos-lite/Makefile +++ b/apps/nanos-lite/Makefile @@ -3,20 +3,22 @@ SRCS = $(shell find -L ./src/ -name "*.c" -o -name "*.cpp" -o -name "*.S") LIBS = klib include $(AM_HOME)/Makefile.app -NANOS_MAX_SIZE = 0 #1048576 FSIMG_PATH = $(NAVY_HOME)/fsimg FSIMG_FILES = $(shell find $(FSIMG_PATH) -type f) RAMDISK_FILE = build/ramdisk.img -.PHONY: fsimg update +.PHONY: update -fsimg: +update-fsimg: $(MAKE) -C $(NAVY_HOME) ISA=$(ISA) + for f in $(FSIMG_FILES); do \ + if $(READELF) -h $$f 2> /dev/null > /dev/null; then \ + $(OBJCOPY) --set-section-flags .bss=alloc,contents -O binary $$f; \ + fi \ + done -$(FSIMG_FILES): fsimg - -#src/files.h: $(FSIMG_FILES) -# wc -c $(FSIMG_FILES) | grep -v 'total$$' | sed -e 's+ $(FSIMG_PATH)+ +' | awk -v sum=$(NANOS_MAX_SIZE) '{print "\x7b\x22" $$2 "\x22\x2c " $$1 "\x2c " sum "\x7d\x2c";sum += $$1}' > $@ +src/files.h: update-fsimg + @wc -c $(FSIMG_FILES) | grep -v 'total$$' | sed -e 's+ $(FSIMG_PATH)+ +' | awk -v sum=0 '{print "\x7b\x22" $$2 "\x22\x2c " $$1 "\x2c " sum "\x7d\x2c";sum += $$1}' > $@ src/initrd.S: $(RAMDISK_FILE) touch $@ @@ -24,10 +26,10 @@ src/initrd.S: $(RAMDISK_FILE) src/syscall.h: $(NAVY_HOME)/libs/libos/src/syscall.h ln -sf $^ $@ -#$(RAMDISK_FILE): $(FSIMG_FILES) -# cat $^ > $@ +$(RAMDISK_FILE): update-fsimg + @cat $(FSIMG_FILES) > $@ -$(RAMDISK_FILE): $(NAVY_HOME)/tests/hello/build/hello-x86 - $(OBJCOPY) --set-section-flags .bss=alloc,contents -O binary $^ $@ +#$(RAMDISK_FILE): $(NAVY_HOME)/tests/hello/build/hello-x86 +# $(OBJCOPY) --set-section-flags .bss=alloc,contents -O binary $^ $@ -update: src/initrd.S src/syscall.h +update: src/initrd.S src/syscall.h src/files.h diff --git a/apps/nanos-lite/src/loader.c b/apps/nanos-lite/src/loader.c index f49b56f7..235f1ab4 100644 --- a/apps/nanos-lite/src/loader.c +++ b/apps/nanos-lite/src/loader.c @@ -2,7 +2,7 @@ #include "memory.h" #include "fs.h" -#define INIT_FILE "/bin/pal" +#define INIT_FILE "/bin/hello" void ramdisk_read(void *, off_t, size_t); @@ -11,9 +11,10 @@ void ramdisk_read(void *, off_t, size_t); uintptr_t loader() { Log("Loading user program %s...", INIT_FILE); - extern uint8_t ramdisk_start; - extern uint8_t ramdisk_end; - ramdisk_read((void *)0x4000000, 0, &ramdisk_end - &ramdisk_start); + int fd = fs_open(INIT_FILE, 0, 0); + ssize_t len = fs_read(fd, (void *)0x4000000, 0x10000000); // read many enough + fs_close(fd); + Log("Read %d bytes", len); return 0x4000000; }