เป็นไปได้ไหมที่จะมีโมดูลเคอร์เนล 2 ตัวเชื่อมโยงกับ /dev/device เดียวกัน

ฉันต้องการจำลองอุปกรณ์ราคาแพงด้วยซอฟต์แวร์จำลอง (เราเรียกว่า (B)) ที่โต้ตอบกับ /dev/device แทนที่อุปกรณ์จริง

ขณะนี้โมดูลเคอร์เนลมีอยู่แล้วเพื่อจัดการอุปกรณ์จริงที่เชื่อมโยงกับ /dev/device (เราเรียกว่า (A))

เป็นไปได้ไหมที่ (A) ส่งข้อมูลไปที่ /dev/device และ (B) อ่านข้อมูลนี้ เตรียมการตอบกลับ และส่งกลับไปที่ /dev/device และ (A) อ่านสิ่งนี้ การตอบสนอง ?

หากมีวิธีแก้ปัญหาที่ง่ายกว่าในการทำสิ่งที่ฉันต้องการ (เช่น จำลองอุปกรณ์ฮาร์ดแวร์ด้วยซอฟต์แวร์จำลอง) อย่าลังเลที่จะแนะนำ


person Fabien    schedule 14.02.2013    source แหล่งที่มา
comment
นี่คือ (B) แบบจำลองหรืออุปกรณ์จริงหรือไม่? ถ้าฉันเข้าใจถูกต้อง ประเด็นก็คือการสร้างแบบจำลองในพื้นที่ผู้ใช้เพื่อให้สามารถสื่อสารกับโมดูล Kernel (A) ผ่าน dev/device?   -  person KBart    schedule 14.02.2013
comment
@KBart (B) เป็นซอฟต์แวร์จำลองไม่ใช่อุปกรณ์จริง แต่เป็นการจำลองอุปกรณ์นี้ที่ฉันไม่มี และใช่ ฉันต้องการสื่อสารผ่าน /dev/device   -  person Fabien    schedule 14.02.2013
comment
@Antoine ฉันจะดู umockdev ถ้ามันเหมาะกับความต้องการของฉัน   -  person Fabien    schedule 14.02.2013
comment
@Antoine การจำลองได้รับการเข้ารหัสแล้ว umockdev ดูเหมือนว่าจะต้องเขียนโค้ดอีกครั้งใน Python นี่อาจเป็นวิธีแก้ปัญหา แต่ในระยะยาวหากไม่มีคำตอบสำหรับคำถามนี้   -  person Fabien    schedule 14.02.2013
comment
@Fabien เป็นการยากที่จะบอกโดยไม่รู้ว่าอุปกรณ์ / ไดรเวอร์ของคุณทำอะไรจริง ๆ แต่ฉันจะใช้แนวทางดังกล่าว: เชื่อมต่อพีซีเครื่องที่สองด้วยอินเทอร์เฟซดั้งเดิม (A) ใช้หรือกำหนดเส้นทางไปยังอุปกรณ์อื่น (UART, USB ฯลฯ ) บน พีซีเครื่องที่สอง daemonize คุณจำลอง (B) และเชื่อมต่อกับ dev/อินเทอร์เฟซที่เหมาะสม ตามที่ฉันเข้าใจ คุณต้องการตรวจสอบอุปกรณ์นั้นในระดับโปรโตคอล ดังนั้นอินเทอร์เฟซพื้นฐานจึงไม่มีความสำคัญ ดูเหมือนว่า: PC1[dummy_client/logger‹--dev/device‹--›kmodule(A)‹--›interface]‹-----›PC2[interface--›dev/int--›mockup_daemon (ข)]   -  person KBart    schedule 15.02.2013
comment
@KBart ขอบคุณสำหรับวิธีแก้ปัญหาของคุณ ฉันจะเก็บมันไว้ในใจ อย่างไรก็ตาม ฉันอยากจะใช้พีซีเพียงเครื่องเดียวเท่านั้นที่เป็นไปได้ เพื่อหลีกเลี่ยงไม่ให้สถาปัตยกรรมการทดสอบซับซ้อนขึ้นโดยการใช้พีซีจำลองอุปกรณ์ขนาดเล็ก BTW ฉันกำลังตรวจสอบการแฮ็กโมดูลเคอร์เนล (A) โดยตรงเพื่อเสียบโค้ดเข้ากับการจำลอง (B) ที่นั่น และวางโค้ดลงใน #ifdef #endif เพื่อทำการทดสอบ   -  person Fabien    schedule 15.02.2013
comment
@Fabien และเป้าหมายคือทดสอบ / ดีบัก kmodule (A) ของคุณ? ถ้าเป็นเช่นนั้นอะไรกันแน่? หากเป็นไดรเวอร์อุปกรณ์ จะมี 2 อินเทอร์เฟซ - ด้านล่างที่เชื่อมต่ออุปกรณ์ผ่านอินเทอร์เฟซทางกายภาพบางส่วน และด้านบนที่ให้ API (/dev/device) ให้กับพื้นที่ผู้ใช้ แล้วคุณโฟกัสส่วนไหนล่ะ? หรือเป็นเพียงเกี่ยวกับตรรกะภายในของ (A) และอินเทอร์เฟซไม่สำคัญเลย?   -  person KBart    schedule 15.02.2013
comment
@KBart เป้าหมายคือใช้ kmodule (A) เดียวกัน แต่แทนที่อุปกรณ์จริงด้วยซอฟต์แวร์ ด้วยคำอธิบายของคุณ ฉันคิดว่าฉันจะต้องแก้ไขส่วนล่างของ kmodule เพื่อส่งข้อมูลจำลองไปยังด้านบน/ผู้พัฒนา/อุปกรณ์ ฉันคิดว่าฉันจะต้องศึกษาเพิ่มเติมในส่วนนี้ ขอบคุณ.   -  person Fabien    schedule 19.02.2013
comment
@Fabien ลองดูที่ LDD3 - ในกรณีที่คุณไม่เคยเห็นมาก่อน - เป็นหนึ่งในนั้น จุดเริ่มต้นที่ดีที่สุดสำหรับไดรเวอร์อุปกรณ์เคอร์เนล   -  person KBart    schedule 19.02.2013


คำตอบ (1)


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

person ravi bhuva    schedule 19.02.2013