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檔案,然後...