การใช้ส่วนหัวเคอร์เนลเรียลไทม์เพื่อรวบรวมรหัสผู้ใช้กับส่วนหัวเริ่มต้น


11

ตามความต้องการของลูกค้าฉันติดตั้ง CentOS 5.6 ด้วยเคอร์เนลเริ่มต้น ด้วยเคอร์เนลนี้ติดตั้งไฟล์ time.h #define CLOCK_MONOTONICรวมถึง

ตอนนี้เคอร์เนลแบบ real-time ได้รับการติดตั้งพร้อมกับเคอร์เนล devel CLOCK_MONOTONIC_RAWและรหัสของเราต้องการที่จะใช้ มันมีอยู่เป็นส่วนหนึ่งของไฟล์ส่วนหัวของเคอร์เนล แต่เมื่อฉันรวบรวมรหัสของเรามันไม่พบมันใน userspace มาตรฐานรวมถึง

คำถามของฉันคือขั้นตอนที่เหมาะสมในการรวม / แทนที่time.hพบโดยค่าเริ่มต้นด้วยเคอร์เนลเรียลไทม์คืออะไร? จากการวิจัยของฉันดูเหมือนว่า symlink ไม่ดีดังนั้นควรจัดการอย่างไร ขั้นตอนหรือกระบวนการคืออะไร? การอัพเกรดเป็น CentOS 6.0 หรือ 5.7 ไม่ใช่ตัวเลือกตามความต้องการของลูกค้า


คุณวางแผนที่จะแทรกโมดูลนี้ในเคอร์เนล CentOS เริ่มต้นหรือไม่?
บาฮามาต

คำตอบ:


1

มีความแตกต่างที่สำคัญเกี่ยวกับที่มาของไฟล์ส่วนหัว:

  • <time.h>ให้บริการโดย glibc (เช่นglibc-headersแพคเกจ)
  • <linux/time.h> จัดทำโดยส่วนหัวเคอร์เนล Linux

<time.h>เปลี่ยนเคอร์เนลและแพคเกจส่วนหัวของมันจะไม่ส่งผลกระทบ การเปลี่ยน glibc เท่านั้นจะทำได้

คุณควรจะหาของ 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" ลงในไฟล์ส่วนหัว userspace ฉันเข้าใจแล้วหรือแนวทางของฉันถูกต้องหรือไม่? ขอบคุณอีกครั้งสำหรับความช่วยเหลือ
cabanaboy

@cabanaboy ฉันไม่แน่ใจว่าคุณกำลังมองหาที่ใดหรือไฟล์มาจากไหน แต่ linux / time.h แน่นอนที่สุดควรกำหนด CLOCK_MONOTONIC_RAW มันไม่สำคัญว่าคุณกำลังใช้เคอร์เนลตามเวลาจริงหรือไม่ ส่วนหัวเหมือนกัน
psusi

3
@cabanaboy รอ ... คุณใช้ระบบปฏิบัติการเก่าที่ต้องมาพร้อมกับเคอร์เนลที่เก่ากว่า 2.6.28 เมื่อมีการเพิ่ม คุณติดตั้งเคอร์เนลใหม่ได้อย่างไร? make install_headersถ้าคุณสร้างมันขึ้นมาจากแหล่งที่มาด้วยตัวคุณเองแล้วคุณจะต้อง หากคุณได้รับแพคเกจเคอร์เนลที่อัปเดตคุณจะต้องได้รับแพคเกจ kernel_headers ที่อัปเดตแล้วที่สอดคล้องกัน
psusi

0

ส่วนหัวที่การติดตั้งการแจกจ่ายของคุณไม่ใช่ที่อยู่ในเคอร์เนล แต่เป็นรุ่น sanitzed / "userspaced" คุณจะต้องได้รับสำเนาของส่วนหัวรวม / linux ในเคอร์เนลแหล่งและตั้งค่าเพื่อใช้ในการตั้งค่าที่ต้องการใน / usr / include / linux (จำเป็นต้องลบ -I ธงสำหรับ gcc) และตรวจสอบว่าไม่มีอะไรผิดพลาด


0

ฉันจะทำให้แน่ใจว่าฉันสร้างกับส่วนหัวที่มาพร้อมกับเคอร์เนลใหม่ ควรจะกำหนดไว้ในCLOCK_MONOTONIC_RAW linux/time.hก่อนอื่นให้ค้นหาว่าคุณใช้ส่วนหัวใดและตรวจสอบความถูกต้องของไฟล์นั้น คุณสามารถกำหนดไว้ในรหัสของคุณ (เป็นเพียงการตรวจสอบ) เพื่อดูว่าเกิดอะไรขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.