리눅스

포스트: 554|조회수: 0|TERM
Items

Posts

554 posts

[라즈베리파이]인터럽트(4) - 인터럽트 디스크립터란

Guillermo Austin Kim|2018년 2월 13일

인터럽트 디스크립터는 디바이스 드라이버가 등록한 인터럽트 속성을 표현합니다. 각 디바이스 드라이버에서 설정한 인터럽트 마다 아래 자료 구조를 커널이 생성합니다. 자료 구조는 아래와 같습니다.struct irq_desc { struct irq_common_data irq_common_data; struct irq_data irq_data; unsigned int __percpu *kstat_irqs; irq_flow_handler_t handle_irq;#ifdef CONFIG_IRQ_PREFLOW_FASTEOI irq_preflow_handler_t preflow_handler;#endif struct irqaction *action; /* IRQ action list */ unsigned int sta

리눅스에서 ftp 사용자의 상위 디렉토리 접근 차단(vsftpd)

반달가면|2018년 2월 13일

리눅스에서 vsftpd로 ftp 서버를 운영할 경우, 접속한 사용자가 홈 디렉토리 이외에 상위 디렉토리에 접근하지 못하도록 해야 할 경우가 있다. 사실 보안을 생각하면 대부분 이렇게 해 두는 것이 좋을 것이라 생각된다. vsftpd 설정파일을 편집해서 ftp 접속자의 홈 디렉토리를 루트 디렉토리로 간주하도록 해 주면 된다. 설정 파일은 통상 /etc/vsftpd.conf 또는 /etc/vsftpd/vsftpd.conf이다. # vsftpd 설정 파일 편집 sudo vi /etc/vsftpd.conf ftp 사용자 전체에 대하여 접근을 제한하려면, 즉 접근 범위를 홈 디렉토리로 가두려면 아래와 같은 항목을 설정해 주면 된다. # 전체 사용자에 대해 홈 디렉토리를 루트 디렉토리로 간주하도

[라즈베리파이] 인터럽트 백터 어셈블리 코드 및 동작 분석

Guillermo Austin Kim|2018년 2월 13일

인터럽트가 발생하면 __irq_svc 벡터로 점프합니다. 물론 해당 프로세스는 하던 일을 멈출 수 밖에 없는데요.그럼 인터럽트 벡터에서 어떤 동작을 하는 지 어셈블리 코드를 분석하겠습니다. #__irq_svc 코드 리뷰[1]: 스택 공간을 0x4C 바이트만큼 확보합니다. [2]--[3]: 현재 실행 중인 레지스터 R0부터 R14, PC까지 스택에 푸쉬합니다. [4]: 0x80705398 메모리 공간에 있는 메모리 덤프 0x80c089ac를 로딩합니다. 0x80c089ac는 handle_arch_irq란 함수 포인터 역할을 하는 변수인데 이 변수에는 gic_handle_irq가 지정되어 있습니다.crash> p -x handle_arch_irqhandle_arch_irq = $3 = 0xc01

[라즈베리파이] 인터럽트 핸들러에서 스택 덤프 저장

Guillermo Austin Kim|2018년 2월 12일

아래 패치를 적용하면 해당 프로세스의 스택 메모리 덤프를 stack_dump 배열에 저장합니다.인터럽트 처리가 마무리 된 후 프로세스 레벨에서 stack_dump 배열에 저장된 메모리 덤프를 커널 로그로 출력하면,인터럽트 벡터 심볼 __irq_svc과 스택에 푸쉬한 레지스터 정보를 모두 볼 수 있습니다.diff --git a/drivers/video/fbdev/bcm2708_fb.c b/drivers/video/fbdev/bcm2708_fb.cindex 612293c..2623e0d 100644--- a/drivers/video/fbdev/bcm2708_fb.c+++ b/drivers/video/fbdev/bcm2708_fb.c@@ -713,9 +713,28 @@ static void bcm2708_fb_i