मेरे पास एक चार डिवाइस की एक छोटी और बड़ी संख्या है, और मैं उन्हें 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 उत्तर
हेडर linux/kdev_t.h जो MKDEV
मैक्रो प्रदान करता है, उपयोगकर्ता अंतरिक्ष कार्यक्रमों के लिए भी पहुंच योग्य है।
dev_t
प्रकार की परिभाषा उपयोक्ता अंतरिक्ष कार्यक्रमों के लिए पहुंच योग्य नहीं है (हेडर linux/types.h
कर्नेल और उपयोगकर्ता के लिए भिन्न हैं), लेकिन MKDEV
के परिणाम के लिए आप उपयोग कर सकते हैं 16 बिट या अधिक का कोई भी पूर्णांक प्रकार।
#include <linux/kdev_t.h>
<...>
int device_id = MKDEV(10, 249);