S5Pv210 Linux 驅動介面

2021-06-09 04:34:22 字數 3317 閱讀 7547

第一種: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函式...