ฉันจะตรวจสอบการกำหนดค่าการเสนอราคาเคอร์เนลของฉันได้อย่างไร


11

ฉันต้องการตรวจสอบว่าเคอร์เนล Linux ของฉันเป็นแบบ preemptive หรือไม่ใช่แบบ preemptive ฉันจะตรวจสอบสิ่งนี้โดยใช้คำสั่งอะไรเช่นuname -a?

คำตอบ:


10

ไม่ว่าเคอร์เนลจะถูกยึดเอาเสียก่อนหรือไม่นั้นขึ้นอยู่กับสิ่งที่คุณต้องการที่จะยึดเอาไว้เช่นเดียวกับในเคอร์เนล Linux มีหลายสิ่งที่สามารถเปิด / ปิดการจองได้แยกกัน

หากเคอร์เนลของคุณมีCONFIG_IKCONFIGและCONFIG_IKCONFIG_PROCเปิดใช้งานคุณสามารถค้นหาการกำหนดค่า preemption ของคุณผ่าน/proc/config.gz(ถ้าคุณไม่มีสิ่งนี้การกระจายบางอย่างจะส่งการตั้งค่าเคอร์เนล/bootแทน):

$ gzip -cd /proc/config.gz | grep PREEMPT
CONFIG_TREE_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_PREEMPT_TRACER is not set

หากคุณมีCONFIG_IKCONFIGแต่ไม่มีCONFIG_IKCONFIG_PROCคุณสามารถเอาออกจากเคอร์เนลอิมเมจextract-ikconfigได้


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

2

เคอร์เนลที่จองล่วงหน้าได้ (เดสก์ท็อปที่มีเวลาหน่วงต่ำ) PREEMPTติดแท็กในชื่อเวอร์ชัน ( uname -a) นอกจากนี้ยังปรากฏใน/proc/versionและในสตริง "version magic" ที่ใช้ในการตัดสินใจว่าโมดูลสามารถ / ไม่สามารถโหลดบนเคอร์เนลที่กำหนดเช่น

mymodule: version magic '3.4.35 mod_unload ARMv7 p2v8 ' 
              should be '3.4.35 preempt mod_unload ARMv7 p2v8 '

ไม่มีแท็กดังกล่าวอยู่สำหรับCONFIG_PREEMPT_VOLUNTARYafaik

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