apps,nanos-lite,loader: use fs api to load the first prog

This commit is contained in:
Zihao Yu 2017-08-03 23:59:53 +08:00
parent b3f91f17e3
commit 3cfde6d300
3 changed files with 20 additions and 16 deletions

View File

@ -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)__

View File

@ -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

View File

@ -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;
}