จะเริ่มเขียนไดร์เวอร์ได้อย่างไร?


21

ฉันมีแลปท็อปราคาถูกทิ้งฉันอยากจะลองเล่นไปรอบ ๆ Thinkpad SL 500

สิ่งที่ทำให้ฉันรำคาญใจคือไฟ LED สองดวงอันที่หนึ่งสำหรับการเชื่อมต่อแบบไร้สายและอีกอันสำหรับการจำศีลซึ่งไม่สว่างขึ้นเลยถึงแม้ว่ามันจะใช้งานได้ แต่ฉันก็ลองใช้มันบน windows

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

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

และเมื่อฉันพูดถึงวิธีการฉันหมายถึงระเบียบวิธีทีละขั้นตอนด้วยเหตุผลสำหรับแต่ละขั้นตอนเช่นในคำตอบที่ฉันให้กับคนอื่นที่นี่: & & หมายถึงเป็นโมฆะ * p = && abc;

ฉันมีความเชี่ยวชาญในการรวบรวมข้อมูลผ่านคลังเก็บข้อมูลขนาดใหญ่โดยใช้การวิเคราะห์โค้ดแบบคงที่ & co แต่ฉันคิดว่าการขาดความรู้ด้านฮาร์ดแวร์ของฉันเป็นอุปสรรคต่อฉันในปัญหานี้

PS: ฉันใช้ ArchLinux ดังนั้นเกือบเคอร์เนลรุ่นล่าสุด


คุณได้ลองเปิดใช้งาน CONFIG_IDEAPAD_LAPTOP ในเคอร์เนลหรือไม่
Paweł Rumian

@gorkypl: ไม่ฉันจะทำไม คำถามไม่ได้เกี่ยวกับการแก้ปัญหา แต่เกี่ยวกับกลยุทธ์ที่ใช้ในการแก้ปัญหาด้วยตัวเอง (ในฐานะโปรแกรมเมอร์)
Flavius

3
ตกลงฉันเข้าใจคุณผิด อย่างไรก็ตามในฐานะที่เป็นโมดูลเคอร์เนล IDEAPAD_LAPTOP เป็นผู้รับผิดชอบในสิ่งดังกล่าวในชุด SL ของ Thinkpads คุณสามารถเริ่มต้นจากการดูซอร์สโค้ดของมัน นอกจากนี้คุณอาจสนใจในการอ่านบางอย่างเช่น kernelnewbies: kernelnewbies.org/KernelHackingหรือหนังสือยอดเยี่ยมที่เขียนโดย LKH: kroah.com/lknแหล่งข้อมูลดีๆอีกสองแหล่งที่มาในใจของฉันคือ: lwn.net/Kernel/ LDD3และamazon.com/dp/0596005652/?tag=stackoverfl08-20
Paweł Rumian

คำตอบ:


5

ฉันควรทำตามวิธีการอย่างเป็นระบบเพื่อค้นหาว่าอุปกรณ์ใดรับผิดชอบต่อ LED เหล่านั้น

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

หากไฟ LED ไม่ทำงานบน Linux และคุณไม่ทราบว่าฮาร์ดแวร์ตัวใดกำลังขับอยู่บนระบบปฏิบัติการอื่นคุณคิดว่าคุณจะเขียนไดรเวอร์อย่างไร

นั่นคือคำตอบที่ดีที่สุดที่ทุกคนจะให้ฉันกลัวและนั่นทำให้คุณ (เกือบ) ไม่มีอะไรที่ฉลาดกว่านี้มาก่อน เพียงชี้ให้คุณเห็นว่าคุณต้องค้นหาว่าคุณใช้ฮาร์ดแวร์ตัวใดเพื่อให้สามารถทำอะไรได้มากกว่านี้

หากต้องการความช่วยเหลือเพิ่มเติมตัวชี้สองตัว:

  1. หนึ่งในชิป IDE หรือ SATA ที่ใช้บ่อยคือซีรี่ส์ ICHX หรือ ICHXr ของ Intel (ICH5, ICH6, ICH7 ... หรือ ICH6R, ICH7R, ... )

  2. ลินุกซ์เคอร์เนลไดเรกทอรีที่อยู่รหัสแหล่งที่มาสำหรับการควบคุมจำนวนมากของไฟ LED

ฉันจะให้ตัวชี้ที่ 3 กับคุณด้วย แต่เมื่อ gorkypy นี้เขียนไปแล้วฉันสามารถทำซ้ำได้: ไดรเวอร์อุปกรณ์ Linux รุ่นที่ 3ในรูปแบบ PDF ฟรี

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