Monthly Archives: March 2017

การศึกษาลินุกซ์เคอร์เนล ด้วย Raspberry Pi: ทำความรู้จักกับ device tree

Device Tree คืออะไร คนที่เคยเล่น Raspbian OS image คงเคยเห็นไฟล์ .dtb ที่อยู่บน sd card และต้องใช้คู่กับลีนุกซ์เคอร์เนลใน ขั้นตอนการบูตระบบ แต่อาจจะยังไม่รู้ว่ามันคืออะไร ไฟล์ .dtb นี้คือ Device Tree Blob (DTB) หรือ Flattened Device Tree (FDT) ใช้สำหรับการระบุรายละเอียดของฮาร์ดแวร์ของบอร์ดใหักับลินุกซ์เคอร์เนลในช่วงการบูต บน wikipedia อธิบายแบบไม่ยาวมากไว้ว่า “The device tree is a data structure for describing hardware, which originated from Open Firmware. The data structure can hold any kind of data… Read More »

การศึกษาลินุกซ์เคอร์เนล ด้วย Raspberry Pi: พื้นฐานการทำงานของลินุกซ์ดีไวซ์ไดร์เวอร์ (ตอนที่ 3)

สองตอนก่อนหน้าเป็นการพูดถึงสิ่งที่เกี่ยวข้องกับการทำงานระหว่างดีไวซ์ไดร์เวอร์และโปรแกรมฝั่งยูสเซอร์สเปซ ส่วนในตอนนี้เราจะพูดถึงการเชื่อมโยงทั้งสองส่วนเข้าหากัน ซึ่งจะทำให้เราเข้าใจภาพรวมทั้งหมด และเป็นพื้นฐานสู่การเขียนและรวมถึงการดีบัก ลินุกซ์ดีไวซ์ไดร์เวอร์ การอินเตอร์เฟสระหว่างดีไวซ์ไดร์เวอร์และโปรแกรมฝั่งยูสเซอร์สเปซ เนื่องจากว่าเหตุผลเรื่องความปลอดภัยของระบบลินุกซ์แนวคิดเรื่องการติดต่อกับอุปกรณ์บนระบบจึงต้องทำผ่านระบบแฟ้มซึ่งทำให้การควบคุมสิทธิในการเข้าถึงสามารถใช้รูปแบบเดียวกับไฟล์ทั่วๆไปได้ (permission) ข้อดีของวิธีนี้คือทำให้เข้าใจง่ายแยกหน้าที่ของส่วนต่างๆได้อย่างชัดเจน แต่ก็มีข้อเสียคือทำให้มีโอเวอร์เฮด(เวลา)ของการเข้าถึงของโปรแกรมฝั่งยูสเซอร์สเปซไปยังตัวอุปกรณ์ ซึ่งถ้าเทียบกับการเขียนโปรแกรมติดต่ออุปกรณ์แบบที่ไม่มีระบบปฎิบัติการจะเห็นว่าแบบหลังทำงานได้เร็วกว่า แต่โดยทั่วๆไปเวลาที่เสียไปส่วนนี้อาจไม่สนใจก็ได้หากไม่ใช่งานแบบเรียลไทม์ การทำงานผ่านระบบแฟ้มนี้ทำให้เรานำความรู้เกี่ยวกับการทำงานกับไฟล์ในภาษาซี มาใช้ได้ทันที เนื่องจากเหมือนกันเป๊ะ file operations open(),read(),write() และ close()