डिफ़ॉल्ट हेडर बनाम उपयोगकर्तास्पेस कोड संकलित करने के लिए वास्तविक समय कर्नेल हेडर का उपयोग करना


11

ग्राहकों की आवश्यकताओं के अनुसार, मैंने डिफ़ॉल्ट कर्नेल के साथ सेंटोस 5.6 स्थापित किया। इस कर्नेल को स्थापित करने के साथ, time.h फ़ाइल में शामिल है #define CLOCK_MONOTONIC

अब, कर्नेल-डेवेल के साथ एक वास्तविक समय कर्नेल स्थापित किया गया था और हमारे कोड का उपयोग करना चाहते हैं CLOCK_MONOTONIC_RAW। यह कर्नेल के हेडर फ़ाइलों के एक भाग के रूप में मौजूद है, लेकिन जब मैं हमारे कोड को संकलित करता हूं, तो यह इसे मानक यूजरस्पेस में शामिल नहीं करता है।

मेरा प्रश्न यह है time.hकि वास्तविक समय कर्नेल के साथ डिफ़ॉल्ट रूप से पाया / शामिल करने की जगह के लिए क्या उचित प्रक्रिया है ? मेरे शोध से, ऐसा लगता है कि सिम्बलिंक्स खराब हैं, इसलिए इसे कैसे संभाला जाना चाहिए? प्रक्रिया या प्रक्रिया क्या है? CentOS 6.0 या 5.7 में अपग्रेड करना ग्राहकों की आवश्यकताओं के अनुसार एक विकल्प नहीं है।


क्या आप इस मॉड्यूल को डिफ़ॉल्ट CentOS कर्नेल में सम्मिलित करने की योजना बना रहे हैं?
बह्मत १ham

जवाबों:


1

हेडर फाइलें कहां से आती हैं, इस बारे में एक मुख्य अंतर है:

  • <time.h>glibc द्वारा प्रदान किया गया है (उदाहरण के लिए glibc-headersपैकेज)
  • <linux/time.h> लिनक्स कर्नेल हेडर द्वारा प्रदान किया गया है।

कर्नेल और उसके हेडर पैकेज को बदलने से कोई असर नहीं पड़ेगा <time.h>। केवल glibc बदलने से ऐसा होगा।

आपको पता होना चाहिए कि ग्लिबक में वह <time.h>शामिल है <bits/time.h>जो उदाहरण के रूप में हल /usr/include/x86_64-linux-gnu/bits/time.hकरता है और परिभाषित करता है CLOCK_MONOTONIC_RAW। यदि यह नहीं है, और आप इसे अपग्रेड नहीं कर सकते हैं, तो आपको इस तरह कोड का सहारा लेना होगा:

#include <time.h>
#ifndef CLOCK_MONOTONIC_RAW
# define CLOCK_MONOTONIC_RAW 4
#endif

0

आपको बस जरूरत है #include <linux/time.h>


आपके उत्तर के लिए धन्यवाद। मैंने linux / time.h लोकेशन को चेक किया और इसमें "RAW" का संदर्भ नहीं है। मैं एक अपडेटेड रियल-टाइम कर्नेल चला रहा हूं, लेकिन मुझे बस यह समझने की जरूरत है कि नए कर्नेल के हेडर को कैसे ट्रांसफर किया जाए जिसमें "RAW" का संदर्भ यूजरस्पेस हेडर फाइलों में हो। क्या मुझे कोई मतलब है या मेरा दृष्टिकोण सही है? मदद के लिए फिर से शुक्रिया।
कबानाबॉय

@ cabanaboy, मुझे यकीन नहीं है कि आप कहाँ देख रहे हैं या फ़ाइल कहाँ से आई है, लेकिन linux / time.h सबसे निश्चित रूप से CLOCK_MONOTONIC_RAW को परिभाषित करना चाहिए। यह भी कोई फर्क नहीं पड़ता कि आप एक वास्तविक समय कर्नेल चला रहे हैं या नहीं; हेडर समान हैं।
Psusi

3
@cabanaboy, रुको ... आप एक पुराना ओएस चला रहे हैं, जिसे 2.6.28 की तुलना में पुराने कर्नेल के साथ भेज दिया जाना चाहिए। आपने नया कर्नेल कैसे स्थापित किया? यदि आपने इसे स्वयं स्रोत से बनाया है, तो आपको इसकी आवश्यकता है make install_headers। यदि आपको एक अद्यतन कर्नेल पैकेज मिला है, तो आपको संबंधित अद्यतन कर्नेल_हेडर्स पैकेज प्राप्त करने की आवश्यकता है।
सोयूसी

0

हेडर जो आपके वितरण को स्थापित करता है वे कर्नेल में नहीं होते हैं, वे sanitzed / "userspaced" संस्करण हैं। आपको कर्नेल स्रोतों में शामिल / linux में हेडर की एक प्रति प्राप्त करनी होगी और उन्हें सेट किया जाना चाहिए ताकि वे / usr / शामिल / linux (gcc के लिए -I ध्वज को फिराने की आवश्यकता हो) के लिए प्राथमिकता में उपयोग किए जाएं। और अगर कुछ भी नहीं है तो जाँच करें।


0

मुझे यकीन है कि मैं नए कर्नेल के साथ आए हेडर के खिलाफ निर्माण कर रहा हूं। CLOCK_MONOTONIC_RAWमें परिभाषित किया जाना चाहिए linux/time.h। पहले पता करें कि आप किस हेडर का उपयोग कर रहे हैं, और जांचें कि फाइल में इसकी परिभाषा कैसी है। आप इसे अपने कोड में परिभाषित कर सकते हैं (केवल एक चेक के रूप में) यह देखने के लिए कि क्या होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.