sysfs file system

Posted by 춘자 리눅스/DeviceDriver : 2012.07.18 21:50

==================================================================================
유저영역에서 커널과의 통신을 위해 쓰이는 파일 시스템의 한 종
sysfs는 show와 store 함수를 제공하며, 이름과 마찬가지로 커널의 자료를 제공하고나,
Command를 받는 용도로 사용한다.
==================================================================================
@ 사용 예
[ Common ]
-- show 함수 --
static ssize_t get_picture(struct device *dev, struct device_attribute *attr,
   const char *buf, size_t count)
{
int cnt;
sprintf(buf, "%d" ,cnt);
// 사용자의 버퍼 영역으로 cnt의 값을 보여준다.
}
-- store 함수--
static ssize_t set_picture(struct device *device,
 struct device_attribute *attr,
 const char *buf, size_t count)
{
int value;
sscanf(buf, "%d", &value);
}
-- 
 * @ DEVICE_ATTR(_name, _mode, _show, _store)
 * _name : 인자로 주어진 이름이 sysfs의 파일 이름이 된다.
 * _mode : 파일의 권한을 준다.
 * _show : show 함수를 등록한다.
 * _store : store 함수를 등록한다.
 --
static DEVICE_ATTR(picture, S_IWUSR | S_IRUGO, get_picture, set_picture);


위 함수는 helper 매크로 함수다. 매크로 함수 원형은 아래와 같다.
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)

원래 위 매크로 함수는 다음 구조체들을 최대한 편하게(?) 사용하기 위해서 만들어진 것이다.

struct attribute {

char*name;

mode_tmode;

};


attribute sysfs에서 정규 파일로 표현되는 부분입니다. name필드는 파일명, mode는 파일에 대한 접근권한을 의미한다.


struct device에 대응되어 사용되는 다음과 같은 자료구조가 있다.


struct device_attribute {

struct attribute attr;

ssize_t (*show)(struct device *dev, char *buf);

ssize_t (*store)(struct device *dev, const char *buf);

};



===============================================================================
Example 1] class 계층 구조 및에 sysfs 생성

path :/sys/class/... 에 추가로 sysfs를 생성한다.

struct class *testClass;
struct device *dev;

@ class_create(owner, name)

testClass = class_create(THIS_MODUE, "testclass");

@ struct device *device_create(struct class *class, struct device *parent, dev_t devt, 
void *drvdata, const char *fmt, ...)

dev = device_create(testClass, NULL, 0, NULL, "testdevice");


device_create_file(dev, &dev_attr_picture);
# 위 dev_attr_picture에서 picture는 DEVICE_ATTR 매크로 함수에서 첫번째 인자로 지정해 준 이름임.

▶▶  cat /sys/class/testclass/testdevice/picture 으로 명령을 내리면 show 함수의 sprintf 내용을 볼수가 있음

댓글을 달아 주세요

 «이전 1 ··· 32 33 34 35 36 37 38 39 40 ··· 98  다음»