linux sys檔案的建立

2021-08-17 09:55:38 字數 3496 閱讀 6813

1 sys 檔案的建立

1.1 定義***_show 和***_store函式,這兩個函式對應對sys檔案的讀寫,show對應read ,store對應write

函式的型別如下:

ssize_t ***_show(struct device *d, struct device_attribute*attr, char *buf) //對應read

ssize_t ***_store(struct device *d, struct device_attribute*attr,const char *buf,size_t count)  //對應write

這兩個函式名可以任意命名,只要型別對了就可以

1.2 用device_attr巨集建立屬性檔案

示例**如下:

static device_attr(***test, s_iwusr |s_irugo, ***_show, ***_store);

這是乙個巨集定義,將定義乙個 dev_attr_***test,型別為struct attribute的結構體。

其中***test為要建立的sys檔名。

***_show, ***_store不一定都要定義,例如如果只提供讀的介面可以定義為

static device_attr(***test, s_iwusr |s_irugo, ***_show, null);

1.3 呼叫sysfs_create_file建立sys檔案

sysfs_create_file(&pdev->dev.kobj,&dev_attr_***test);

1.4 登出sys檔案

sysfs_remove_file(&pdev->dev.kobj,&dev_attr_***test); 

2 示例**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

static ssize_t ***_show(struct device *d, struct device_attribute*attr, char *buf)  

static ssize_t ***_store(struct device *d, struct device_attribute*attr,const char *buf,size_t count)  

else

return count;    

}//用device_attr巨集建立屬性檔案,如果show()或是store()沒有功能,就以null代替  

static device_attr(***test, s_iwusr |s_irugo, gpio_show, gpio_store);  

static int ***_probe(struct platform_device *pdev)

static int ***_remove(struct platform_device *pdev)

static const struct of_device_id ***_dt_ids = ,

};module_device_table(of, ***_dt_ids);

static struct platform_driver test_***_driver = ,

};module_platform_driver(test_***_driver);

module_license("gpl v2");

module_author("freescale semiconductor, inc.");

module_description("test driver");

module_alias("test");

如果上面的驅動載入成功,我們可以在/ sys/bus/platform/drivers/目錄下看到***-int找到***test的sys檔案。可以讀寫操作。

2 但是在很多時候,我們的驅動可能有很多引數需要配置,這時我們可以建立一組sys檔案。

下面是例子

//用device_attr巨集建立屬性檔案,如果show()或是store()沒有功能,就以null代替  

static device_attr(***test, s_iwusr |s_irugo, ***_show, ***_store);  

static device_attr(***set, s_iwusr |s_irugo, ***_show, ***_store);  

//屬性結構體陣列最後一項必須以null結尾。  

static struct attribute ****_attrs = ;

static const struct attribute_group ***_attr_grp =  ;

static int ***_probe(struct platform_device *pdev)

static int ***_remove(struct platform_device *pdev)

替換上面的**,重新編譯,驅動載入成功後,就可以在可以在/sys/bus/platform/drivers/目錄下看到***-int找到***test和***set兩個sys檔案。可以讀寫操作。

3 通過上面的例子我們已經建立了sys檔案,但是在/sys/bus/platform/drivers/***-int還有很多其他的檔案,很不好找。而且這個檔案的目錄是和驅動的名字相關的

我們可以自己在指定的目錄建立sys檔案。

我們可以通過struct kobject *  kobject_create_and_add(const char *name,        struct kobject *parent);建立是sys檔案的目錄

這個函式引數name是目錄名,parent是父節點的指標

例如我們可以呼叫

kobj = kobject_create_and_add("test-***", &platform_bus.kobj);

ret = sysfs_create_file(kobj,&dev_attr_***test);

則可以在/sys/devices/platform/test-***目錄下看到***test的sys檔案

如果要在/sys下建立則可以呼叫

kobj = kobject_create_and_add("test-***", null);

ret = sysfs_create_file(kobj,&dev_attr_***test);

下面是示例**

struct kobject *kobj = null; 

static int ***_probe(struct platform_device *pdev)

static int ***_remove(struct platform_device *pdev)

linux sys 檔案系統

一 檔案系統 1.window檔案系統 ntfs u盤 fat32 linux檔案系統 ext2 ext3 ext4 stat裡面的時間辨析 atime 最近訪問時間 mtime 最近更改時間 指最近修改檔案內容的時間。ctime 最近改動時間 指最近改動inode的時間。3.access檢查乙個檔...

MySQL properties檔案的建立和編寫

開發中獲得連線的四個引數 uri,埠號,使用者名稱,密碼 通常到存在配置檔案中,方便後期維護,程式如果需要更換資料庫,只需要更改配置檔案就行,在src目錄下新建檔案,字尾名為properties,檔名隨意.一行一組資料,格式為 key value 文字注釋資訊可以用 來注釋。例 data.prope...

mif檔案 coe檔案的建立

在fpga中使用rom的應用是十分常見的,但資料較少時,可以直接使用quartus ii 或者vivado工具直接產生mif檔案或者coe檔案。但當資料量很大的時,在eda工具中,乙個個輸入這是非常繁瑣的 不現實的,針對這種情況,一般是使用如matlab c等高階語言產生mif檔案 coe檔案,然後...