2014년 2월 19일 수요일

[Linux Kernel] 42주차(2014.02.15) 후기

10차 ARM-C 42주차 스터디 후기입니다. 

# 일시 : 2014.02.15 (42주차)
# 장소 : 토즈 타워점
# 스터디 진도 : start_kernel() -> setup_arch() 종료

# 지난 9월 14일에 시작한 setup_arch()가 2월 15일스터디로 만 5개월만에 분석을 끝냈습니다. 
# setup_arch의 주요 함수 분석 요약:
setup_processor(); 
 // 각 프로세서에 의존적인 초기화 함수 구조체를 할당하고 현재 cpu에 대한 모드를 스택에 설정함
mdesc = setup_machine_fdt(__atags_pointer);
 // dtb에서 memory bank설정, cmd arg 설정, arch type 설정, mdesc 검색.
parse_early_param(); 
 // command arg에서 각 요소들을 파싱하여 early init section으로 설정된 디바이스 초기화.
sort(&meminfo.bank, meminfo.nr_banks, sizeof(meminfo.bank[0]), meminfo_cmp, NULL);
 // page frame number 기준으로 정렬
sanity_check_meminfo();
 // memory bank에서 bank하나가  valloc limit 을 넘으면 2개로 쪼갬.bank[0]:low bank[1]:high
arm_memblock_init(&meminfo, mdesc);
 // meminfo를 참조하여 메모리 블록 구조체를 초기화 
paging_init(mdesc);
 // mmu용 page table (pgd, pte)을 생성
 // zone 영역 3개로 나누고 각 zone에 해당하는 page를 할당함
unflatten_device_tree();
 // device tree를 flat tree에서 실제 tree로 생성
 // of_allnodes, of_chosen, of_aliases, aliases_lookup 만들어 줌
arm_dt_init_cpu_maps();
 // devtree에 cpu node의 reg 값을 읽어서 cpu_possible_bits, __cpu_logical_map의 값을 업데이트 함 
smp_set_ops(mdesc->smp);
 // smp_ops: exynos_smp_ops 을 할당 
smp_init_cpus();
smp_build_mpidr_hash();
 // mpidr_hash 의 cache에 있는 값을 실제 메모리에 반영 

# 스터디 log 
Updating 24ab35a..1460dc7
Fast-forward
 arch/arm/include/asm/bitops.h                 | 18 +++++++
 arch/arm/include/asm/cacheflush.h             | 17 ++++++-
 arch/arm/include/asm/cputype.h                | 21 +++++++++
 arch/arm/include/asm/mach/arch.h              |  3 +-
 arch/arm/include/asm/outercache.h             |  1 +
 arch/arm/include/asm/prom.h                   |  3 +-
 arch/arm/include/asm/psci.h                   |  4 +-
 arch/arm/include/asm/smp.h                    |  1 +
 arch/arm/include/asm/smp_plat.h               |  6 +++
 arch/arm/kernel/devtree.c                     | 28 +++++++++++
 arch/arm/kernel/setup.c                       | 83 +++++++++++++++++++++++++++++----
 arch/arm/kernel/smp.c                         |  7 +++
 arch/arm/lib/findbit.S                        |  2 +
 arch/arm/mach-exynos/mach-exynos5-dt.c        |  2 +
 arch/arm/mach-exynos/platsmp.c                |  7 +++
 arch/arm/plat-samsung/include/plat/map-base.h |  2 +
 arch/arm/plat-samsung/include/plat/map-s5p.h  |  6 +++
 drivers/of/base.c                             | 48 +++++++++++++++++--
 drivers/of/fdt.c                              |  2 +
 drivers/tty/vt/vt.c                           |  1 +
 drivers/video/console/dummycon.c              |  2 +
 include/asm-generic/bitops/const_hweight.h    |  3 ++
 include/linux/bitmap.h                        | 12 +++++
 include/linux/bitops.h                        |  5 ++
 include/linux/compiler.h                      |  1 +
 include/linux/console.h                       |  1 +
 include/linux/cpumask.h                       | 25 +++++++++-
 include/linux/of.h                            | 16 ++++++-
 include/linux/threads.h                       |  3 ++
 include/linux/types.h                         |  2 +
 init/main.c                                   |  3 ++
 kernel/cpu.c                                  |  9 +++-
 kernel/smp.c                                  |  3 ++
 scripts/kconfig/list.h                        |  3 ++
 34 files changed, 329 insertions(+), 21 deletions(-)

# 다음 스터디(43주차)는 mm_init_owner(&init_mm, &init_task);부터 시작하기로 하였습니다. 

댓글 없음:

댓글 쓰기