리눅스

포스트: 556|아이템:리눅스(554)
Tags

Posts

556 posts

[라즈베리파이] 커널 타이머 - 동적 타이머 실행 코드

Guillermo Austin Kim|2018년 8월 8일

동적 타이머를 초기화만 하면 동적 타이머를 쓸 수 없습니다. 동적 타이머를 실행해야 합니다. 이를 위해 add_timer()/add_timer_on() 이나 mod_timer() 함수에 적절한 인자를 채워 호출해야 합니다. 보통 add_timer() 함수를 써서 동적 타이머를 실행하며 이후 동적 타이머 만료 시간을 다시 설정한 후 동적 타이머를 실행시킬 때 mod_timer() 함수를 씁니다. add_timer()와 mod_timer() 함수를 써서 로컬 타이머를 설정하는 코드를 살펴보겠습니다. 먼저 라즈비안에서 로컬 타이머를 실행하는 코드를 봅시다.1 bool bcm2835_sdhost_send_command(struct bcm2835_host *host,2 struct mmc_command

[bash: grep] 파일에 저장된 여러개의 검색어를 포함 또는 제외한 내용 출력하기

반달가면|2018년 8월 7일

몇개의 문자열에 대한 검색은 기본적인 grep 명령으로 그 자리에서 작업을 해도 큰 문제가 없을 것이다.(grep을 이용한 다중 문자열 검색은 이전 게시물을 참고하자. 여기로) # my_data.txt에서 문자열 abc 또는 123이 포함된 행 출력 cat my_data.txt | grep "abc\|123" 그러나, 꽤 많은 검색어가 있고 이 검색어들을 제외한 나머지 내용을 찾고자 할 때는 문제가 좀 복잡해 진다. 예를 들어 keyword.txt 파일에 10개 이상의 검색어가 저장되어 있고, my_data.txt 파일에서 이 검색어를 포함 또는 제외한 내용을 출력해야 하는 경우다. 일일이 수작업으로 확인하기 검색해야할 문자열이 너무 많다. 이럴 경우엔 배열(array)을 이용해서 검색어를

[라즈베리파이] 커널 타이머 - 동적 타이머 초기화

Guillermo Austin Kim|2018년 8월 6일

동적 타이머 초기화를 알아 보기 앞서 동적 타이머는 전체 동작 흐름에 대해 알아 봅시다.동적 타이머 동작은 3단계로 나눌 수 있습니다. 1. 동적 타이머 초기화2. 동적 타이머 실행3. 동적 타이머 만료 3.1 동적 타이머 해제 3.2 동적 타이머 핸들러 실행 첫 번째 초기화 단계입니다.동적 타이머 초기화는 보통 드라이버 레벨에서 수행합니다. 동적 타이머는 struct timer_list 이란 자료구조로 표현할 수 있는데 이 멤버 중 flags만 업데이트 합니다. 두 번째 동적 타이머 실행 단계입니다.동적 타이머 실행도 마찬가지로 드라이버 레벨에서 이루어집니다. 각자 드라이버 시나리오에 따라 동적 타이머 만료 시간을 HZ 단위로 지정한 다음에 add_timer() 함수를 호출합니다. 이제는 동적 타이머

[라즈베리파이] 커널 타이머 - msecs_to_jiffies 함수란

Guillermo Austin Kim|2018년 7월 30일

커널은 타이머를 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