diff --git a/config/cml/arm.cml b/config/cml/arm.cml index 1cd77fd..7676ca3 100644 --- a/config/cml/arm.cml +++ b/config/cml/arm.cml @@ -131,51 +131,241 @@ CONFIG_CONTAINERS 'Number of containers' CONFIG_CONT0_TYPE_LINUX 'Linux Container' CONFIG_CONT0_TYPE_BARE 'Bare Container' CONFIG_CONT0_TYPE_C0_POSIX 'Codezero POSIX Services Container (mm0, fs0 microkernel services)' -CONFIG_CONT0_PHYS_START 'Container 0 physical start address' -CONFIG_CONT0_PHYS_END 'Container 0 physical end address' -CONFIG_CONT0_VIRT_START 'Container 0 virtual start address' -CONFIG_CONT0_VIRT_END 'Container 0 virtual end address' CONFIG_CONT0_OPT_DIRNAME 'Containers directory name under conts' +CONFIG_CONT0_PHYS0_START 'Container 0 physical start address' +CONFIG_CONT0_PHYS0_END 'Container 0 physical end address' +CONFIG_CONT0_PHYS1_START 'Container 0 physical start address' +CONFIG_CONT0_PHYS1_END 'Container 0 physical end address' +CONFIG_CONT0_PHYS2_START 'Container 0 physical start address' +CONFIG_CONT0_PHYS2_END 'Container 0 physical end address' +CONFIG_CONT0_PHYS3_START 'Container 0 physical start address' +CONFIG_CONT0_PHYS3_END 'Container 0 physical end address' + +CONFIG_CONT0_VIRT0_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT0_END 'Container 0 virtual end address' +CONFIG_CONT0_VIRT1_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT1_END 'Container 0 virtual end address' +CONFIG_CONT0_VIRT2_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT2_END 'Container 0 virtual end address' +CONFIG_CONT0_VIRT3_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT3_END 'Container 0 virtual end address' +CONFIG_CONT0_VIRT4_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT4_END 'Container 0 virtual end address' +CONFIG_CONT0_VIRT5_START 'Container 0 virtual start address' +CONFIG_CONT0_VIRT5_END 'Container 0 virtual end address' + + CONFIG_CONT1_TYPE_LINUX 'Linux Container' CONFIG_CONT1_TYPE_BARE 'Bare Container' CONFIG_CONT1_TYPE_C0_POSIX 'Codezero POSIX Services Container (mm0, fs0 microkernel services)' -CONFIG_CONT1_PHYS_START 'Container 1 physical start address' -CONFIG_CONT1_PHYS_END 'Container 1 physical end address' -CONFIG_CONT1_VIRT_START 'Container 1 virtual start address' -CONFIG_CONT1_VIRT_END 'Container 1 virtual end address' CONFIG_CONT1_OPT_DIRNAME 'Containers directory name under conts' -default CONFIG_CONTAINERS from 2 -default CONFIG_CONT0_PHYS_START from 0x40000 -default CONFIG_CONT0_PHYS_END from 0x1000000 -default CONFIG_CONT0_VIRT_START from 0x0 -default CONFIG_CONT0_VIRT_END from 0x0 +CONFIG_CONT1_PHYS0_START 'Container 0 physical start address' +CONFIG_CONT1_PHYS0_END 'Container 0 physical end address' +CONFIG_CONT1_PHYS1_START 'Container 0 physical start address' +CONFIG_CONT1_PHYS1_END 'Container 0 physical end address' +CONFIG_CONT1_PHYS2_START 'Container 0 physical start address' +CONFIG_CONT1_PHYS2_END 'Container 0 physical end address' +CONFIG_CONT1_PHYS3_START 'Container 0 physical start address' +CONFIG_CONT1_PHYS3_END 'Container 0 physical end address' -default CONFIG_CONT1_PHYS_START from 0x1000000 -default CONFIG_CONT1_PHYS_END from 0x2000000 -default CONFIG_CONT1_VIRT_START from 0 -default CONFIG_CONT1_VIRT_END from 0 +CONFIG_CONT1_VIRT0_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT0_END 'Container 0 virtual end address' +CONFIG_CONT1_VIRT1_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT1_END 'Container 0 virtual end address' +CONFIG_CONT1_VIRT2_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT2_END 'Container 0 virtual end address' +CONFIG_CONT1_VIRT3_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT3_END 'Container 0 virtual end address' +CONFIG_CONT1_VIRT4_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT4_END 'Container 0 virtual end address' +CONFIG_CONT1_VIRT5_START 'Container 0 virtual start address' +CONFIG_CONT1_VIRT5_END 'Container 0 virtual end address' + +CONFIG_CONT0_PAGER_LMA 'Container 0 Pager LMA' +CONFIG_CONT0_PAGER_VMA 'Container 0 Pager VMA' +CONFIG_CONT0_PAGER_SIZE 'Container 0 Pager Initial map size (Optional)' +CONFIG_CONT0_LINUX_PAGE_OFFSET 'Container 0 Linux PAGE_OFFSET parameter' +CONFIG_CONT0_LINUX_TEXT_OFFSET 'Container 0 Linux TEXT_OFFSET parameter' +CONFIG_CONT0_LINUX_PHYS_OFFSET 'Container 0 Linux PHYS_OFFSET parameter' + +CONFIG_CONT1_PAGER_LMA 'Container 1 Pager LMA' +CONFIG_CONT1_PAGER_VMA 'Container 1 Pager VMA' +CONFIG_CONT1_PAGER_SIZE 'Container 1 Pager Initial map size (Optional)' +CONFIG_CONT1_LINUX_PAGE_OFFSET 'Container 1 Linux PAGE_OFFSET parameter' +CONFIG_CONT1_LINUX_TEXT_OFFSET 'Container 1 Linux TEXT_OFFSET parameter' +CONFIG_CONT1_LINUX_PHYS_OFFSET 'Container 1 Linux PHYS_OFFSET parameter' + +default CONFIG_CONT0_PAGER_LMA from 0x0 +default CONFIG_CONT0_PAGER_VMA from 0x0 +default CONFIG_CONT0_PAGER_SIZE from 0x0 +default CONFIG_CONT0_LINUX_PAGE_OFFSET from 0x0 +default CONFIG_CONT0_LINUX_TEXT_OFFSET from 0x0 +default CONFIG_CONT0_LINUX_PHYS_OFFSET from 0x0 + +default CONFIG_CONT1_PAGER_LMA from 0x0 +default CONFIG_CONT1_PAGER_VMA from 0x0 +default CONFIG_CONT1_PAGER_SIZE from 0x0 +default CONFIG_CONT1_LINUX_PAGE_OFFSET from 0x0 +default CONFIG_CONT1_LINUX_TEXT_OFFSET from 0x0 +default CONFIG_CONT1_LINUX_PHYS_OFFSET from 0x0 + +default CONFIG_CONTAINERS from 2 +default CONFIG_CONT0_PHYS0_START from 0x0 +default CONFIG_CONT0_PHYS0_END from 0x0 +default CONFIG_CONT0_PHYS1_START from 0x0 +default CONFIG_CONT0_PHYS1_END from 0x0 +default CONFIG_CONT0_PHYS2_START from 0x0 +default CONFIG_CONT0_PHYS2_END from 0x0 +default CONFIG_CONT0_PHYS3_START from 0x0 +default CONFIG_CONT0_PHYS3_END from 0x0 + +default CONFIG_CONT0_VIRT0_START from 0x0 +default CONFIG_CONT0_VIRT0_END from 0x0 +default CONFIG_CONT0_VIRT1_START from 0x0 +default CONFIG_CONT0_VIRT1_END from 0x0 +default CONFIG_CONT0_VIRT2_START from 0x0 +default CONFIG_CONT0_VIRT2_END from 0x0 +default CONFIG_CONT0_VIRT3_START from 0x0 +default CONFIG_CONT0_VIRT3_END from 0x0 +default CONFIG_CONT0_VIRT4_START from 0x0 +default CONFIG_CONT0_VIRT4_END from 0x0 +default CONFIG_CONT0_VIRT5_START from 0x0 +default CONFIG_CONT0_VIRT5_END from 0x0 + + +default CONFIG_CONT1_PHYS0_START from 0x0 +default CONFIG_CONT1_PHYS0_END from 0x0 +default CONFIG_CONT1_PHYS1_START from 0x0 +default CONFIG_CONT1_PHYS1_END from 0x0 +default CONFIG_CONT1_PHYS2_START from 0x0 +default CONFIG_CONT1_PHYS2_END from 0x0 +default CONFIG_CONT1_PHYS3_START from 0x0 +default CONFIG_CONT1_PHYS3_END from 0x0 + +default CONFIG_CONT1_VIRT0_START from 0x0 +default CONFIG_CONT1_VIRT0_END from 0x0 +default CONFIG_CONT1_VIRT1_START from 0x0 +default CONFIG_CONT1_VIRT1_END from 0x0 +default CONFIG_CONT1_VIRT2_START from 0x0 +default CONFIG_CONT1_VIRT2_END from 0x0 +default CONFIG_CONT1_VIRT3_START from 0x0 +default CONFIG_CONT1_VIRT3_END from 0x0 +default CONFIG_CONT1_VIRT4_START from 0x0 +default CONFIG_CONT1_VIRT4_END from 0x0 +default CONFIG_CONT1_VIRT5_START from 0x0 +default CONFIG_CONT1_VIRT5_END from 0x0 default CONFIG_CONT0_OPT_DIRNAME from (CONFIG_CONT0_TYPE_LINUX==y) ? "Linux" : ((CONFIG_CONT0_TYPE_BARE==y) ? "Bare" : "Noname") default CONFIG_CONT1_OPT_DIRNAME from (CONFIG_CONT1_TYPE_LINUX==y) ? "Linux" : ((CONFIG_CONT1_TYPE_BARE==y) ? "Bare" : "Noname") unless CONFIG_CONTAINERS > 1 suppress cont1_menu +when CONFIG_CONT0_TYPE_LINUX==y suppress cont0_bare_pager_params +when CONFIG_CONT0_TYPE_BARE==y suppress cont0_linux_pager_params +when CONFIG_CONT1_TYPE_LINUX==y suppress cont1_bare_pager_params +when CONFIG_CONT1_TYPE_BARE==y suppress cont1_linux_pager_params + symbols containers_menu 'Configure Containers' cont0_menu 'Container 0 Parameters' cont1_menu 'Container 1 Parameters' +cont0_physmem_list 'Container 0 physical memory regions' +cont1_physmem_list 'Container 1 physical memory regions' +cont0_virtmem_list 'Container 0 Virtual memory regions' +cont1_virtmem_list 'Container 1 Virtual memory regions' container0_type 'Container 0 Type' container1_type 'Container 1 Type' container0_options 'Container 0 Options' container1_options 'Container 1 Options' +cont0_linux_pager_params 'Container 0 Pager parameters' +cont0_bare_pager_params 'Container 0 Pager parameters' +cont1_linux_pager_params 'Container 1 Pager parameters' +cont1_bare_pager_params 'Container 1 Pager parameters' + +menu cont0_bare_pager_params + CONFIG_CONT0_PAGER_LMA@ + CONFIG_CONT0_PAGER_VMA@ + CONFIG_CONT0_PAGER_SIZE@ + +menu cont0_linux_pager_params + CONFIG_CONT0_LINUX_PAGE_OFFSET@ + CONFIG_CONT0_LINUX_TEXT_OFFSET@ + CONFIG_CONT0_LINUX_PHYS_OFFSET@ + +menu cont1_bare_pager_params + CONFIG_CONT1_PAGER_LMA@ + CONFIG_CONT1_PAGER_VMA@ + CONFIG_CONT1_PAGER_SIZE@ + +menu cont1_linux_pager_params + CONFIG_CONT1_LINUX_PAGE_OFFSET@ + CONFIG_CONT1_LINUX_TEXT_OFFSET@ + CONFIG_CONT1_LINUX_PHYS_OFFSET@ + +menu cont0_physmem_list + CONFIG_CONT0_PHYS0_START@ + CONFIG_CONT0_PHYS0_END@ + CONFIG_CONT0_PHYS1_START@ + CONFIG_CONT0_PHYS1_END@ + CONFIG_CONT0_PHYS2_START@ + CONFIG_CONT0_PHYS2_END@ + CONFIG_CONT0_PHYS3_START@ + CONFIG_CONT0_PHYS3_END@ + +menu cont1_physmem_list + CONFIG_CONT1_PHYS0_START@ + CONFIG_CONT1_PHYS0_END@ + CONFIG_CONT1_PHYS1_START@ + CONFIG_CONT1_PHYS1_END@ + CONFIG_CONT1_PHYS2_START@ + CONFIG_CONT1_PHYS2_END@ + CONFIG_CONT1_PHYS3_START@ + CONFIG_CONT1_PHYS3_END@ + +menu cont0_virtmem_list + CONFIG_CONT0_VIRT0_START@ + CONFIG_CONT0_VIRT0_END@ + CONFIG_CONT0_VIRT1_START@ + CONFIG_CONT0_VIRT1_END@ + CONFIG_CONT0_VIRT2_START@ + CONFIG_CONT0_VIRT2_END@ + CONFIG_CONT0_VIRT3_START@ + CONFIG_CONT0_VIRT3_END@ + CONFIG_CONT0_VIRT4_START@ + CONFIG_CONT0_VIRT4_END@ + CONFIG_CONT0_VIRT5_START@ + CONFIG_CONT0_VIRT5_END@ + +menu cont1_virtmem_list + CONFIG_CONT1_VIRT0_START@ + CONFIG_CONT1_VIRT0_END@ + CONFIG_CONT1_VIRT1_START@ + CONFIG_CONT1_VIRT1_END@ + CONFIG_CONT1_VIRT2_START@ + CONFIG_CONT1_VIRT2_END@ + CONFIG_CONT1_VIRT3_START@ + CONFIG_CONT1_VIRT3_END@ + CONFIG_CONT1_VIRT4_START@ + CONFIG_CONT1_VIRT4_END@ + CONFIG_CONT1_VIRT5_START@ + CONFIG_CONT1_VIRT5_END@ + menu container0_options CONFIG_CONT0_OPT_DIRNAME$ + cont0_linux_pager_params + cont0_bare_pager_params + cont0_physmem_list + cont0_virtmem_list menu container1_options CONFIG_CONT1_OPT_DIRNAME$ + cont1_linux_pager_params + cont1_bare_pager_params + cont1_physmem_list + cont1_virtmem_list choices container0_type CONFIG_CONT0_TYPE_LINUX @@ -192,18 +382,10 @@ choices container1_type menu cont0_menu container0_type container0_options - CONFIG_CONT0_PHYS_START@ - CONFIG_CONT0_PHYS_END@ - CONFIG_CONT0_VIRT_START@ - CONFIG_CONT0_VIRT_END@ menu cont1_menu container1_type container1_options - CONFIG_CONT1_PHYS_START@ - CONFIG_CONT1_PHYS_END@ - CONFIG_CONT1_VIRT_START@ - CONFIG_CONT1_VIRT_END@ menu containers_menu cont0_menu diff --git a/config/configuration.py b/config/configuration.py index 6af28c0..f7cb28b 100644 --- a/config/configuration.py +++ b/config/configuration.py @@ -9,10 +9,17 @@ class Container: self.name = None self.type = None self.id = None - self.lma_start = None - self.lma_end = None - self.vma_start = None - self.vma_end = None + self.pager_lma = None + self.pager_vma = None + self.pager_size = None + self.physmem = {} + self.physmem["START"] = {} + self.physmem["END"] = {} + self.virtmem = {} + self.virtmem["START"] = {} + self.virtmem["END"] = {} + self.virt_regions = 0 + self.phys_regions = 0 class configuration: @@ -60,14 +67,32 @@ class configuration: # TODO: Carry this over to Container() as static method??? def get_container_parameter(self, id, param, val): - if param[:len("VIRT_START")] == "VIRT_START": - self.containers[id].vma_start = val - elif param[:len("VIRT_END")] == "VIRT_END": - self.containers[id].vma_end = val - elif param[:len("PHYS_START")] == "PHYS_START": - self.containers[id].lma_start = val - elif param[:len("PHYS_END")] == "PHYS_END": - self.containers[id].lma_end = val + if param[:len("PAGER_LMA")] == "PAGER_LMA": + self.containers[id].pager_lma = val + elif param[:len("PAGER_VMA")] == "PAGER_VMA": + self.containers[id].pager_vma = val + elif param[:len("PAGER_SIZE")] == "PAGER_SIZE": + self.containers[id].pager_size = val + elif re.match(r"(VIRT|PHYS){1}([0-9]){1}(_){1}(START|END){1}", param): + matchobj = re.match(r"(VIRT|PHYS){1}([0-9]){1}(_){1}(START|END){1}", param) + virtphys, regionidstr, discard1, startend = matchobj.groups() + regionid = int(regionidstr) + #print "Matched: ", virtphys, regionid, discard1, startend + if virtphys == "VIRT": + self.containers[id].virtmem[startend][regionid] = val + if regionid + 1 > self.containers[id].virt_regions: + self.containers[id].virt_regions = regionid + 1 + if virtphys == "PHYS": + self.containers[id].physmem[startend][regionid] = val + if regionid + 1 > self.containers[id].phys_regions: + self.containers[id].phys_regions = regionid + 1 + +# elif param[:len("VIRT_END")] == "VIRT_END": +# self.containers[id].vma_end = val +# elif param[:len("PHYS_START")] == "PHYS_START": +# self.containers[id].lma_start = val +# elif param[:len("PHYS_END")] == "PHYS_END": +# self.containers[id].lma_end = val elif param[:len("OPT_DIRNAME")] == "OPT_DIRNAME": dirname = val[1:-1].lower() self.containers[id].dirname = dirname diff --git a/scripts/bare/bare_generator.py b/scripts/bare/bare_generator.py index fe04a66..539b119 100755 --- a/scripts/bare/bare_generator.py +++ b/scripts/bare/bare_generator.py @@ -51,8 +51,11 @@ class BareContGenerator: id_header = '[Container ID]\n' type_header = '\n[Container Type]\n' name_header = '\n[Container Name]\n' - lma_header = '\n[Container LMA]\n' - vma_header = '\n[Container VMA]\n' + pager_lma_header = '\n[Container Pager LMA]\n' + pager_vma_header = '\n[Container Pager VMA]\n' + pager_size_header = '\n[Container Pager Size]\n' + pager_virtmem_header = '\n[Container Virtmem Region %s]\n' + pager_physmem_header = '\n[Container Physmem Region %s]\n' with open(self.build_desc_out, 'w+') as fout: fout.write(id_header) @@ -61,10 +64,18 @@ class BareContGenerator: fout.write('\t' + cont.type + '\n') fout.write(name_header) fout.write('\t' + cont.name + '\n') - fout.write(lma_header) - fout.write('\t' + cont.lma_start + ' - ' + cont.lma_end + '\n') - fout.write(vma_header) - fout.write('\t' + cont.vma_start + ' - ' + cont.vma_end + '\n') + fout.write(pager_lma_header) + fout.write('\t' + cont.pager_lma + '\n') + fout.write(pager_size_header) + fout.write('\t' + cont.pager_size + '\n') + fout.write(pager_vma_header) + fout.write('\t' + cont.pager_vma + '\n') + for ireg in range(cont.virt_regions): + fout.write(pager_virtmem_header % ireg) + fout.write('\t' + cont.virtmem["START"][ireg] + ' - ' + cont.virtmem["END"][ireg] + '\n') + for ireg in range(cont.phys_regions): + fout.write(pager_physmem_header % ireg) + fout.write('\t' + cont.physmem["START"][ireg] + ' - ' + cont.physmem["END"][ireg] + '\n') def copy_bare_build_readme(self, config, cont): with open(self.build_readme_in) as fin: @@ -102,8 +113,8 @@ class BareContGenerator: with open(self.linker_lds_in) as fin: str = fin.read() with open(self.linker_lds_out, 'w+') as fout: - fout.write(str % (cont.vma_start, \ - cont.lma_start)) + fout.write(str % (cont.pager_vma, \ + cont.pager_lma)) def bare_container_generate(self, config): self.check_create_bare_sources(config)