Guillermo Austin Kim

Sources

Posts

998 posts

[리눅스커널] 슬럽 메모리: set_track() 함수에 전달되는 addr인자의 정체

Guillermo Austin Kim|2020년 12월 10일

리눅스 커널의 슬럽 관련 디버깅 피쳐를 켜 놓으면, struct track 구조체로 슬럽 오브젝트를 할당하거나 해제할 때의 콜 스택 정보를 저장합니다. 이를 처리하는 핵심 함수는 set_track() 함수인데, 이 함수에 마지막으로 전달되는 인자는 addr입니다. 다음은 set_track() 함수의 구현부인데, 볼드체로 표기된 부분을 봅시다. void set_track(struct kmem_cache *s, void *object, enum track_item alloc, unsigned long addr){ struct track *p = get_track(s, object, alloc); if (addr) {... p->addr = addr; p->cpu = smp_process

[ARM프로세서] ARMv7: 익셉션의 종류별 ARM 동작 모드 정리

Guillermo Austin Kim|2020년 12월 9일

이전 절에서 배운 바와 같이, ARM 코어는 익셉션을 유발할 때 익셉션의 종류에 따라 ARM의 동작 모드를 변경합니다. 익셉션을 다른 관점으로 보면, 익셉션은 "ARM 동작 모드를 변경하는 유발 인자"라고 볼 수 있는데, 다음 표에서 익셉션의 종류 별로 변경되는 ARM 동작 모드를 확인할 수 있습니다. 표 8.2 익셉션의 종류와 변경되는 ARM 동작 모드 표 8.2의 가장 왼쪽 부분은 익셉션의 종류, 가운데 부분은 해당 익셉션이 발생할 때 변경되는 ARM의 동작 모드를 나타냅니다. 가장 왼쪽 부분은 ARM 동작 모드를 담고 있는 CPSR 레지스터의 [4:0] 비트 정보입니다. ARM의 동작 모드를 변경하려면 CPSR 레지스터의 [4:0] 비트를 변경하면 됩니다. Written by <디버깅을 통해

[ARM프로세서] ARMv7: 소프트웨어 인터럽트 타입 익셉션을 유발할 때 ARM 코어의 세부 동작

Guillermo Austin Kim|2020년 12월 9일

ARM 코어가 ‘svc’ 명령어를 실행하면 소프트웨어 인터럽트를 유발합니다. 다음 그림을 보면서, 소프트웨어 인터럽트가 발생할 때 ARM 코어의 세부 동작을 알아봅시다. 그림 8.11 소프트웨어 인터럽트를 유발할 때 변경되는 레지스터 그림 8.11은 소프트웨어 인터럽트 익셉션이 실행되는 흐름을 나타내는데, 그림의 가운데 부분을 보면 ARM 코어가 하드웨어적으로 처리되는 부분이 슈도 코드로 표기돼 있습니다. 이 슈도 코드 분석을 통해 ARM 코어의 세부 동작을 알아보겠습니다.  먼저 01번째 줄을 봅시다. 01 R14_svc = 0xc000d000 + 0x4 'svc' 명령어를 ARM 코어가 디코딩을 하면 ARM 의 동작 모드를 슈퍼바이저 모드로 변경할 준비를 합니다. 먼저 슈퍼바이저 모드에서만 사

[욕토:Yocto] 욕토(Yocto) 프로젝트의 버전 확인하기

Guillermo Austin Kim|2020년 12월 9일

현재 사용하고 있는 욕토 프로젝트의 버전은 어떻게 확인할 수 있을까요? 'poky/meta-poky/conf/distro/poky.conf' 파일을 열면 이 정보를 알 수 있습니다. poky/meta-poky/conf/distro/poky.confDISTRO = "poky"DISTRO_NAME = "Poky (Yocto Project Reference Distro)"DISTRO_VERSION = "2.6.1"DISTRO_CODENAME = "thud"SDK_VENDOR = "-pokysdk"SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}" MAINTAINER = "Poky

[TRACE32] 메모리 덤프에서 검색(서치)하는 명령어: data.find

Guillermo Austin Kim|2020년 12월 5일

TRACE32를 사용하다 보면 메모리 덤프에서 특정 데이터를 검색하고 싶은 경우가 있습니다.이 때는 data.find 명령어를 사용하면 됩니다. 다음은 TRACE32에서 릴리즈한 data.find 관련 스팩 문서(general_ref_d.pdf)의 내용입니다. Format: Data.Find [ [% ] | [/ ]] : Byte | Word | Long | Quad | TByte | HByte | Float . | BE | LE : Back | NoFind ; search for byte 0x3f