Posts
556 posts[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 생성 예제 코드 분석
이번에는 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 프로세스 디스크립터 접근 매크로 함수
리눅스 커널 코드를 읽으면 다음 매크로를 자주 볼 수 있습니다.+ 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 프로세스 컨택스트 정보는 어떻게 저장할까?
리눅스 커널에서는 프로세스 실행 흐름은 컨택스트란 용어로 표현합니다. 컨택스트 종류는 다음과 같습니다. 1. 프로세스 컨택스트: 프로세스가 스케줄링 될 수 있는 상태 2. 인터럽트 컨택스트: 인터럽트가 발생한 후 인터럽트 핸들링을 위한 동작 중 3. Soft IRQ 컨택스트: Soft IRQ 서비스를 실행 중이며 Soft IRQ 서브루틴(하부 함수 흐름) 동작 중 컨택스트 정보는 struct thread_info 구조체 preempt_count 멤버에서 확인할 수 있습니다. 커널은 이 값을 읽어서 컨택스트 종류를 식별합니다. 커널에서는 어떻게 프로세스가 어떤 컨택스트에서 실행하는지 파악할까요?in_interrupt()와 in_softirq() 매크로 함수를 통해 확인할 수 있습니다. 해당 코
chmod - 리눅스에서 특정 디렉토리 하위의 모든 디렉토리/파일에 대한 권한 설정
우선 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

