การเข้าถึงหน่วยความจำโมดูลเคอร์เนล


9

โมดูลเคอร์เนลที่แตกต่างกันสองโมดูลสามารถเข้าถึงพื้นที่หน่วยความจำเดียวกันจากการเรียกไปยัง ioremap_nocache () ได้หรือไม่?

ฉันมีไดรเวอร์ไร้สายและโมดูลแยกต่างหากฉันต้องการให้โมดูลแยกต่างหากเพื่อทำโปรไฟล์ค่าเสียงรบกวนในการ์ดขณะที่ไดรเวอร์ยังคงทำงานอยู่ ดังนั้นคำถามของฉันด้านบน

ถนนสายหนึ่งที่ฉันสำรวจคือเริ่มเคอร์เนลเธรดจากไดรเวอร์จากนั้นฉันก็ใช้เซมาฟอร์เพื่อป้องกันสภาวะการแข่งขันใด ๆ ที่เกิดจากการอ่าน / เขียนพร้อมกันไปยังพื้นที่ที่อยู่เดียวกัน ฉันหวังว่าเธรดย่อยจะสามารถเข้าถึงพื้นที่หน่วยความจำเดียวกันได้

น่าเสียดายที่นี่ไม่ทำงานตามที่ฉันคาดไว้ ฉันขอขอบคุณข้อเสนอแนะใด ๆ


ทำไมคุณต้องการโมดูลเคอร์เนลเพื่อทำโปรไฟล์ค่าเสียงรบกวน
gertvdijk

ขอบคุณสำหรับคำถามไดรเวอร์ไร้สายมีความซับซ้อนมากและการปรับเปลี่ยนช่วงเวลาของการสอบเทียบอาจทำให้เกิดผลลัพธ์ที่ไม่ได้ตั้งใจ ฉันจะต้องทำเช่นนี้เพราะจะทำการสอบเทียบสำหรับช่วงเวลาที่ยาวเกินไปสำหรับความต้องการของฉันเท่านั้น เนื่องจากฉันรู้วิธีการโปรไฟล์อุปกรณ์ในโมดูลแยกต่างหากฉันแค่อยากรู้ว่าฉันสามารถเข้าถึงหน่วยความจำพื้นที่เดียวกันกับที่คนขับใช้งานได้หรือไม่
Radagasp

2
โปรดแก้ไขคำถามของคุณเพื่อรวมรายละเอียดทั้งหมดเกี่ยวกับความพยายาม / แนวทางก่อนหน้าของคุณ นั่นคือวิธีที่เว็บไซต์นี้ใช้งานได้ มันไม่ใช่ฟอรัมการสนทนา แต่เป็นเว็บไซต์ถาม - ตอบคุณเห็นหรือไม่
gertvdijk

การสนทนาอาจรวมถึงคำถามและคำตอบสิทธิบางอย่างและอื่น ๆ ที่ไม่ถูกต้อง - ดูเหมือนว่าการตีความกฎทั่วทั้งผู้ดูแลระบบอยู่ในความหมายของจังหวัด ฉันได้ปรับปรุงคำถามของฉันแน่นอน
Radagasp

คำตอบ:


7

ฉันคิดว่าคุณตั้งใจที่จะใช้เคอร์เนลโมดูลอื่นเนื่องจากคุณคิดว่าการแชร์ข้อมูลระหว่างโมดูลเคอร์เนลง่ายกว่า แต่บางทีมันอาจไม่ใช่ตัวเลือกที่ดี หากเป็นไปได้ที่จะ 'ทำโปรไฟล์เสียง' ในพื้นที่ผู้ใช้ฉันคิดว่าทางออกที่ดีกว่าคือการใช้ 'profiler' ในพื้นที่ผู้ใช้

ในโซลูชันนี้ผู้ใช้ profiler พื้นที่อ่านข้อมูลทำการคำนวณบางอย่างและส่งผลลัพธ์มากกว่า

หากวิธีนี้ใช้ได้การใช้งานมีดังนี้

ในโมดูลเคอร์เนลมันเป็นเพียงการลงทะเบียนอุปกรณ์ถ่านใน '/ proc' และใช้ 'อ่าน' และ 'เขียน' ดั้งเดิม ในพื้นที่ผู้ใช้เป็นเพียงการใช้ profiler การอ่านและการเขียนไปยังอุปกรณ์ถ่าน รายละเอียดและข้อมูลสำหรับการดำเนินงานทั้งหมดนี้เป็นที่นี่


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

1
ใช่คุณจะต้องติดตั้งซอฟต์แวร์ แต่ไม่ใช่โมดูล คุณจะต้องเขียนโปรแกรมพื้นที่ผู้ใช้ปกติง่ายกว่าโมดูลที่อ่านจาก '/ dev / nameofdevice' และเขียนลงไป ไม่จำเป็นต้องใช้ 'ioremap_nocache ()' เพียงแค่ syscalls เป็น 'เปิด', 'อ่าน', 'เขียน', 'ปิด' และใช่โมดูลไร้สายจะต้องลงทะเบียนอุปกรณ์ถ่าน '/ dev / nameofdevice' ภายในเพื่อแสดงข้อมูลไปยัง userland
vitorafsr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.