'디바이스 드라이버'에 해당되는 글 3건

  1. 2013.02.25 LINUX clock tree 확인 방법
  2. 2013.02.04 workqueue를 kernel timer에 등록하기
  3. 2013.01.25 [퍼온글] 풀업(pull-up) & 풀다운(pull-down) 저항이란?
디바이스 드라이버2013. 2. 25. 16:55

CONFIG_COMMON_CLK_DEBUG 옵션을 켜 주면,

CONFIG_COMMON_CLK_DEBUG=y 를 kernel config에 추가 해 주면,

clock tree를 확인할 수 있다.


Menu: System Type/Common Clock Framework

"DebugFS representation of clock tree"

Selects: DEBUG_FS,

Help Text

Creates a directory hierchy in debugfs for visualizing the clk
tree structure.  Each directory contains read-only members
that export information specific to that clk node: clk_rate,
clk_flags, clk_prepare_count, clk_enable_count &
clk_notifier_count.

File: drivers/clk/Kconfig line 26

Linux Versions: 3.6.11, 3.7

Posted by 세월의돌
디바이스 드라이버2013. 2. 4. 09:53

근래에 linux(android) device driver 관련 작업을 하느라 정말 고생이 많다.

일하는 중에 주기적으로 특정 register 값을 출력 해서 확인해야 할 필요가 있었는데,

workqueue를 이용해서 할 수 있는 방법을 찾다가 발견하여 정리했다.


1. workqueue를 생성하여 초기화 하고,

2. kernel timer에 의해 주기적으로 호출 될 함수 선언한다.

3. 함수 내에서 workqueue 실행을 위해 scheduling 한다.

4. main thread(?)에서 kernel timer 자료구조를 초기화 하고, 함수를 등록한다.

(제거는 각자가 알아서-0-)


static void test_wq(struct work_struct *unused);

struct timer_list test_timer;

static DECLARE_WORK(testwq, test_wq);

static void test_wq(struct work_struct *unused)

{

    printk("write your own message out!!!\n");

}

static void test_timer_func(unsigned long data)

{

    test_timer.expires = jiffies + (HZ*3);

    add_timer(&test_timer);

    schedule_work(&testwq);

}


void main(void)

{

    init_timer(&test_timer);
    test_timer.expires = jiffies + HZ;
    test_timer.data = 0;
    test_timer.function = &test_timer_func;
    add_timer(&test_timer);
}


Posted by 세월의돌
디바이스 드라이버2013. 1. 25. 20:36

대충 이런거다 라고 희미하게 알고는 있었지만, 요즘 같아선 제대로 모르면 안될 것 같아서 여기저기 찾아보다가 발견한 설명!
가장 이해하기 쉽게 설명 된것 같다! :)


칩에 정보를 입력할 때, 입력 핀에 5V(High) 혹은, 0V(Low)의 전압을 가한다.

 

하지만, 입력 핀에 5V도 0V도 입력이 안되는 상태가 되면, 칩은 자신의 핀에 1이 입력 되었는지, 0이 입력 되었는지를 모른다. 이런 상태를 플로팅(Floating)되었다고 한다.

이 경우 핀을 사용하지 않는다면 문제가 없지만, 핀을 사용하고 있는 상태라면 문제가 된다.

 

입력이 항상 토글 스위치로만 이루어 지는 것은 아니기 때문에 단락, 개방 동작만 하는 보통의 스위치를 연결해야 할 경우도 있다. 이 때 입력 받는 쪽 핀을 '0'이나 '1'의 값으로 묶어 놓을 필요가 있다. 이 때 사용하는 것이 풀업/다운 저항이다.



풀업저항의 간단한 예시.

저항을 5V에 달고, 아래에 스위치가 병렬로 붙어 있다. 이 때 핀 A에는 항상 5V의 전압이 입력된다.

핀 A는 0V일 때 '1'로 인식하고, 5V일 때 0으로 인식하는 입력 핀이다.

스위치를 닫으면, 그라운드 쪽으로 전류가 흐르고, 스위치를 닫은 직후 전원에서 저항을 통해 들어오는 전류와 핀 A의 전류가 합류하여 그라운드로 흘러 들어가게 된다. 이 때 핀 A의 전압이 0V로 낮아지면서 핀 A에 '1'이 입력된 것으로 인식 되는 것이다.

핀을 높은 저항에 매달아 둔다는 뜻으로 '풀 업 저항'이라 한다.

풀 다운 저항의 예시.

저항의 한쪽은 핀 A에 연결되어 있고, 다른 한쪽은 그라운드와 연결 되어 있다.

핀A는 5V전압을 받으면 '1'로 인식하고, 0V의 전압을 받으면 '0'으로 인식한다.

그라운드에 연결되어 있기 때문에 A 핀의 전압은 낮아져 0V가 된다.

스위치를 닫으면, 소량의 전류가 저항을 통해 그라운드로 흘러 내리기는 하지만, 많은 양의 전류가 A핀으로 흘러 A핀의 전압이 5V가 된다. 따라서 A핀은 '1'이 입력된 것으로 인식한다.

핀을 항상 그라운드에 묶어 둔다는 의미에서 '풀 다운 저항'이라고 한다.

'디바이스 드라이버' 카테고리의 다른 글

LINUX clock tree 확인 방법  (0) 2013.02.25
workqueue를 kernel timer에 등록하기  (0) 2013.02.04
Posted by 세월의돌