apps,nanos-lite,loader: use fs api to load the first prog
This commit is contained in:
parent
b3f91f17e3
commit
3cfde6d300
|
@ -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)__
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue