Added multiple physical and virtual memory regions to configuration and parsing

This commit is contained in:
Bahadir Balban
2009-09-22 15:08:06 +03:00
parent 2da7b16412
commit 7c84aefecc
3 changed files with 263 additions and 45 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)