मेरे पास एक चार डिवाइस की एक छोटी और बड़ी संख्या है, और मैं उन्हें dev_t में बदलना चाहता हूं (जो डिवाइस नंबर रखता था), लेकिन मैं मॉड्यूल बनाने और लिखने की सभी प्रक्रिया नहीं करना चाहता , insmod इसे कर्नेल में और आदि।

MKDEV मैक्रो का उपयोग करने का एक आसान और तेज़ तरीका क्या है?

#include <linux/kdev_t.h>
#include <linux/types.h>

dev_t device_num = MKDEV(int major, int minor);

एक मानक C प्रोग्राम का उपयोग करना स्पष्ट रूप से काम नहीं करेगा, क्योंकि यह कर्नेल-कोड/कर्नेल-स्पेस है।

अपडेट: यूजर-स्पेस प्रोग्राम लिखना काम करता है लेकिन मैं dev_t डेटाटाइप का उपयोग नहीं कर सकता, शायद इसलिए कि इसका उपयोग केवल कर्नेल द्वारा किया जा सकता है?

#include <linux/kdev_t.h> // MKDEV
#include <linux/types.h> // dev_t
#include <stdio.h> // I/O

int main(void)
{
    int device_id = MKDEV(10, 249);
    printf("%d\n", device_id); // 2809
    return 0;
}
1
Dudu Faruk 12 सितंबर 2020, 18:00

1 उत्तर

सबसे बढ़िया उत्तर

हेडर linux/kdev_t.h जो MKDEV मैक्रो प्रदान करता है, उपयोगकर्ता अंतरिक्ष कार्यक्रमों के लिए भी पहुंच योग्य है।

dev_t प्रकार की परिभाषा उपयोक्ता अंतरिक्ष कार्यक्रमों के लिए पहुंच योग्य नहीं है (हेडर linux/types.h कर्नेल और उपयोगकर्ता के लिए भिन्न हैं), लेकिन MKDEV के परिणाम के लिए आप उपयोग कर सकते हैं 16 बिट या अधिक का कोई भी पूर्णांक प्रकार।

#include <linux/kdev_t.h>

<...>
int device_id = MKDEV(10, 249);
0
Tsyvarev 12 सितंबर 2020, 19:10