[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [PATCH v3 00/43] 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 "48d3b31 Save/Restore Support: Add fini_shutdown call to app exit flow.") Please check the code in tree: https://github.com/zyzii/mini-os (branch: arm64_v3) 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: ================================================= (d20) - Mini-OS booting - (d20) - Setup CPU - (d20) - Setup booting pagetable - (d20) - MMU on - (d20) - Setup stack - (d20) - Jumping to C entry - (d20) Virtual -> physical offset = 1000040000000 (d20) Checking DTB at 0xffff000008000000... (d20) Found GIC: gicd_base = 0xffff00ffc0000000, gicc_base = 0xffff00ffc0001000 (d20) MM: Init (d20) _text: 0xffff000000000000(VA) (d20) _etext: 0xffff00000001cc00(VA) (d20) _erodata: 0xffff000000024000(VA) (d20) _edata: 0xffff00000002f41c(VA) (d20) stack start: 0xffff00000002b000(VA) (d20) _end: 0xffff0000000388e8(VA) (d20) Found memory at 0x40000000 (len 0x20000000) (d20) Using pages 262206 to 393216 as free space for heap. (d20) MM: Initialise page allocator for ffff00000003e000(4003e000)-ffff00001ffff000(5ffff000) (d20) Adding memory range 4004a000-5ffff000 (d20) MM: done (d20) Initialising timer interface (d20) Virtual Count register is 51B76CA, freq = 250000000 Hz (d20) Initialising console ... done. (d20) FDT suggests grant table base 38000000 (d20) gnttab_table mapped at 0xffff00ffc0003000. (d20) Initialising scheduler (d20) Thread "Idle": pointer: 0x0xffff00001fffe078, stack: 0x0xffff00001fff8000 (d20) Thread "xenstore": pointer: 0x0xffff00001fffe0d8, stack: 0x0xffff00000004c000 (d20) xenbus initialised on irq 1 (d20) Thread "shutdown": pointer: 0x0xffff00001fffe138, stack: 0x0xffff00001fff0000 (d20) Test main: par=0 (d20) Thread "xenbus_tester": pointer: 0x0xffff00001fffe198, stack: 0x0xffff00001fff4000 (d20) Thread "periodic_thread": pointer: 0x0xffff00001fffe1f8, stack: 0x0xffff00001ffe0000 (d20) Thread "netfront": pointer: 0x0xffff00001fffe258, stack: 0x0xffff00001ffe4000 (d20) Thread "blkfront": pointer: 0x0xffff00001fffe2b8, stack: 0x0xffff00001ffe8000 (d20) Thread "fbfront": pointer: 0x0xffff00001fffe318, stack: 0x0xffff00001ffec000 (d20) Thread "kbdfront": pointer: 0x0xffff00001fffe378, stack: 0x0xffff000000050000 (d20) Thread "shutdown": pointer: 0x0xffff00001fffe3d8, stack: 0x0xffff000000054000 (d20) Doing xenbus test. (d20) Periodic thread started. ================================================= 2.) Tests I tested this patch set on Softiron(arm64) and x86_64 platform. (Please use "make CONFIG_USE_XEN_CONSOLE=y" to compile the minios.) In the Softiron, I did the Block Read/Write tests by enabling CONFIG_BLKFRONT. 3.) Changes v2 --> v3: 0) Remove all the arm32 code. The folder like this: arch/arm/ ├── arch.mk ├── 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 1) Add two new patches after rebasing on the latest mini-os mini-os: refactor the shutdown arm64: add dummy arch_suspend_gnttab/arch_resume_gnttab 2) Move dsb/dmb/mb to common place. 3) merge several patch (about the DTC) into one. 4) Add license information to memmove. 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 (43): mini-os: fix the wrong parameter for map_free() in init_page_allocator() arm32: remove the arm32 specific code file 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() 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 arm64: add a new helper ioremap arm64: implement the mmap/munmap arm64: add the virtual address layout description arm64: parse out the address/size for gicd/gicc arm64: gic: implement the REG_WRITE32/REG_READ32 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: add mapping for GNT table arm64: add dummy arch_suspend_gnttab/arch_resume_gnttab mini-os: refactor the shutdown .gitignore | 5 + Config.mk | 7 +- Makefile | 34 +- arch/arm/Makefile | 29 + arch/arm/arch.mk | 7 + arch/arm/arm32.S | 294 ------ 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 | 99 +- arch/arm/hypercalls32.S | 64 -- arch/arm/minios-arm32.lds | 83 -- arch/arm/mm.c | 437 ++++++++- arch/arm/sched.c | 19 +- arch/arm/setup.c | 9 +- arch/arm/time.c | 31 +- arch/x86/mm.c | 22 +- include/arm/arch_limits.h | 4 +- include/arm/arch_mm.h | 58 +- include/arm/arm64/io.h | 18 + include/arm/arm64/os.h | 51 + include/arm/arm64/pagetable.h | 108 +++ include/arm/arm64/time.h | 34 + include/arm/arm64/traps.h | 27 + include/arm/os.h | 75 +- include/arm/page_def.h | 8 + include/arm/traps.h | 21 +- include/mm.h | 3 + include/posix/limits.h | 2 +- include/shutdown.h | 2 +- include/types.h | 2 +- include/x86/arch_mm.h | 2 + kernel.c | 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 | 74 ++ lib/string.c | 12 + minios.mk | 4 + mm.c | 13 +- shutdown.c | 20 +- 56 files changed, 7124 insertions(+), 644 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/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/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 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 |