เรียนรู้การพัฒนาไดรเวอร์ Linux ด้วย Raspberry Pi


13

ฉันต้องการเขียนไดรเวอร์อุปกรณ์ Linux สำหรับอุปกรณ์ฮาร์ดแวร์จริง อุปกรณ์ต่อพ่วง Raspberry Pi อะไรที่เหมาะสมดี? โดยทั่วไปฉันต้องการสิ่งต่อไปนี้:

  1. จะต้องมีขนาดเล็กพอสำหรับผู้เริ่มต้น (ไม่กี่เดือนที่มากที่สุดดีขึ้นไม่กี่สัปดาห์)

  2. ต้องมีแผ่นข้อมูล ตอนแรกฉันนึกถึงอะแดปเตอร์ USB-Ethernet แต่ดูเหมือนว่ามันมีแผ่นข้อมูลที่ จำกัด มาก

ความคิดใด ๆ อาจเป็นเหมือนการทำให้ซีเรียลคอนโซลทำงานได้กับ GPIO หรือไม่


2
ไดรเวอร์ Linux เป็นโมดูลเคอร์เนลและในทางเทคนิคแล้วพวกเขาไม่จำเป็นต้องทำอะไรกับฮาร์ดแวร์เลยดังนั้นสิ่งแรกที่คุณต้องการลองน่าจะเป็นอินเตอร์เฟสของอุปกรณ์ถ่าน - นั่นคือสิ่งที่ให้ไฟล์อุปกรณ์ถ่านที่สามารถ อ่านจากและ / หรือเขียนถึง (คล้ายกับเนื้อหาใน proc) เพื่อจุดประสงค์เล็กน้อย
goldilocks

ฉันทำทุกอย่างเสร็จสิ้นบทเรียนและเขียนโมดูลเคอร์เนลสำหรับอุปกรณ์หลอกพร้อมกับอ่านหนังสือเกี่ยวกับการพัฒนาเคอร์เนล / ไดรเวอร์ ทั้งหมดนี้เป็นสิ่งที่ดี แต่ตอนนี้ฉันต้องการทำงานกับฮาร์ดแวร์จริง ..
ivan

Greg KH เขียนสิ่งนี้ไว้สักครู่ (อาจจะล้าสมัยเล็กน้อยในบางประเด็น): linuxjournal.com/article/7353ดังนั้นจึงมีอุปกรณ์ USB ที่มีแผ่นข้อมูลสาธารณะอยู่รอบ ๆ เขามีเคล็ดลับทางวิศวกรรมย้อนกลับไปที่นั่น (ฉันไม่อยากทำอะไรที่ซับซ้อนเกินไป) สิ่งต่าง ๆ สำหรับพินของ GPIO ฉันเดาได้ว่าโดยทั่วไปแล้วจะทำงานโดยใช้ไดรเวอร์ I2C และอื่น ๆ ที่มีอยู่ แต่คุณสามารถเพิกเฉยได้และทำบางสิ่งด้วยตัวคุณเอง
goldilocks

คำตอบ:


4

มันอาจเป็นเรื่องยากที่จะเรียนรู้การเขียนไดรเวอร์เมื่อเชื่อมต่อกับอุปกรณ์ที่ซับซ้อนและ / หรือบัสที่ซับซ้อน ด้วยเหตุนี้ฉันจึงขอแนะนำให้ใช้อุปกรณ์ที่เรียบง่ายและเป็นที่รู้จัก (ไม่สนใจการใช้งานไดรเวอร์ในเคอร์เนล) เช่นอุปกรณ์I²C / SPI ที่มักใช้กับไมโครคอนโทรลเลอร์ ตัวอย่างเช่นคุณสามารถค้นหาอุปกรณ์ใด ๆ ที่ "สนับสนุน" โดยชุมชน Arduino (หมายถึงมีห้องสมุด / เอกสารประกอบ) และลองใช้กับ RaspberryPi

หากไม่เพียงพอหรือคุณไม่ต้องการซื้อฮาร์ดแวร์มากเกินไปคุณสามารถสร้างขึ้นเอง เพิ่งได้รับไมโครคอนโทรลเลอร์ (เช่น atmega หรืออะไรบางอย่าง) สร้างโปรแกรมเพื่อให้กลายเป็นอุปกรณ์บางส่วนแล้วลองเชื่อมต่อกับมันโดยใช้ไดรเวอร์ Linux วิธีนี้คุณสามารถสร้างโปรแกรมที่จะเลียนแบบคลาสของอุปกรณ์ต่าง ๆ ได้อย่างง่ายดาย และเนื่องจากคุณจะเขียน "เฟิร์มแวร์" ของคุณเองมันจะช่วยให้คุณแก้ปัญหาได้

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


วิธีการเกี่ยวกับการใช้การสื่อสารแบบอนุกรมในซอฟต์แวร์ผ่านหมุด GPIO? เช่นเชื่อมต่อซีเรียลกับพีซีและพยายามเอาท์พุทอย่างน้อยหนึ่งคอนโซล มันเป็นไปได้หรือไม่
ivan

@ivan: ฉันไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่ ถ้าตามอนุกรมคุณหมายถึง UART / rs232 และโดยซอฟต์แวร์คุณหมายถึงการกัดมันแล้วมันเป็นไปไม่ได้เพราะข้อ จำกัด ด้านเวลา หากในทางตรงกันข้ามคุณหมายถึง (อีกครั้ง) ในการใช้งานอุปกรณ์อนุกรม Linux โดยใช้ฮาร์ดแวร์ RaspberryPi UART แสดงว่าเป็นไปได้แน่นอน ฉันเชื่อว่าข้อมูลทั้งหมดที่จำเป็นเกี่ยวกับฮาร์ดแวร์นี้สามารถพบได้ในBCM2835 ARM Peripheralsเอกสาร แต่จำไว้ว่าในการใช้งานคุณต้องปิดการใช้งานไดรเวอร์ที่มีอยู่ในเคอร์เนลก่อน
Krzysztof Adamski

ขอบคุณ แต่คุณแน่ใจเกี่ยวกับความเป็นไปไม่ได้ที่ UART จะทำการโจมตีบิต ฉันพบลิงค์นี้: ganssle.com/articles/auart.htmดังนั้นจึงดูเหมือนเป็นไปได้ที่อัตราการรับส่งข้อมูลต่ำและอย่างน้อยจะใช้การส่งชิ้นส่วน (ซึ่งง่ายกว่า)
ivan

@ivan: บทความนี้ดูเหมือนจะไม่เกี่ยวกับระบบที่มีระบบปฏิบัติการทั่วไปเช่น Linux ใน UART คุณมีข้อ จำกัด เรื่องเวลาที่เข้มงวดซึ่งยากที่จะพบโดยไม่มีระบบปฏิบัติการตามเวลาจริง ที่ถูกกล่าวว่าอาจเป็นไปได้ที่จะทำเช่นนั้นในอัตรา baudrate ต่ำ แต่อาจไม่น่าเชื่อถือจริงๆ
Krzysztof Adamski

ดูเหมือนว่าคุณพูดถูก: raspberrypi.stackexchange.com/questions/1987/… (อย่างไรก็ตามมีวิธีแก้ไขที่น่าสนใจอยู่ที่นั่น) ขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ
ivan

3

โดยส่วนตัวแล้วฉันจะเริ่มต้นด้วยอุปกรณ์ที่ง่ายมากเช่น LED อย่างน้อยหนึ่งตัวเชื่อมต่อโดยตรงกับพิน GPIO

คุณสามารถซื้ออุปกรณ์ที่พร้อมจะเสียบหรือต่อสายอุปกรณ์ของคุณเองก็ได้

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

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


สวัสดี @ PiBorg คุณสามารถบอกทรัพยากรบางอย่างที่ช่วยให้ฉันเรียนรู้การเขียนโปรแกรมควบคุมแบบง่าย ๆ สำหรับอุปกรณ์เช่น LED อย่างน้อยหนึ่งตัวที่เชื่อมต่อโดยตรงกับหมุด GPIO หรือไม่
ซาก้า

0

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

ตัวเลือกอื่น ๆ อาจเป็นอุปกรณ์ / ส่วนประกอบที่ง่ายต่อการเชื่อมต่อเช่น photoresistor, เซ็นเซอร์อินฟราเรดแฝง (สั้น: PIR), เซ็นเซอร์อุณหภูมิ, พัดลมพีซี (โดยเฉพาะพัดลม 4 สายที่ช่วยให้คุณไม่เพียง แต่ตรวจสอบ แต่ยังควบคุม RPM) เมทริกซ์จุดไฟ LED และอื่น ๆ โดยทั่วไปอุปกรณ์ง่ายๆดังกล่าวจะช่วยให้คุณมีฮาร์ดแวร์ขั้นต่ำ (เพื่อให้คุณสามารถดูและสัมผัสสิ่งที่คุณทำสำเร็จ) และในเวลาเดียวกันคุณสามารถเรียนรู้เกี่ยวกับหัวข้อมากมายที่ใช้สำหรับอุปกรณ์ที่ซับซ้อนมากขึ้น ความซับซ้อนส่วนใหญ่มาจากโปรโตคอลที่ใช้

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

นี่คือตัวอย่างของการเชื่อมต่อกับเซ็นเซอร์อินฟราเรดแบบพาสซีฟ (ฉันจะทดสอบในไม่ช้าเมื่อ PIR ของฉันถูกส่งมอบ: 3) คุณสามารถใช้สิ่งนี้และเริ่มขุดลึกลงไปในโลกของเคอร์เนล Linux เพื่อดูว่าคุณสามารถสร้างเคอร์เนลไดร์เวอร์ที่ทำงานร่วมกับ PIR ได้อย่างไร

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