Guillermo Austin Kim
Posts
998 posts[라즈베리파이][리눅스커널] 인터럽트 소개(0)
인터럽트란인터럽트란 단어가 여러분들은 생소하신가요? 낯설게 들리는 분도 있고 귀에 익은 분도 있을 텐데요. 평소 인터럽트를 뭐라고 하죠? 일상생활에서 인터럽트는 보통 갑자기 생긴 일이나 하던 일을 멈춘다는 의미죠. 예를 들면 책을 읽다가 전화가 와서 읽던 책을 덮어 놓고 전화를 받는 상황이죠. 임베디드 시스템 관점으로 인터럽트는 뭘 의미하죠? 우선 하드웨어 관점으로는 하드웨어 변화를 감지해서 외부 입력으로 전달되는 전기 신호로 볼 수 있습니다. 예를 들면 키보드를 손으로 입력하면 하드웨어적으로 키보드 하드웨어의 변화를 감지하고 신호를 유발하죠. 보통 하드웨어 개발자들은 종종 오실로스코프란 장비로 인터럽트가 제대로 올라오는지 측정을 하죠. 인터럽트 신호를 측정하면 아래와 같은 파형을 볼 수 있는데요. 참고
[Kernel][Panic] panic@ttwu_do_activate (메모리 불량 보드)
CPU: 3 PID: 435 Comm: kworker/u17:2 프로세스에서 dm-verity를 처리하는 워크 함수 verity_prefetch_io 서브 루틴에서 커널 데이터 어보트가 발생했습니다.-000|do_DataAbort(addr = 0, fsr = 0, regs = 0x0)-001|__dabt_svc(asm) -->|exception-002|ttwu_activate(inline)-002|ttwu_do_activate.constprop.52(rq = 0xEB95AB80, p = 0xFFFFF69B)-003|ttwu_queue(inline)-003|try_to_wake_up(p = 0xEB95AB80, ?, wake_flags = -237815936)-004|arch_spin_unlock(inl
[프로세스] 실행 중인 cpu 정보 업데이트(커널 4.9.65 )
ARM64 비트 리눅스 커널 4.9.65 버전에서 아래 구조체가 변경됐습니다.특히 해당 프로세스가 돌고 있던 CPU 정보를 담고 있는 int cpu 멤버가 사라졌는데요.crash64> struct thread_infostruct thread_info { unsigned long flags; mm_segment_t addr_limit; int preempt_count;} 기존 Linux version 4.6.0 버전crash64> p linux_bannerlinux_banner = $1 = "Linux version 4.6.0 (sudhakar.koppiset@ubuntu) (gcc version 5.2.1 20151005 (Linaro GCC 5.2-2015.11-2) ) #1
[라즈베리파이] 커널 살펴보기 - 섹션 정보
아래 명령어로 라즈베리파이 소스 다운로드를 하고,git clone --depth=1 크로스 컴파일러 툴을 설치한 다음에,git clone 커널 빌드를 하면 vmlinux을 추출할 수 있습니다.make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j12 아래 명령어로 라즈베리파이 섹션 정보를 파악할 수 있는데요. 조금 더 짚어 보겠습니다../objdump -x vmlinux | more 섹션이란 용어에 대해서 설명을 하겠습니다. 섹션은 임베디드 소스 빌드 시 쓰이는 개념인데, 비슷한 속성의 코드들을 묶어서 처리하
[라즈베리파이] 인터럽트 백터 - 스택 푸쉬
인터럽트가 발생했을 때 구동중인 프로세스의 레지스터가 스택 메모리 공간에 푸쉬된다고 설명했는데요. 실제 Trace32 프로그램으로 스택 메모리 덤프를 확인해 보겠습니다. 아래 콜스택은 리눅스 커널에서자주 볼 수 함수로 구성되어 있는데 ext4 파일 시스템에서 특정 파일을 동기화(Synch)하는 동작 중에 인터럽트가 발생했습니다..-000|account_group_exec_runtime(inline)-000|update_curr()-001|check_spread(inline)-001|put_prev_entity()-002|put_prev_task_fair()-003|pick_next_task_rt(inline)-003|pick_next_task_rt()-004|pick_next_task(inline)-004|


