본문 바로가기

Core BSP 분석

(119)
QEMU - Aarch64 PS C:\dev_utils\qemu_img> qemu-system-aarch64 -m 4096 -cpu cortex-a72 -smp 4 -machine virt -nographic -bios QEMU_EFI.fd -drive if=none,file=ubuntu-20.04-server-cloudimg-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -drive file=user-data.img,format=raw -device virtio-net-device,netdev=net0 -netdev user,hostfwd=tcp:127.0.0.1:2222-:22,id=net0 계정: ubuntu 패스워드: asdfqwer // 추가 정보 제가 아는 부팅 빨리하는 ..
[커널크래시] 인터럽트 컨텍스트에서 wake_up_interruptible 대신 wake_up_locked 사용 인터럽트 컨텍스트에서 슬립을 지원하는 커널 함수를 호출하면 어떻게 동작할까요? 커널 패닉이 유발됩니다. 이번에는 인터럽트 컨텍스트에서 발생한 커널 패닉 이슈를 소개합니다. 먼저 커널 로그를 소개합니다. [1.538173] BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:973 [1.577234] in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 0, name: swapper/3 [1.578316] Preemption disabled at: [1.597859] CPU: 3 PID: 0 Comm: swapper/3 [1.617377] Hardware name: rp..
[리눅스커널] 커널 크래시: Data Abort @usb_copy_descriptors 소개 이번 시간에는 커널 패닉을 디버깅하는 과정을 소개합니다. 1차 분석 콜스택을 TRACE32로 잡아 보니 Data abort로 커널 패닉이 발생했습니다. -000|el1_da(asm) -->|exception -001|usb_copy_descriptors(src = 0xFFFFFFF50D806080) -002|configfs_composite_bind(gadget = 0xFFFFFFF4C4F16298, gdriver = 0xFFFFFFF5B2943B08) -003|udc_bind_to_driver(udc = 0xFFFFFFF5B67BD000, driver = 0xFFFFFFF5B2943B08) -004|usb_udc_attach_driver(name = 0xFFFFFFF57B6C3F80, driver..
[리눅스커널] 익명 페이지 메모리 누수(Memory Leak) 디버깅 - TRACE32 많은 리눅스 시스템 개발자들은 자신이 개발하고 있는 리눅스 커널의 버전이 주류였으면 하는 바램이 있다. 하지만 현실은 다르다. 현재 리눅스 커널의 최신 버전인 4.19(LTS 기준)으로 개발하고 있어도 이전 리눅스 커널 버전에서 다뤘던 자료 구조에 대해 알고 있어야 한다. 이번에는 커널 3.10 버전에서 struct anon_vma 구조체와 struct address_space 구조체의 관계에 대해 알아보겠다. 먼저 다음 TRACE32 명령어를 입력해 3번째 프레임의 페이지 디스크립터를 확인하자. $(TRACE32 명령어) v.v %d %t %h %i (struct page[0x7FFF])*mem_map (static struct page [32767]) (struct page[0x7FFF])*mem_m..
[tegra4i] UI freeze due to RT class 프로세스 커널 로그는 다음과 같습니다. UI freeze 상태라 강제 커널 크래시를 유발시켜 램덤프를 추출했습니다. [ 7164.614352] tegra sound_card.27: Ply shutdown, devnum 7 [ 7165.077580] ------------[ cut here ]------------ [ 7165.077807] WARNING: at /root/rpi/kernel/workqueue.c:2904 __cancel _work_timer+0x12c/0x178() [ 7165.087114] Modules linked in: texfat(PO) [ 7165.092596] CPU: 3 PID: 1373 Comm: mmcqd/0 Tainted: P W O 3.10.44+ #1 [ 7165.101579..
[리눅스커널] Crash: 비트 플립 @profile_tick() 이번에는 비트 플립으로 발생한 커널 패닉 코어 덤프 분석 과정을 소개합니다. 다음은 T32로 커널 패닉이 발생했을 때 잡은 콜스택입니다. 01 -000|machine_restart(?) 02 -001|arch_local_irq_enable(inline) 03 -001|panic(fmt = 0xC0EF195A) 04 -002|oops_end(inline) 05 -002|die(str = 0xC017409E, ?, err = -590234666) 06 -003|do_undefinstr(regs = 0xDCD1BCA8) 07 -004|__und_svc_fault(asm) 08 -->|exception 09 -005|profile_tick(type = -590234136) 10 -006|tick_sched_ti..
[리눅스] 커널 크래시: abort@test_and_set_bit 우선 콜스택부터 점검을 해보면, "kswapd0" 프로세스에서 slab cache를 scanning 하는 도중 커널 크래시가 발생하였음을 알 수 있습니다. 메모리가 부족한 상태로 보입니다. ("kswapd0" 프로세스는 page memory가 부족할 때 실행됩니다.) -000|do_DataAbort(addr = 3244789312, fsr = 3245415784, regs = 0xC1678E40) -001|__dabt_svc(asm) -->|exception -002|test_and_set_bit(asm) //
[리눅스][커널] 커널 크래시 분석은 왜 중요할까? 커널 크래시란 커널 크래시 분석은 왜 중요할까? 커널 크래시 분석을 잘하는 게 왜 중요할까요? 너무 당연한 질문인가요? 사실 세상에 너무 당연한 질문은 없습니다. 어쩌면 너무 당연한 질문에 답하려고 고민하다가 많은 걸 깨닫는 경우가 많은 것 같습니다. 여러분이 리눅스 드라이버를 개발하거나 새로운 리눅스 커널 버전을 포팅했다고 가정하겠습니다. 그런데 안타깝게도 부팅 도중 아래와 같은 로그를 출력하는 커널 크래시가 100% 발생하고 있습니다. 어떻게 분석해야 할지 몰라 하루 꼬박 밤을 새웠습니다. 참 이럴 때 난감하죠. [ 0.986578] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 0.986589] CPU..