리눅스

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

Posts

554 posts

[라즈베리파이] 커널 타이머 - 동적 타이머 실습 및 로그 분석(1)

Guillermo Austin Kim|2018년 9월 2일

이전 시간에 소스 코드 분석으로 커널 시스템 타이머 동작에 대해 알아봤습니다. 코드를 읽고 이해하는 과정도 중요하지만 배운 내용을 자신의 것으로 만들려면 분석한 코드가 리눅스 시스템에서 실제 어떻게 실행하는지 확인해야 합니다. 한 걸음 나아가 코드를 수정하면서 라즈베리파이에서는 커널 타이머 자료구조 데이터가 어떤 값인지도 확인할 필요도 있습니다. 이번에 소개하는 패치 코드를 입력하고 ftrace 로그를 분석하는 과정을 거치면 배운 내용이 훨씬 더 오랫동안 기억에 남을 것이라 확신합니다. 먼저 전체 패치 코드를 소개합니다.diff --git a/kernel/softirq.c b/kernel/softirq.c--- a/kernel/softirq.c+++ b/kernel/softirq.c@@ -424,10 +

[라즈베리파이] 커널 타이머 -동적 타이머는 누가 언제 호출하나? (3)

Guillermo Austin Kim|2018년 8월 29일

커널 시스템 타이머 전체 흐름에서 4단계를 분석할 차례입니다. [그림 ] 커널 타이머 전체 흐름도 4단계마지막 4단계인 커널 시스템 타이머가 동적 타이머를 종료하고 동적 타이머 핸들러 함수를 호출하는 동작을 살펴보겠습니다. 주석문을 지우고 본 run_timer_softirq() 함수 구현부는 다음과 같습니다. 1 static __latent_entropy void run_timer_softirq(struct softirq_action *h)2 {3struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);4base->must_forward_clk = false;56__run_timers(base);7if (IS_ENABLED(

리눅스에서 여러개로 분할된 tar 압축 파일 풀기

반달가면|2018년 8월 29일

우선 tar 압축 파일 만들기/풀기에 대한 기본적인 내용은 이전 게시물을 참고하자. 여기로 tar 압축 파일을 split 명령으로 여러개로 분할해 놓았을 경우(split에 대한 내용은 이전 게시물을 참고하자. 여기로), 하나의 파일로 합친 후에 압축을 풀어야 한다. 아래의 예시를 보자. # 압축 파일 확인 ls my_data.tar.gz.aa my_data.tar.gz.ab my_data.tar.gz 파일을 2개로 나누어 놓은 상황이다. cat 명령으로 두 파일을 하나로 합쳐서 my_data.merged.tar.gz 파일을 만들고 압축을 풀면 된다. # 파일 합치기 cat my_data.tar.gz.* > my_data.merged.tar.gz # 압축 해제, ./re

[라즈베리파이] 워크큐(Workqueue) - 워크(struct work_struct) 란

Guillermo Austin Kim|2018년 8월 24일

리눅스 커널에서 work라고 부르나 워크(struct work_struct)로 명시 하겠습니다. 워크란 무엇이고 어떤 동작을 할까요? 워크는 워크큐 실행 단위이며 워커 쓰레드에서 실행합니다. 커널 후반부 처리 기법으로 워크큐를 많이 쓴다고 했는데 워크가 바로 후반부 처리를 합니다. 워크가 어떻게 동작하는지 이번 장에서 코드를 분석하면서 상세히 알아볼 예정입니다. struct work_struct 구조체워크를 표현하는 자료구조는 무엇일까요? 정답은 struct work_struct 이며 다음 코드와 같습니다.[https://elixir.bootlin.com/linux/v4.14.43/source/include/linux/workqueue.h]1 struct work_struct {2 atomic_long