sysfs create link 建立核心連線

2021-08-21 05:40:33 字數 1500 閱讀 5995

**:

之前做感測器之類,因為註冊的是input裝置,所以其檔案介面都是以/sys/class/input/input1(2...n);

這樣就有乙個問題,因為input生成的序列式隨機的,所以如果乙個裝置註冊不成功,那麼input的序列號將會被打亂,如果上層讀的input介面,這樣子整個上下層就會出現問題。

後來就想了乙個解決辦法,提供給上層的介面使用註冊的i2c介面,這樣對同一平台的是固定,但是當換了乙個平台其註冊的i2c線可能也不一樣。

所以很苦逼的,這兩種方法都不是很好使,怎麼辦呢?

通過鏈結的方法,把該裝置路徑鏈結到乙個固定的路徑,就ok了。

這個實現的方法,強大的linux核心已經幫我們解決了。具體**如下:

在fs/sysfs/symlink.c檔案中:

98/**

99 * sysfs_create_link - create symlink between two objects.

100 * @kobj: object whose directory we're creating the link in.

101 * @target: object we're pointing to.

102 * @name: name of the symlink.

103

*/104

int sysfs_create_link(struct kobject *kobj, struct kobject *target,

105const

char *name)

106

具體實現的例項如下:

1343         my_class = class_create(this_module, "test_class

");//建立乙個class

1344

if (is_err(my_class))

1348 my_dev = device_create(my_class, null, 0

, drvdata

, "test_class");

1350

if (is_err(my_dev))

1354 ret = sysfs_create_link(&my_dev->kobj, &client->dev.kobj, "

i2c"

);//建立client->dev.kobj的鏈結檔案,

1355

1356

/*create sysfs attributes

*/1357 ret = sysfs_create_group(&client->dev.kobj, &attribute_group);

檢視裝置檔案介面時:

/sys/class/my_class/my_dev/下面就有乙個i2c鏈結檔案,這樣子就不用擔心一直平台的時候,還需要再次更改檔案介面的問題了。

建立核心執行緒

在作業系統的最小執行單元就是執行緒,在核心中線程的概念更加容易看出來。比如說有的時候需要使用執行緒來完成一些任務,可是這些任務的工作量過大的時候系統處理這些任務就必須停下來等待。而等待的過程就大大的浪費了cup寶貴的時間,所以這個時候利用多執行緒去處理是最好的方法。在驅動裡生成的執行緒一般是系統執行...

建立核心執行緒

在作業系統的最小執行單元就是執行緒,在核心中線程的概念更加容易看出來。比如說有的時候需要使用執行緒來完成一些任務,可是這些任務的工作量過大的時候系統處理這些任務就必須停下來等待。而等待的過程就大大的浪費了cup寶貴的時間,所以這個時候利用多執行緒去處理是最好的方法。在驅動裡生成的執行緒一般是系統執行...

建立核心執行緒

在linux中,有一些程序完全執行在核心空間,比如ksoftirqd等等,這些程序稱為核心執行緒。今天,我們就動手建立乙個核心執行緒。引言 如果使用者層的程序違規訪問記憶體,核心會傳送乙個sigse 訊號給程序。我們的目標就是,建立乙個核心執行緒,如果發生了段錯誤,就在控制台列印 mykthread...