LINUX
Posts
487 posts[라즈베리파이] 커널 타이머 - 동적 타이머 초기화
동적 타이머 초기화를 알아 보기 앞서 동적 타이머는 전체 동작 흐름에 대해 알아 봅시다.동적 타이머 동작은 3단계로 나눌 수 있습니다. 1. 동적 타이머 초기화2. 동적 타이머 실행3. 동적 타이머 만료 3.1 동적 타이머 해제 3.2 동적 타이머 핸들러 실행 첫 번째 초기화 단계입니다.동적 타이머 초기화는 보통 드라이버 레벨에서 수행합니다. 동적 타이머는 struct timer_list 이란 자료구조로 표현할 수 있는데 이 멤버 중 flags만 업데이트 합니다. 두 번째 동적 타이머 실행 단계입니다.동적 타이머 실행도 마찬가지로 드라이버 레벨에서 이루어집니다. 각자 드라이버 시나리오에 따라 동적 타이머 만료 시간을 HZ 단위로 지정한 다음에 add_timer() 함수를 호출합니다. 이제는 동적 타이머
리눅스 커널은 정말 오픈 소스 프로젝트일까(2)?
경험은 실력을 낳고 실력은 경험으로 이어진다. 임베디드 리눅스 개발 경험은 그 만큼 중요하다. 데이터 시트에 맞게 디바이스 드라이버 구현을 하는 작업은 코드 몽키도 할 수 있다. 초보와 고수 차이는 디바이스 드라이버를 여러 다양한 환경에서 구동할 때 생기는 문제를 해결하는 능력이다. 임베디드 리눅스 개발 도중 여러 문제를 만난다. 그럼 이 문제를 해결하기 위해서 여러 단계를 밟아야 한다. 문제는 이런 문제 해결 분석과 같은 실무 경험이 리눅스 커널 개발자끼리도 공유되고 있지 않다는 것이다. 이 이유가 뭔 지 조금 더 살펴보자. 첫 번째는 실력 있는 임베디드 리눅스 개발자들은 대부분 바쁘다. 문제 하나를 해결하면 다른 문제를 봐야 할 경우가 많다. 내 주위에 밤 낮으로 문제를 해결해야 하는 고수 개발자를
[라즈베리파이] 커널 타이머 - msecs_to_jiffies 함수란
커널은 타이머를 HZ 단위 상대 시간을 나타내는 jiffies값을 기준으로 관리 합니다. 그리고 커널 타이머 함수는 HZ 단위 시간 정보를 받아 처리합니다. 그래서 커널이 이해할 수 있는 단위로 시간 정보를 변환시켜 줘야 합니다. msecs_to_jiffies() 함수가 이 역할을 수행합니다. 이 함수는 가독성도 높습니다. 함수 이름만 봐도 무슨 뜻인지 알기 쉽습니다. 실제 리눅스 커널에서 msecs_to_jiffies() 함수를 쓰는 코드를 살펴보겠습니다. 다음은 pstore 파일 시스템 코드 일부 조각입니다.[fs/pstore/platform.c]1 pstore_timer.expires = jiffies +2 msecs_to_jiffies(pstore_update_ms);3 add_time
리눅스에서 특정 프로세스의 cpu 점유율 확인
현재 실행중인 프로세스들 중에 특정한 프로세스의 cpu 점유율이 어느 정도 되는지 확인하고 싶을 때 ps 명령의 옵션을 적당히 활용해서 간단하게 할 수 있다. 아래의 예시를 보자. # firefox 웹브라우저의 cpu 점유율 확인 ps -C firefox -o %cpu %CPU 5.5 위의 예시에서 -C 옵션으로 프로세스 명칭을 지정해 주고, -o 옵션으로 출력할 항목을 지정해 주었다. 프로세스가 여러개 있을 수도 있으므로, cpu 점유율만 출력하는 것보다는 PID와 실행명령(command)를 같이 출력해 주는 것이 좀 더 편리하다. 실행명령에 인자(argument)가 포함될 수도 있으므로, -o 옵션에서 cmd 항목은 되도록 맨 마지막에 출력되도록 순서를 잡는 것이 좋겠다. -C 옵션에서

