diff --git a/ports/fesrv.hash b/ports/fesrv.hash deleted file mode 100644 index 0559a13..0000000 --- a/ports/fesrv.hash +++ /dev/null @@ -1 +0,0 @@ -f3880fddb60b77e7af5bc03abfef751db0e1faf6 diff --git a/ports/fesrv.port b/ports/fesrv.port deleted file mode 100644 index e03103a..0000000 --- a/ports/fesrv.port +++ /dev/null @@ -1,11 +0,0 @@ -LICENSE := BSD -VERSION := ceb56f29aacf1ff8a9997e9a57b855936ba00fd6 -DOWNLOADS := riscv-fesrv.git - -URL(riscv-fesrv) := https://github.com/riscv/riscv-fesvr.git -REV(riscv-fesrv) := ceb56f29aacf1ff8a9997e9a57b855936ba00fd6 - -DIR(riscv-fesrv) := src/app/fesrv - -PATCHES := src/app/fesrv/patches/*.patch -PATCH_OPT := -N -p1 -d ${DIR(riscv-fesrv)} diff --git a/run/fesrv.run b/run/fesrv.run deleted file mode 100644 index 4929655..0000000 --- a/run/fesrv.run +++ /dev/null @@ -1,54 +0,0 @@ -# -# Build -# - -build { core init app/fesrv } - -create_boot_directory - -# -# Generate config -# - -install_config { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } - -# -# Boot image -# - -build_boot_image { core init fesrv riscv-image.elf libm.lib.so stdcxx.lib.so libc.lib.so vfs.lib.so ld.lib.so } - -append qemu_args " -nographic " - -run_genode_until forever diff --git a/src/app/fesrv/README b/src/app/fesrv/README deleted file mode 100644 index a2a8f9f..0000000 --- a/src/app/fesrv/README +++ /dev/null @@ -1,79 +0,0 @@ -Introduction -############ - -Fesrv is a port of the RISCV frontend server, which transports elf -images to the RISCV core for execution. - -This document describes how to connect to the zedboard and configure -uboot for use with tftp. Assuming a riscv elf image exists, it shows -the steps to load this on the RISCV using through the Genode port of -fesrv runnnig no the zedboard arm core. - -Thus there are 2 cpu's: an ARM and a RISCV. The RISCV should be loaded -through the ARM core. Therefore an Genode image (uImage) for the ARM -core should be created, which then loads a second image to the -RISCV. The image is loaded on the RISCV using our port of the fesrv -port. - -Preparation -########### - -This document assumes you have a Zedboard which boots with a Riscv -image configured at the FPGA. - -Connect the to the uart of the zedboard and open a terminal using picocom: - -! $ sudo picocom -i -f h -b 115200 /dev/ttyACM0 - -This has been tested with the following version of uBoot: - -! U-Boot 2014.07-01982-gf634657-dirty (Sep 29 2014 - 14:52:40) -! arm-xilinx-linux-gnueabi-gcc (Sourcery CodeBench Lite 2013.11-53) 4.8.1 -! GNU ld (Sourcery CodeBench Lite 2013.11-53) 2.23.52.20130912 - - -Uboot environment variables should be set as follows at the uBoot prompt: - -! > env set bootcmd="tftpboot 0x3000000 uImage ;bootm 0x3000000" -! > env save - -And boot with the command below (or reset the zedboard). - -! > boot - -The directory where the resulting ARM uImage that should be copied -should be exposed via TFTP. This could be the -build/hw_zedboard/var/run/hello - -With atftp this could be done as follows: - -! $ sudo atftpd --mcast-switch-client -v --no-fork --daemon --logfile - build/hw_zedboard/var/run/hello/ - -Usage -##### - -Create a riscv compatible elf image, with the code that should run on -the RISCV core. Let's call this image riscv-image.elf. This image -should be kept on disc and is included later on in the -buildprocess. - -Now handle the build of the Arm zedboard image: - -! $ git clone -! $ cd -! $ cd repos -! $ git clone git@turing:fesrv.git -! $ cd .. -! $ ./tool/create_builddir hw_zedboard -! $ cd build/hw_zedboard -! $ echo 'REPOSITORIES += $(GENODE_DIR)/repos/fesrv' >> etc/build.conf -! $ echo 'RUN_OPT += --include image/uboot' >> etc/build.conf -! $ cd ../.. -! $ for port in fesrv stdcxx libc; do ./tool/ports/prepare_port $port; done -! $ cd build/hw_zedboard -! $ cp bin/ -! $ make run/fesrv - -Optionally you can modify repos/fesrv/run/fesrv.run according to -needs, or use bits and pieces fo the fesrv.run within the project at -hand. diff --git a/src/app/fesrv/linux_syscalls.cc b/src/app/fesrv/linux_syscalls.cc deleted file mode 100644 index 6e0d86c..0000000 --- a/src/app/fesrv/linux_syscalls.cc +++ /dev/null @@ -1,69 +0,0 @@ -/// -/// \file linux_syscalls.cc -/// \author Menno Valkema -/// \date 2016-05-17 -/// -/// \brief Dummy implementation of nonexistend linux system calls -/// - -/// -/// Copyright (c) 2016, Cyber Security Labs B.V. -/// All rights reserved. -/// -/// Redistribution and use in source and binary forms, with or without -/// modification, are permitted provided that the following conditions are met: -/// 1. Redistributions of source code must retain the above copyright -/// notice, this list of conditions and the following disclaimer. -/// 2. Redistributions in binary form must reproduce the above copyright -/// notice, this list of conditions and the following disclaimer in the -/// documentation and/or other materials provided with the distribution. -/// 3. All advertising materials mentioning features or use of this software -/// must display the following acknowledgement: -/// This product includes software developed by the Cyber Security Labs B.V.. -/// 4. Neither the name of Cyber Security Labs B.V. nor the -/// names of its contributors may be used to endorse or promote products -/// derived from this software without specific prior written permission. -/// -/// THIS SOFTWARE IS PROVIDED BY CYBER SECURITY LABS B.V. ''AS IS'' AND ANY -/// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -/// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -/// DISCLAIMED. IN NO EVENT SHALL CYBER SECURITY LABS B.V. BE LIABLE FOR ANY -/// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -/// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -/// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -/// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -/// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -/// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -/// - -#include -#include -#include - -int openat( int dirfd, const char *pathname, int flags , ... ) -{ - return open( pathname, flags ); -} - - -int faccessat( int dirfd, const char *pathname, int mode, int flags ) -{ - return access( pathname, mode ); -} - - -int linkat( int olddirfd, const char *oldpath, - int newdirfd, const char *newpath, int flags ) -{ - return link( oldpath, newpath ); -} - -int unlinkat( int dirfd, const char *pathname, int flags ) -{ - return unlink( pathname ); -} - -int mkdirat( int dirfd, const char *pathname, mode_t mode ) -{ - return mkdir( pathname, mode ); -} diff --git a/src/app/fesrv/main.cc b/src/app/fesrv/main.cc deleted file mode 100644 index 4df2974..0000000 --- a/src/app/fesrv/main.cc +++ /dev/null @@ -1,135 +0,0 @@ -/// -/// \file main.cc -/// \author Menno Valkema -/// \date 2016-05-17 -/// -/// \brief Genode fesrv component. Port of https://github.com/riscv/riscv-fesvr -/// - -/// -/// Copyright (c) 2016, Cyber Security Labs B.V. -/// All rights reserved. -/// -/// Redistribution and use in source and binary forms, with or without -/// modification, are permitted provided that the following conditions are met: -/// 1. Redistributions of source code must retain the above copyright -/// notice, this list of conditions and the following disclaimer. -/// 2. Redistributions in binary form must reproduce the above copyright -/// notice, this list of conditions and the following disclaimer in the -/// documentation and/or other materials provided with the distribution. -/// 3. All advertising materials mentioning features or use of this software -/// must display the following acknowledgement: -/// This product includes software developed by the Cyber Security Labs B.V.. -/// 4. Neither the name of Cyber Security Labs B.V. nor the -/// names of its contributors may be used to endorse or promote products -/// derived from this software without specific prior written permission. -/// -/// THIS SOFTWARE IS PROVIDED BY Cyber Security Labs B.V. ''AS IS'' AND ANY -/// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -/// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -/// DISCLAIMED. IN NO EVENT SHALL Cyber Security Labs B.V. BE LIABLE FOR ANY -/// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -/// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -/// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -/// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -/// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -/// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -/// - -#include "htif.h" - -#include -#include -#include - -#include -#include - -#define read_reg(r) (dev_vaddr[r]) -#define write_reg(r, v) (dev_vaddr[r] = v) - -class Htif_zedboard_genode : public htif_t -{ - public: - - Htif_zedboard_genode(Libc::Env & env, std::string image = "image.elf") - : htif_t( std::vector( { image } ) ), - _io_mem_dataspace(env, DEV_PADDR, 2 * sizeof( uintptr_t ), true ), - dev_vaddr( _io_mem_dataspace.local_addr() ) { - write_reg( 31, 0 ); /* reset */ } - - protected: - - ssize_t read( void *buf, size_t max_size ) - { - uint32_t *x = ( uint32_t * )buf; - assert( max_size >= sizeof( *x ) ); - - uintptr_t c = read_reg( 0 ); - uint32_t count = 0; - - if ( c > 0 ) { - for ( count=0; count= sizeof( *x ) ); - - for ( uint32_t i = 0; i < size/sizeof( *x ); i++ ) { - write_reg( 0, x[i] ); } - - return size; - } - - size_t chunk_max_size() { return 64; } - size_t chunk_align() { return 64; } - uint32_t mem_mb() { return 256; } - uint32_t num_cores() { return 1; } - - private: - - Genode::Attached_io_mem_dataspace _io_mem_dataspace; - volatile uintptr_t *dev_vaddr; - - const static uintptr_t DEV_PADDR = 0x43C00000; -}; - - -static const std::string image_name(Libc::Env & env) -{ - static const size_t LEN = 128; - char buf[LEN]; - Genode::memset( buf, 0, LEN ); - - try { - Genode::Attached_rom_dataspace config(env, "config"); - config.xml().sub_node( "fesrv" ).attribute( "image" ).value(buf, LEN - 1 ); - } catch ( ... ) { - throw std::runtime_error( "elf-image not configured" ); - } - - return std::string( buf ); -} - - -void Libc::Component::construct(Libc::Env & env) -{ - Libc::with_libc([&] () { - try { - std::string image = image_name(env); - Htif_zedboard_genode htif(env, image); - Genode::log( "Initialized Htif_zedboard with ", image.c_str() ); - htif.run(); - } catch ( const std::runtime_error &e ) { - Genode::error( "Caught runtime error: ", e.what() ); - } catch ( ... ) { - Genode::error( "Unknown error occured" ); - } - }); -} diff --git a/src/app/fesrv/patches/fesrv.patch b/src/app/fesrv/patches/fesrv.patch deleted file mode 100644 index c9baca7..0000000 --- a/src/app/fesrv/patches/fesrv.patch +++ /dev/null @@ -1,162 +0,0 @@ -diff --git a/fesvr/device.cc b/fesvr/device.cc -index 7179ce0..118ef71 100644 ---- a/fesvr/device.cc -+++ b/fesvr/device.cc -@@ -11,6 +11,8 @@ - #include - using namespace std::placeholders; - -+#include -+ - device_t::device_t() - : command_handlers(command_t::MAX_COMMANDS), - command_names(command_t::MAX_COMMANDS) -@@ -69,7 +71,7 @@ void bcd_t::handle_read(command_t cmd) - - void bcd_t::handle_write(command_t cmd) - { -- canonical_terminal_t::write(cmd.payload()); -+ Genode::printf("%c",(char)cmd.payload()); - cmd.respond(0x100 | (uint8_t)cmd.payload()); - } - -diff --git a/fesvr/htif.cc b/fesvr/htif.cc -index 7e101ad..d8cca9d 100644 ---- a/fesvr/htif.cc -+++ b/fesvr/htif.cc -@@ -11,7 +11,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -30,40 +29,11 @@ - # define TARGET_DIR "/" TARGET_ARCH "/bin/" - #endif - --static volatile bool signal_exit = false; --static void handle_signal(int sig) --{ -- if (sig == SIGABRT || signal_exit) // someone set up us the bomb! -- exit(-1); -- signal_exit = true; -- signal(sig, &handle_signal); --} -- --void htif_t::set_chroot(const char* where) --{ -- char buf1[PATH_MAX], buf2[PATH_MAX]; -- -- if (getcwd(buf1, sizeof(buf1)) == NULL -- || chdir(where) != 0 -- || getcwd(buf2, sizeof(buf2)) == NULL -- || chdir(buf1) != 0) -- { -- printf("could not chroot to %s\n", chroot.c_str()); -- exit(-1); -- } -- -- chroot = buf2; --} -- - htif_t::htif_t(const std::vector& args) - : exitcode(0), mem(this), seqno(1), started(false), stopped(false), -- _mem_mb(0), _num_cores(0), sig_addr(0), sig_len(0), -+ _mem_mb(0), _num_cores(0), sig_addr(0), sig_len(0), - syscall_proxy(this) - { -- signal(SIGINT, &handle_signal); -- signal(SIGTERM, &handle_signal); -- signal(SIGABRT, &handle_signal); // we still want to call static destructors -- - size_t i; - for (i = 0; i < args.size(); i++) - if (args[i].length() && args[i][0] != '-' && args[i][0] != '+') -@@ -82,8 +52,6 @@ htif_t::htif_t(const std::vector& args) - dynamic_devices.push_back(new disk_t(arg.c_str() + strlen("+disk="))); - else if (arg.find("+signature=") == 0) - sig_file = arg.c_str() + strlen("+signature="); -- else if (arg.find("+chroot=") == 0) -- set_chroot(arg.substr(strlen("+chroot=")).c_str()); - } - - device_list.register_device(&syscall_proxy); -@@ -169,7 +137,6 @@ void htif_t::load_program() - if (access(test_path.c_str(), F_OK) == 0) - path = test_path; - } -- - if (path.empty()) - throw std::runtime_error("could not open " + targs[0]); - -@@ -199,9 +166,9 @@ void htif_t::stop() - std::vector buf(sig_len); - mem.read(sig_addr, sig_len, &buf[0]); - -- std::ofstream sigs(sig_file); -- assert(sigs && "can't open signature file!"); -- sigs << std::setfill('0') << std::hex; -+ std::ofstream sigs(sig_file); -+ assert(sigs && "can't open signature file!"); -+ sigs << std::setfill('0') << std::hex; - - const addr_t incr = 16; - assert(sig_len % incr == 0); -@@ -293,7 +260,7 @@ int htif_t::run() - for (size_t i = 0; i < num_cores(); i++) - fromhost_callbacks.push_back(std::bind(enq_func, &fromhost[i], std::placeholders::_1)); - -- while (!signal_exit && exitcode == 0) -+ while ( exitcode == 0) - { - for (uint32_t coreid = 0; coreid < num_cores(); coreid++) - { -diff --git a/fesvr/htif.h b/fesvr/htif.h -index ace4503..9fcbbf6 100644 ---- a/fesvr/htif.h -+++ b/fesvr/htif.h -@@ -70,7 +70,6 @@ class htif_t - virtual packet_t read_packet(seqno_t expected_seqno); - virtual void write_packet(const packet_t& packet); - -- void set_chroot(const char* where); - const std::vector& target_args() { return targs; } - - friend class memif_t; -diff --git a/fesvr/htif_eth.cc b/fesvr/htif_eth.cc -index 3a9de7d..19028e4 100644 ---- a/fesvr/htif_eth.cc -+++ b/fesvr/htif_eth.cc -@@ -181,8 +181,6 @@ htif_eth_t::~htif_eth_t() - - ssize_t htif_eth_t::read(void* buf, size_t max_size) - { -- ssize_t bytes; -- - for(int timeouts = 0; timeouts < 3; ) - { - #ifdef __linux__ -@@ -277,4 +275,5 @@ ssize_t htif_eth_t::write(const void* buf, size_t size) - else - return ::write(sock, (char*)ð_packet, size); - #endif -+ return 0; - } -diff --git a/fesvr/syscall.cc b/fesvr/syscall.cc -index dc73360..cf16c58 100644 ---- a/fesvr/syscall.cc -+++ b/fesvr/syscall.cc -@@ -71,10 +71,7 @@ syscall_t::syscall_t(htif_t* htif) - - register_command(0, std::bind(&syscall_t::handle_syscall, this, _1), "syscall"); - -- int stdin_fd = dup(0), stdout_fd0 = dup(1), stdout_fd1 = dup(1); -- if (stdin_fd < 0 || stdout_fd0 < 0 || stdout_fd1 < 0) -- throw std::runtime_error("could not dup stdin/stdout"); -- -+ int stdin_fd =0, stdout_fd0 = 1, stdout_fd1 = 1; - fds.alloc(stdin_fd); // stdin -> stdin - fds.alloc(stdout_fd0); // stdout -> stdout - fds.alloc(stdout_fd1); // stderr -> stdout diff --git a/src/app/fesrv/target.mk b/src/app/fesrv/target.mk deleted file mode 100644 index ea3ed62..0000000 --- a/src/app/fesrv/target.mk +++ /dev/null @@ -1,31 +0,0 @@ -FESRV_SRC = $(call select_from_ports,fesrv)/src/app/fesrv/fesvr/ - -SRC_CC = main.cc \ - linux_syscalls.cc \ - context.cc \ - device.cc \ - dummy.cc \ - elfloader.cc \ - htif.cc \ - htif_eth.cc \ - htif_hexwriter.cc \ - htif_rs232.cc \ - htif_zedboard.cc \ - memif.cc \ - option_parser.cc \ - packet.cc \ - rfb.cc \ - syscall.cc \ - term.cc - -TARGET = fesrv -LIBS = stdcxx libc -INC_DIR += $(FESRV_SRC) - -# Some defines to keep the fesrv compilation process happy -CC_OPT += -DTARGET_ARCH=\"\" -DTARGET_DIR=\"\" -CC_OPT_htif += -DPREFIX=\"\" - -vpath %.cc $(FESRV_SRC) - -CC_CXX_WARN_STRICT =