본문 바로가기

sysfs

linux shell 의 sysfs에서 device-tree 뽑아내는 방법 dtc 라는 tool 을 사용하면 된다. dtc -I fs -O dts -o output.dts /proc/device-tree 더보기
poll, sysfs sample code poll 사용 예제 man page 에는 poll_wait 가 대기를 시켜준다고 하는데..아무리 사용해 봐도 poll_wait 는 대기를 하지 않고 바로 return 처리된다. 이에 wait_event_interruptible 을 사용 하였다. 주문한 책이 오면 poll_wait 에 대해 좀 더 읽어 본 후 재업하도록 하겠다. DECLARE_WAIT_QUEUE_HEAD(wait_queue); unsigned int onegun_driver_poll(struct file *file, poll_table * wait){printk("%s()++\n", __func__);//poll_wait(file, &wait_queue, wait); /* normal case */if (wait_event_interrup.. 더보기
class 에 sysfs node 등록하여 사용하기 linux kernel 에서 kernel 단과 user 사이에 통신을 위한 방법중에 sysfs node 를 사용하는 방법이 있다.지원하는 함수는 아래 3가지 함수들이 있다. devclass_create_filedevice_create_file class_create_file 이중 devclass_create_file 은 삭제된 것으로 보인다.class_create_file 의 예제를 첨부한다. #include #include #include #include #include #include #include #include static dev_t first; // Global variable for the first device number static struct cdev c_dev; // Global v.. 더보기
Android Terminal Emulator 을 이용한 linux kernel debugging 기법 오늘은 Android Terminal Emulator App 을 소개하고자 한다. linux kernel 개발을 할때 간혹 디버깅 용도로 sysfs 를 쓰는 경우가 있다. usb 도 연결 안되서 adb shell 도 못쓰고,무언가 kernel 과 간접적으로 read / write 를 할때 이러한 방법을 사용하고 하는데,이때마다 App 을 만들어서 경로와 write data 를 변경하는 것은 매우 번거로운 짓이다. 이때 해당 App 을 이용해서, 화면에서 직접 terminal 을 접근해서 재어 할 수 있다. 단, control 하려는 sysfs node 는 미리 chmod 로 권한을 풀어두는 것이 좋을 것이다. App 은 일단 link 한다. http://www.appsapk.com/android-term.. 더보기
gpio 와 sysfs node 의 정보가 일치하지 않는 문제 gpio를 특정값으로 셋팅하였는데 /sys/class/gpio/gpio[num]/... 에는 반영이 되어 있지 않은 경우가 있다. samsung LSI gpio driver 의 경우 s3c_gpio_cfgpin 나 s3c_gpio_setpull 와 같이 arch\arm\plat-samsung\gpio-config.c 에서 제공하는 gpio control 함수들은 shadow buffer 를 사용하지 않는다. 따라서 shadow buffer 의 값을 기반으로 정보를 주는 sysfs node 에는 gpio-config.c 에서 제공하는 함수를 사용해서 적용한 내용은 반영되지 않는다. 해당 문제를 해결하기 위해서는 drivers\gpio\gpiolib.c 에서 제공하는 함수들을 사용해서 gpio config .. 더보기
misc 에 sysfs 등록하기 커널버전 : 2.6.29 misc driver 에 sysfs 를 등록하려 했으나 device object 가 없어서 난감한 상황에 빠졌다. sysfs 를 등록하려면 device 로 등록을 해야 하는데 misc를 사용하는 하위 device들은 register_device 로 등록을 하지 않기 때문이다. 구글링을 해보니 나같은 난감한 상황때문에 고민했던 사람이 있었고, 그 사람이 2003년에 패치를 만든것을 발견하였다. 역시 정식 커널 버전에도 적용되어 있었다. 소스 코드를 뒤져보니 패치로 인해서 misc structer 에 device 구조체가 추가 되었다. struct miscdevice { int minor; const char *name; const struct file_operations *fops.. 더보기