Guillermo Austin Kim

Sources

Posts

998 posts

[라즈베리파이] 커널 빌드 & 컴파일 환경 설정

Guillermo Austin Kim|2018년 2월 12일

라즈베리파이 리눅스 커널 컴파일 명령어 출처https://wikidocs.net/3243https://www.raspberrypi.org/documentation/linux/kernel/building.md 아래와 같이 폴더를 하나 생성합니다./home001/austin.kim/src/raspberry_kernel 소스 코드는 아래 명령어로 다운로드 받습니다.git clone --depth=1 소스 코드를 다 받으면 linux란 폴더가 생깁니다.austin.kim@LGEARND7B16:~/src/raspberry_kernel$ ls -ltotal 4drwxr-xr-x 25 austin.kim home001 4096 Feb 12 08:35 linux 크로스컴파일 환경 설정아래 명령어로 라즈베리 파이 크

인터럽트(3) - 인터럽트 발생을 막고 싶을 때

Guillermo Austin Kim|2018년 2월 10일

어떤 코드 흐름에서는 인터럽트가 발생하면 안될 경우가 있습니다. 예를 들면 프로세서가 슬립에 진입할 때 각 디바이스 드라이버를 서스팬스 시키는 처리 도중 인터럽가 뜨면 안됩니다. 아래는 어셈블코드에서 호출되는 코드인데, 유저 모드에서 권한이 없는 가상 메모리 공간에 접근하면 ARM 프로세스가 감지하고예외(Exception)을 발생시킵니다. 이 때 bad_mode 함수가 호출되는데, 결국 panic 함수를 호출해서 커널 패닉을 유발시킵니다. 커널 패닉을 시키기 바로 전 local_irq_disable 함수를 호출해서 인터럽트를 아예 막아 버립니다.[arch/arm/kernel/traps.c]asmlinkage void bad_mode(struct pt_regs *regs, int reason){ co

[Kernel][Stability] tcp_v4_rcv -> __stack_chk_fail

Guillermo Austin Kim|2018년 2월 9일

커널 패닉 시 아래 콜 스택이 남아 있습니다.[39136682.663247] [ ] dump_stack+0x19/0x1b[39136682.663626] [ ] panic+0xd8/0x1e7[39136682.663988] [ ] ? tcp_v4_rcv+0x635/0x9f0[39136682.664361] [ ] __stack_chk_fail+0x1b/0x20[39136682.664743] [ ] tcp_v4_rcv+0x635/0x9f0[39136682.665131] [<

[Kernel][Stability] 스택 오염(Stack Corruption) 디버깅

Guillermo Austin Kim|2018년 2월 9일

아래 글에서 stack canary에 대한 내용을 다뤘습니다. 스택을 깨는 지 점검하는 루틴인데요.http://rousalome.egloos.com/9965540#216009 이번에는 다른 디버깅 패치를 작성해서 어떤 루틴이 스택 오염을 시켰는지 점검해보겠습니다. 우선 스택이 깨지는 순서를 살펴보겠습니다. 1. 아래 함수가 처음 실행될 때 순서로 스택을 푸쉬합니다.current_sp-0x1c--- R14 // 0xC06FAE8C 실행 시 스택 주소(스택 푸쉬 후)current_sp-0x18--- R3current_sp-0x14--- R4 current_sp-0x10--- R11current_sp-0xc---- R12current_sp-0x8---- LRcurrent_sp-0x4---- PC

[라즈베리파이] 커널 섹션 정보

Guillermo Austin Kim|2018년 2월 5일

아래 명령어로 라즈베리파이 소스 다운로드를 하고,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 섹션이란 용어에 대해서 설명을 하겠습니다. 섹션은 임베디드 소스 빌드 시 쓰이는 개념인데, 비슷한 속성의 코드들을 묶어서 처리하