Hi Matthias,
On 06/24/2015 04:41 PM, Matthias Lorenz wrote:
Hello,
I'm interested in porting genode base-hw to ARM Juno (Vexpress64) (http://www.arm.com/products/tools/development-boards/versatile-express/juno-...).
Well, that's very good news! I like to support you gladly where I can.
Can somebody estimate how much time and work this would take?
It is hard to estimate the effort even more the time one needs to implement it. In your stead I would estimate the effort to port the HW kernel to a completely new architecture. I assume you want to run Genode in AArch64 and not in AArch32 compatibility mode? Given that you want to run it on top of the new 64-bit instruction set, I assume you have to implement translation tables, CPU/MMU driver, Interrupt controller, and exception vectors from scratch. Dependent on whether you already have in depth knowledge of the Armv8 architecture or not, I would estimate something between 3 months and 6 months. But I have to admit, I'm always quite conservative in estimations ;-)
Are there any good starting points to start my work/research?
I'm afraid there is no "How to port the HW kernel to a new architecture". But there are quite some interesting in-depth descriptions about Genode, core, and the HW kernel within the Genode Foundations, recently released:
http://genode.org/documentation/genode-foundations-15-05.pdf
Especially the sections 7.3 and 7.6 should be of interest for you.
Are there certain things I should be aware of?
Sure. I would start with building a skeleton for base-hw's core:
* Create a new spec-file for your board, and the Armv8 architecture: e.g.: repos/base-hw/mk/spec-hw_juno.mk and repos/base/mk/spec-armv8.mk * Firstly, do not include a 'SPEC' variable for 'arm' nor include any generic arm files in the files you add to prohibit code that compiles but does something unwanted, or add code that is not necessary, if you later detect intersecting code between your Armv8 code and other Arm resp. Armv7 code it can be unified then * Create a build-description for Genode's base library used by all components in repos/base-hw/lib/mk/arm_v8/base-common.mk that looks like the following: include $(REP_DIR)/lib/mk/base-common.inc vpath kernel/interface.cc $(REP_DIR)/src/base/arm_v8 * Create a build-description for core resp. kernel in repos/base-hw/lib/mk/arm_v8/core.mk that looks like: INC_DIR += $(REP_DIR)/src/core/include/spec/arm_v8 SRC_S += spec/arm_v8/mode_transition.s SRC_S += spec/arm_v8/kernel/crt0.s SRC_S += spec/arm_v8/crt0.s SRC_CC += spec/arm_v8/cpu.cc SRC_CC += spec/arm_v8/pic.cc SRC_CC += spec/arm_v8/platform_support.cc SRC_CC += spec/arm_v8/kernel/thread_base.cc SRC_CC += spec/arm_v8/kernel/thread.cc SRC_CC += spec/arm_v8/kernel/cpu.cc SRC_CC += spec/arm_v8/kernel/pd.cc SRC_CC += kernel/vm_thread.cc SRC_CC += platform_services.cc include $(REP_DIR)/lib/mk/core.inc * Create above C++ and assembler files files within the repos/base-hw directory. And try to compile core in a newly created build directory that targets your new spec-file (hw_juno). The compiler will bleat about some missing header files, you can create within repos/base-hw/src/core/include/spec/arm_v8 * You can first fill the files with class and function skeletons depending on what compiler and linker is argueing about. The class layouts and function signatures can be found in the corresponding files for x86_64, arm_v7 armv6, or arm. But I would really just add code lazily, so you really get skeleton-code referenced by generic code, and no platform specifics copied eagerly. * You will have to add a board-specific description in base/include/platform/juno/drivers/board_base.h that contains the memory layout and interrupt numbers for the PIC, timer, UART etc. * You hopefully can re-use the UART from the Versatile Express board
These are the very first steps. When you reach the point where core compiles and gets linked correctly, you can start to fill the routines with life.
Feel free to ask any question of understanding, or if you get stuck at certain points.
Best Regards Stefan
Any help would be much appreciated.
I have already modified the ARM Trusted Firmware (https://github.com/ARM-software/arm-trusted-firmware) and U-Boot running in EL3. The main goal is to run genode in EL3.
Best regards
Matthias
Monitor 25 network devices or servers for free with OpManager! OpManager is web-based network management software that monitors network devices and physical & virtual servers, alerts via email & sms for fault. Monitor 25 devices for free with no restriction. Download now http://ad.doubleclick.net/ddm/clk/292181274;119417398;o _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main