본문 바로가기

Core BSP 분석

(119)
MMU - 페이지 테이블 덤프 섹션 엔트리 페이지 테이블은 아래와 같다. _______________________logical|_physical_____________________|sec|_d_|_size____|_permissions____________________|_glb|_shr|_pageflags_(remapped)___________|_tablewalk C:03A0:DFBFF000--DFBFFFFF| A:9FBFF000--9FBFFFFF| ns| 00| 00100000| P:readwrite U:noaccess exec | yes| yes| strongly ordered | A6F9C000[0DFB]=9FB1140E C:03A0:DFC00000--DFC00FFF| A:9FC00000--9FC00FFF| ns| 00| ..
Crash 명령어 스택 심볼 보기 아래와 같이 커널 패닉 로그가 나왔을 때, [ 35.106647 01-05 13:30:50.343] [] (ext4_free_inode+0x288/0x574) from [] (ext4_evict_inode+0x2f0/0x4c0) [ 35.117770 01-05 13:30:50.354] [] (ext4_evict_inode+0x2f0/0x4c0) from [] (evict+0x9c/0x184) [ 34.943888 01-05 13:30:50.180] Process system_server (pid: 928, stack limit = 0xe0e9e2f0) [ 34.952098 01-05 13:30:50.188] Stack: (0xe0e9fe38 to 0xe0ea0000) .... [ 35.127937 01-..
MMU 페이지 테이블 확인 우선 페이지 테이블은 아래와 같다. |_tablewalk | A6F9C000[0C06]=8061140E | A6F9C000[0C06]=8061140E | A6F9C000[0C06]=8061140E | A6F9C000[0C06]=8061140E 0x8061140E 이놈을 이진수로 바꾸면 10000000011000010001010000001110이다. 끝자리가 10이구만. 섹션 엔트리이므로 가상 주소는 1메가 단위라는 것을 알 수 있다. 앞에 12비트만 남기고 나머지를 0으로 비트 클리어를 하면, 10000000011000010001010000001110 11111111111100000000000000000000 10000000010000000000000000000000 (결과값) 0x80100000 0x8..
MMU - 메모리 설정 이번에는 페이지 테이블 비트 값으로 메모리 상태를 점검해보자. | A6F9C000[0D3F]=93F1140E 헥사값이 E로 끝나니 10으로 이진수가 끝남을 알 수 있다. 물론 섹션 엔트리겠지. 0x93F1140E를 이진수로 바꾸면 아래와 같다. 자릿수) 10987654321098765432109876543210 LSB 10010011111100010001010000001110 LSB AP[11:10]이 01이네. 아래 테이블에서 첫번째에 해당하는 내용임을 알 수 있다. AP[1:0] 권한 User 01 | Read/Write No access 10 | Read/Write Read only 11 | Read Write Read/Write 아래 페이지 테이블을 한번 보자. A6F9C000[058E]=A6E9..
커널패닉 - ext4 파일 시스템 커널 패닉 한번 분석 좀 해보자. 패닉 로그는 아래와 같다. 오라 ext4 파일 시스템에서 커널님이 돌아가셨구나. 돌아가실 때 프로세스 이름은 system_server이며 대략, ext4 파일 시스템에서 아이노드를 free하다가 죽었다는 것을 알 수 있다. [ 34.187856 01-05 13:30:49.424] Unable to handle kernel NULL pointer dereference at virtual address 00000000 [ 34.197812 01-05 13:30:49.434] pgd = e6f9c000 [ 34.202275 01-05 13:30:49.438] [00000000] *pgd=00000000 [ 34.207610 01-05 13:30:49.444] Internal ..
copy_mm()함수 do_fork p = copy_process(clone_flags, stack_start, regs, stack_size, child_tidptr, NULL, trace); retval = copy_signal(clone_flags, p); if (retval) goto bad_fork_cleanup_sighand; retval = copy_mm(clone_flags, p); if (retval) goto bad_fork_cleanup_signal; retval = copy_namespaces(clone_flags, p); if (retval) goto bad_fork_cleanup_mm; retval = copy_io(clone_flags, p); if (retval) goto bad_fork_clea..
커널 에러 로그(1) page allocation failure This log indicates that total chunk memory is starved. [480188.689067 04-22 03:32:58.097] m.lge.launcher2: page allocation failure: order:1, mode:0xd0 [480188.689123 04-22 03:32:58.097] [] (unwind_backtrace+0x0/0x144) from [] (dump_stack+0x20/0x24) [480188.689148 04-22 03:32:58.097] [] (dump_stack+0x20/0x24) from [] (warn_alloc_failed+0xd0/0x110) [480188.689170 04-22 03:3..
hrtimer_restart, alarm timer This is a good chance to look into timer mechanism ofkernel timer. /** * alarmtimer_fired - Handles alarm hrtimer being fired. * @timer: pointer to hrtimer being run * * When a alarm timer fires, this runs through the timerqueue to * see which alarms expired, and runs those. If there are more alarm * timers queued for the future, we set the hrtimer to fire when * when the next future alarm timer..