[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH v2 00/47] MINI-OS: enable the arm64 support
1) Code. The work is based on Chen Baozi and Volodymyr's patches. I tested this patch set with my Softiron board. This patch set is based on the latest mini-os code: (git tree: git://xenbits.xen.org/mini-os.git The top is "093da7f mini-os: add config item for printing via hypervisor") Please check the code in tree: https://github.com/zyzii/mini-os (branch: arm64_v2_freeze) After this patch set: 1.) The scheduler for arm64 works fine. 2.) The gic/timer for arm64 works fine. The log for the mini-os: ================================================= (d2277) - Mini-OS booting - (d2277) - Setup CPU - (d2277) - Setup booting pagetable - (d2277) - MMU on - (d2277) - Setup stack - (d2277) - Jumping to C entry - (d2277) Virtual -> physical offset = 1000040000000 (d2277) Checking DTB at 0xffff000008000000... (d2277) Found GIC: gicd_base = 0xffff00ffc0000000, gicc_base = 0xffff00ffc0001000 (d2277) MM: Init (d2277) _text: 0xffff000000000000(VA) (d2277) _etext: 0xffff00000001c0e0(VA) (d2277) _erodata: 0xffff000000023000(VA) (d2277) _edata: 0xffff00000002e40c(VA) (d2277) stack start: 0xffff00000002a000(VA) (d2277) _end: 0xffff0000000378b8(VA) (d2277) Found memory at 0x40000000 (len 0x20000000) (d2277) Using pages 262205 to 393216 as free space for heap. (d2277) MM: Initialise page allocator for ffff00000003d000(4003d000)-ffff00001ffff000(5ffff000) (d2277) Adding memory range 40049000-5ffff000 (d2277) MM: done (d2277) Initialising timer interface (d2277) Virtual Count register is 525DE16, freq = 250000000 Hz (d2277) Initialising console ... done. (d2277) FDT suggests grant table base 38000000 (d2277) gnttab_table mapped at 0xffff00ffc0003000. (d2277) Initialising scheduler (d2277) Thread "Idle": pointer: 0x0xffff00001fffe078, stack: 0x0xffff00001fff8000 (d2277) Thread "xenstore": pointer: 0x0xffff00001fffe0d8, stack: 0x0xffff00000004c000 (d2277) xenbus initialised on irq 1 (d2277) Thread "shutdown": pointer: 0x0xffff00001fffe138, stack: 0x0xffff00001fff0000 (d2277) Test main: par=0 (d2277) Thread "xenbus_tester": pointer: 0x0xffff00001fffe198, stack: 0x0xffff00001fff4000 (d2277) Thread "periodic_thread": pointer: 0x0xffff00001fffe1f8, stack: 0x0xffff00001ffe0000 (d2277) Thread "netfront": pointer: 0x0xffff00001fffe258, stack: 0x0xffff00001ffe4000 (d2277) Thread "blkfront": pointer: 0x0xffff00001fffe2b8, stack: 0x0xffff00001ffe8000 (d2277) Thread "fbfront": pointer: 0x0xffff00001fffe318, stack: 0x0xffff00001ffec000 (d2277) Thread "kbdfront": pointer: 0x0xffff00001fffe378, stack: 0x0xffff000000050000 (d2277) Thread "shutdown": pointer: 0x0xffff00001fffe3d8, stack: 0x0xffff000000054000 (d2277) Doing xenbus test. (d2277) Periodic thread started. ================================================= 2.) Tests I tested this patch set on Softiron(arm64) and x86_64 platform. (Please use "make CONFIG_USE_XEN_CONSOLE" to compile the minios.) In the Softiron, I did the Block Read/Write tests by enabling CONFIG_BLKFRONT. 3.) Changes v1 --> v2: 0) make the DTC code as a subfolder, not a submodule. 1) refactor the arm32 code, move it to a separate folder. Now the folder like this: arch/arm ├── arch.mk ├── arm32 │ ├── arm32.S │ ├── hypercalls32.S │ └── minios-arm32.lds ├── arm64 │ ├── arm64.S │ ├── asm.h │ ├── hypercalls64.S │ ├── minios-arm64.lds.S │ └── traps.c ├── balloon.c ├── events.c ├── gic.c ├── Makefile ├── mm.c ├── panic.c ├── sched.c ├── setup.c └── time.c 2) fix the bug in scheduler. 3) rewrite some GPL code, by copying and re-writing the FreeBSD code. 4) implement the mmap/munmap(see the map_frame_ex/unmap_frames). 5) change the mapping from 39bit to 48bit. rewrite some assembly code for booting. Use physical address 7) change some code for "removing the e280 code from common place" 8) change code in the parsing GIC information. 9) move timer code to separate folder, such as arch/arm/arm32/time.h 10) change the logic in to_virt. 11) add mapping for GNT table. 12) change the virtual memory layout to: /* * The virtual address layout for arm64(48bit): * * -------------------------------------------------------------------------- * | | * -------------------------------------------------------------------------- * ^ ^ ^ ^ ^ * |<-- memory area -->|<-- kernel area -->|<- demand area ->|<- heap area -> | * ^ * ^ * | * (0xffff000000000000, when TCR.T0SZ == 16) * * memory area (0xffff000000000000 ~ VIRT_KERNEL_AREA) : used for linear physical memory mapping * kernel area (VIRT_KERNEL_AREA ~ VIRT_DEMAND_AREA) : used for map_frame_virt * demand area (VIRT_DEMAND_AREA ~ VIRT_HEAP_AREA) : used for ioremap * heap area (VIRT_HEAP_AREA ~ 0xffffffffffffffff) : used for heap */ The code is put at 0xffff000000000000. 13) Add memory size limits, such as MIN_MEM_SIZE/MAX_MEM_SIZE 14) others 4.) The comments from Julien which I did not follow: 0) Use p2m_set_entry to setup the page table. I did not have good understanding of the p2m_set_entry(). So I use my familiar way to setup the page table. 1) Move dsb/dmb/mb to common place. I did not do so, because I found the older arm32 archs use "mcr" to do the memory barriers. (I will add extra patch to fix this...) Huang Shijie (47): mini-os: fix the wrong parameter for map_free() in init_page_allocator() arm32: move the arm32 code to arm32 folder mini-os: replace the L1_PAGETABLE_SHIFT with PAGE_SHIFT mini-os: rename the L1_PROT to DEF_PAGE_PROT arm: create a new header for the page macros arm64: add the boot code arm64: change physical_address_offset to paddr_t arm64: fix the wrong mask for to_virt/to_phys arm64: add the __PAGE_SIZE macro in header file arm64: add exception support arm64: dump the registers for do_bad_mode()/do_sync() arm32: move arm32 specific code to a separate header arm64: add the basic helpers for arm64 arm64: define the quad_t for arm64 arm64: time.c: fix the wrong format for printk mini-os: define ULONG_MAX/LONG_MAX for arm64 mini-os: remove the e820 from common code arm64: mm.c: fix the compiler error arm64: refine the arch_init_mm arm64: add shared_info support mini-os: implement the memmove/memchr arm64: define the CALLEE_SAVED_REGISTERS arm64: implement the __arch_switch_threads arm64: implement the arm_start_thread arm64: change sp to "unsigned long" type arm64: fix the wrong size of the register arm64: implement the run_idle_thread arm64: add the hypercall support arm64: init the memory system arm64: set the mapping for console and xenbus arm: add a new helper ioremap arm64: implement the mmap/munmap arm64: add the virtual address layout description arm: parse out the address/size for gicd/gicc arm32: gic: move REG_WRITE32/REG_READ32 to a separate header arm64: gic: implement the REG_WRITE32/REG_READ32 arm32: move several timer functions to a separate header arm32: add a new helper read_frequency() arm64: implement the timer helpers for arm64 arm64: add the link file arm64: add the makefile mini-os: Set TARGET_ARCH_FAM for arm64 mini-os: create the image for arm mini-os: add the libfdt library arm64: fix the compilor error in time arm: add mapping for GNT table mini-os: update the .gitignore .gitignore | 5 + Config.mk | 7 +- Makefile | 34 +- arch/arm/Makefile | 29 + arch/arm/arch.mk | 7 + arch/arm/arm32.S | 294 ------ arch/arm/arm32/arm32.S | 294 ++++++ arch/arm/arm32/hypercalls32.S | 64 ++ arch/arm/arm32/minios-arm32.lds | 83 ++ arch/arm/arm64/arm64.S | 491 ++++++++++ arch/arm/arm64/asm.h | 18 + arch/arm/arm64/hypercalls64.S | 81 ++ arch/arm/arm64/minios-arm64.lds.S | 81 ++ arch/arm/arm64/traps.c | 44 + arch/arm/gic.c | 104 +- arch/arm/hypercalls32.S | 64 -- arch/arm/minios-arm32.lds | 83 -- arch/arm/mm.c | 457 ++++++++- arch/arm/sched.c | 27 +- arch/arm/setup.c | 7 +- arch/arm/time.c | 40 +- arch/x86/mm.c | 22 +- include/arm/arch_limits.h | 4 +- include/arm/arch_mm.h | 65 +- include/arm/arm32/io.h | 18 + include/arm/arm32/os.h | 34 + include/arm/arm32/time.h | 35 + include/arm/arm32/traps.h | 20 + include/arm/arm64/io.h | 18 + include/arm/arm64/os.h | 75 ++ include/arm/arm64/pagetable.h | 108 +++ include/arm/arm64/time.h | 34 + include/arm/arm64/traps.h | 27 + include/arm/os.h | 58 +- include/arm/page_def.h | 8 + include/arm/traps.h | 20 - include/console.h | 8 + include/events.h | 9 +- include/hypervisor.h | 7 + include/mm.h | 3 + include/posix/limits.h | 2 +- include/types.h | 2 +- include/x86/arch_mm.h | 2 + lib/libfdt/Makefile.libfdt | 11 + lib/libfdt/TODO | 3 + lib/libfdt/fdt.c | 251 +++++ lib/libfdt/fdt.h | 111 +++ lib/libfdt/fdt_addresses.c | 96 ++ lib/libfdt/fdt_empty_tree.c | 83 ++ lib/libfdt/fdt_overlay.c | 861 +++++++++++++++++ lib/libfdt/fdt_ro.c | 703 ++++++++++++++ lib/libfdt/fdt_rw.c | 505 ++++++++++ lib/libfdt/fdt_strerror.c | 102 ++ lib/libfdt/fdt_sw.c | 300 ++++++ lib/libfdt/fdt_wip.c | 139 +++ lib/libfdt/libfdt.h | 1899 +++++++++++++++++++++++++++++++++++++ lib/libfdt/libfdt_env.h | 143 +++ lib/libfdt/libfdt_internal.h | 95 ++ lib/libfdt/version.lds | 71 ++ lib/memmove.c | 44 + lib/string.c | 12 + minios.mk | 4 + mm.c | 13 +- xenbus/xenbus.c | 8 + 64 files changed, 7706 insertions(+), 641 deletions(-) create mode 100644 arch/arm/Makefile create mode 100644 arch/arm/arch.mk delete mode 100644 arch/arm/arm32.S create mode 100644 arch/arm/arm32/arm32.S create mode 100644 arch/arm/arm32/hypercalls32.S create mode 100755 arch/arm/arm32/minios-arm32.lds create mode 100644 arch/arm/arm64/arm64.S create mode 100644 arch/arm/arm64/asm.h create mode 100644 arch/arm/arm64/hypercalls64.S create mode 100644 arch/arm/arm64/minios-arm64.lds.S create mode 100644 arch/arm/arm64/traps.c delete mode 100644 arch/arm/hypercalls32.S delete mode 100755 arch/arm/minios-arm32.lds create mode 100644 include/arm/arm32/io.h create mode 100644 include/arm/arm32/os.h create mode 100644 include/arm/arm32/time.h create mode 100644 include/arm/arm32/traps.h create mode 100644 include/arm/arm64/io.h create mode 100644 include/arm/arm64/os.h create mode 100644 include/arm/arm64/pagetable.h create mode 100644 include/arm/arm64/time.h create mode 100644 include/arm/arm64/traps.h create mode 100644 include/arm/page_def.h delete mode 100644 include/arm/traps.h create mode 100644 lib/libfdt/Makefile.libfdt create mode 100644 lib/libfdt/TODO create mode 100644 lib/libfdt/fdt.c create mode 100644 lib/libfdt/fdt.h create mode 100644 lib/libfdt/fdt_addresses.c create mode 100644 lib/libfdt/fdt_empty_tree.c create mode 100644 lib/libfdt/fdt_overlay.c create mode 100644 lib/libfdt/fdt_ro.c create mode 100644 lib/libfdt/fdt_rw.c create mode 100644 lib/libfdt/fdt_strerror.c create mode 100644 lib/libfdt/fdt_sw.c create mode 100644 lib/libfdt/fdt_wip.c create mode 100644 lib/libfdt/libfdt.h create mode 100644 lib/libfdt/libfdt_env.h create mode 100644 lib/libfdt/libfdt_internal.h create mode 100644 lib/libfdt/version.lds create mode 100644 lib/memmove.c -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |