第一種:fileoparetion裡的open close read write ioctl........:
第二種:屬性操作中對檔案進行讀寫,這種是重要的,也是常見的:
static ssize_t isa1200_mode_show(struct device *dev,struct device_attribute *attr, char *buf)
static ssize_t isa1200_mode_store(struct device *dev, struct device_attribute *attr,const char *buf, size_t count)
else
return count; }
static device_attr(isa1200_mode, 0644, isa1200_mode_show, isa1200_mode_store);
這就完成了宣告,然後再在probe裡加上這麼一句註冊就行了:
ret = device_create_file(&pdev->dev, &dev_attr_isa1200_mode);
printk(kern_info "dev_attr_isa1200_mode/n");
if (ret != 0)
dev_err(&pdev->dev,"no source control for dev_attr_isa1200_mode: %d/n", ret);
如這個device_create_file後會生成的乙個檔案名叫isa1200_mode的檔案,如生成了目錄:
/sys/class/……/isa1200/device/isa1200_mode
那麼對它進行讀寫就是這樣的:sudo echo 1 >/sys/class/……/isa1200/device/isa1200_mode,也就是把1寫進了檔案isa1200_mode裡,那麼屬性機制就會分析這個操作,並呼叫isa1200裝置驅動的isa1200_mode_store函式,並會把寫入的1當作引數*buf來處理。通過一句if (sscanf(buf, "%d", &enable) != 1)就把1傳給了enable,一直進行接下來的工作。這下面的工作當然就好理解了,isa1200_mode_store裡也是呼叫驅動中寫好的函式來完成操作工作。
上面說是操作只是通常的使用者介面,對於不同的裝置還是會有其它更好的介面:
1.led_classdev,led類的乙個常用介面:brightness
static void w380_iconled_set(struct led_classdev *led_dev,
enum led_brightness value)
} static struct led_classdev w380_iconled = ;
這就完成了宣告,然後再在probe裡加上這麼一句註冊就行了:
ret = led_classdev_register(&pdev->dev, &w380_iconled);
if (ret)
goto err_icon;
通過led_classdev_register就會生成目錄:/sys/class/leds/ w380:icon
及其下面的/sys/class/leds/ w380:icon/brightness檔案。對了,介面就是brightness檔案
那麼對它進行讀寫就是這樣的:sudo echo 255 >/sys/class/leds/w380:icon/brightness這樣就打了這個led燈。
關閉led燈的操作就是sudo echo 0>/sys/class/leds/w380:icon/brightness
2.timed_output_dev,時間輸出類的乙個常用介面:enable
static void isa1200_chip_enable(struct timed_output_dev *dev, int value)
isa1200_chip_power_on(haptic);
mdelay(value);
haptic->enable=0;
isa1200_chip_power_off(haptic);
} else
}
這就完成了宣告,然後再在probe裡加上這麼一句註冊就行了:
ret = timed_output_dev_register(&haptic->dev);
if (ret < 0)
goto timed_reg_fail;
通過timed_output_dev_register就會生成目錄:/sys/class/timed_output/isa1200
及其下面的
/sys/class/timed_output/isa1200/enable檔案。對了,介面就是enable檔案
那麼對它進行讀寫就是這樣的:sudo echo 1 >/sys/class/timed_output/isa1200/enable這樣就打了這個motor。
關閉motor的操作就是sudo echo 0>/sys/class/timed_output/isa1200/enable
3.switch_dev
:在
android
中常用於耳機裝置:
switch_class
介面是name
和state
通過switch_dev_register
就會生成目錄:
/sys/class/switch/h2w
及其下面的"/sys/class/switch/h2w/name";
和"/sys/class/switch/h2w/state";檔案。對了,介面就是這兩個檔案
由驅動通過中斷將判斷得出的耳機名稱和狀態,寫入name
和state.
應用程式對耳機進行名稱和狀態的判斷就靠讀出這兩個檔案得到。
S5PV210 Linux效能統計
使用查詢命令 cat proc meminfo列印資訊 memtotal 327864 kb 所有可用ram大小 即物理記憶體減去一些預留位和核心的二進位制 大小 memfree 291212 kb lowfree與highfree的總和,被系統留著未使用的記憶體 buffers 0 kb 用來給檔...
S5PV210 裸機中斷
這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...
S5PV210控制蜂鳴器
s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...