LINUX

포스트: 487|아이템:LINUX(477)
Tags

Posts

487 posts

[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 생성 예제 코드 분석

Guillermo Austin Kim|2019년 2월 9일

이번에는 IRQ 스레드를 생성하는 예제 코드를 소개합니다. 실제 request_threaded_irq() 함수를 호출해서 IRQ 스레드를 생성하는 과정을 살펴보겠습니다. 분석할 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.30/source/drivers/usb/dwc3/gadget.c]1 static int dwc3_gadget_start(struct usb_gadget *g,2 struct usb_gadget_driver *driver)3 {4 struct dwc3 *dwc = gadget_to_dwc(g);5 unsigned long flags;6 int ret = 0;7 int irq;89 irq = dwc->irq_gadget;1

4.10 프로세스 디스크립터 접근 매크로 함수

Guillermo Austin Kim|2019년 2월 7일

리눅스 커널 코드를 읽으면 다음 매크로를 자주 볼 수 있습니다.+ current_thread_info()+ current 위 매크로를 활용해서 프로세스 태스크 디스크립터와 struct thread_info 구조체 필드 정보를 읽어 프로세스를 제어합니다. 4.10.1 current_thread_info()이전 절에서 프로세스 스택 최상단 주소에 struct thread_info 구조체에 프로세스 실행을 저장한다고 분석했습니다. current_thread_info() 매크로 함수는 프로세스가 어떤 함수를 실행하더라도 struct thread_info 구조체가 있는 스택 최상단 주소를 전달합니다. current_thread_info() 매크로 함수 구현부를 분석하기 전에 매크로 함수가 어느 코드에서 쓰는

4.9 프로세스 컨택스트 정보는 어떻게 저장할까?

Guillermo Austin Kim|2019년 2월 7일

리눅스 커널에서는 프로세스 실행 흐름은 컨택스트란 용어로 표현합니다. 컨택스트 종류는 다음과 같습니다. 1. 프로세스 컨택스트: 프로세스가 스케줄링 될 수 있는 상태 2. 인터럽트 컨택스트: 인터럽트가 발생한 후 인터럽트 핸들링을 위한 동작 중 3. Soft IRQ 컨택스트: Soft IRQ 서비스를 실행 중이며 Soft IRQ 서브루틴(하부 함수 흐름) 동작 중 컨택스트 정보는 struct thread_info 구조체 preempt_count 멤버에서 확인할 수 있습니다. 커널은 이 값을 읽어서 컨택스트 종류를 식별합니다. 커널에서는 어떻게 프로세스가 어떤 컨택스트에서 실행하는지 파악할까요?in_interrupt()와 in_softirq() 매크로 함수를 통해 확인할 수 있습니다. 해당 코

chmod - 리눅스에서 특정 디렉토리 하위의 모든 디렉토리/파일에 대한 권한 설정

반달가면|2019년 2월 7일

우선 chmod에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로 chmod의 몇가지 기본적인 예시는 아래와 같다. # my_data.txt 파일에 대하여 소유자(u) 권한에 읽기(r),쓰기(w),실행(x) 추가(+) chmod u+rwx my_data.txt # 그룹(g) 권한을 읽기(r)/쓰기(w)로 지정(=) chmod g=rw my_data.txt # 나머지(o) 권한에서 실행(x) 제거(-) chmod o-x my_data.txt 특정 디렉토리 하위에 있는 모든 항목에 대해서 권한을 설정하려면 -R(recursive) 옵션을 사용하면 된다. # ~/data 디렉토리 하위의 모든 항목에 대하여 그룹(g) 권한을 읽기(r)/쓰기(w)로 지정 chmod -R