Skip to content

เบื้องหลัง Senior Project ของผม [ภาคกลาง]

March 28, 2009

หลังจากผ่านการรายงานความก้าวหน้าครั้งที่ 1 ไป โดยมีกรรมการคือ อ.เกริก,อ.เมธี และ อ.ชัย ซึ่งกรรมการก็เป็นห่วงว่า จะทำเสร็จทันมั้ย แม้ว่าจะเปลี่ยนแปลง scope แล้วก็ตาม พวกเราก็ได้ตอบไปว่า “ยังไง มันก็ต้องทันครับ” นั่นล่ะครับ และก็ผ่านมาได้

จากนั้นก็ถึงช่วง CU Job Fair , งาน Nitad#15 และอะไรอีกหลายอย่างมากมายรุมเข้ามา ก็เป็นอันว่า งานเกือบจะไม่คืบหน้าเลย แต่ตอนนั้นรู้ว่า เราจำเป็นต้องศึกษา วิธีการเขียน driver บน Linux ซึ่ง จากการหาข้อมูลบนอินเตอร์เน็ต พบว่ามันมี 2 แบบ คือ

  • Char device driver ซึ่ง มีวิธีสอนเขียนอย่างง่ายๆ อยู่บนอินเตอร์เน็ตพอสมควร มันเป็น driver สำหรับอุปกรณ์พ่วงทั่วไปครับ เช่นเมาส์ หรือ อะไรที่ควบคุมสัญญาณปกติ (ซึ่งไม่ใช่กรณีต่อฮาร์ดดิสก์ อย่างของผม)
  • Block device driver ซึ่งเป็นพระเอกของผมครับ เป็น driver สำหรับอุปกรณ์จำพวก storage โดยเฉพาะเลย มันจะมีกลไก ต่อกับ filesystem ด้วย และมีอะไรพิเศษหลายๆอย่าง ซึ่งบนอินเตอร์เน็ตนั้น ใครอยากเขียนชนิดนี้นั้น ทุกคนไล่ให้ไปอ่านหนังสือครับ

ผมเลยจัดการไปหา หนังสือมา โดยสั่งบางเล่มจาก Amazon (ครั้งแรกในชีวิต)

Books in Senior Project

หนังสือที่ใช้ในงานนี้ทั้งหมด

  • Linux Device Drivers อันนี้คือพระเอกของงานครับ ใครจะเขียน driver เค้าก็ล้วนแต่ไล่ให้มาอ่านเล่มนี้ก่อน เหมือนกับเป็นคัมภีร์เลยก็ว่าได้ จะเห็นว่ามี 2 เล่ม(จริงๆมี 3 ด้วยซ้ำ) เล่มล่างสุดคือที่ผมยืมมาจากห้องสมุดภาค ระหว่างรอเล่มที่ซื้อเองครับ ซึ่งมันเป็น 2nd edition ที่ครอบคลุม linux kernel 2.4 เท่านั้น ผมก็หลงอ่านไปก่อน จน ได้ 3rd edition มาถึงมือ ถึงรู้ว่า มันต่างกันพอสมควร (ชื่อบทเหมือน แต่เนื้อหาเปลี่ยน) ก็เลยต้องอ่านใหม่ครับ เพราะมันเป็น linux kernel 2.6 กลไกต่างๆก็เปลี่ยนไปเยอะ อ่านไป น่าจะเกินครึ่งเล่มได้ ต้องบอกว่า เขียนดี อธิบายดี อ่านง่ายพอสมควร (ถ้าคุณไม่กลัวโค้ดน่ะนะ)
  • Understanding the linux kernel เล่มนี้ผมยืมมา ไว้อ่านประกอบ เพราะเค้าบอกว่า จะอ่านเล่มบนรู้เรื่องได้ ควรจะอ่านเล่มนี้ก่อน แต่บางคนก็บอกกลับกัน เป็นอันว่า อ่านไปพร้อมๆกันนั่นแหละ? เนื้อหาในเล่มเจาะลึกส่วนต่างๆของ kernel เลยครับ มี code และพวก data structure โผล่ให้เห็นยุบยับเลย ผมก็อ่านแบบโดดไปโดดมา เอาที่อยากรู้ หลงทางอยุ่ในเล่มนี้นานเหมือนกัน เพราะบางเรื่อง เราไม่แน่ใจว่าเกี่ยวกับงานรึเปล่า ก็อ่านไปก่อน? ได้ทบทวนความรุ้ OS กับ ComOrg บางส่วนด้วย interrupt ไรนี่ โผล่มาหมดครับ ตื่นตาตื่นใจดี แต่ก็ช่วยผม ให้เข้าใจภาพรวม หน้าที่และตำแหน่งของ driver ได้ดีมากเลย
  • Embedded Linux Primer อันนี้ กว่าผมจะได้หนังสือ ผมก็พอจะรู้เรื่องในหนังสือบ้างแล้วครับ เลยไม่ได้ค่อยได้เปิดเท่าไหร่เลย (แต่ได้มาฟรี ก็โอเค :P)

หลังจากผ่าน งานนิทัดไป? ก็เข้าเดือนธันวาครับ หนังสือพระเอกผมก็ยังไม่มา? เริ่มหวาดๆ แต่ทำไม่รุ้ไม่ชี้ แบบว่าชะล่าใจ เอกเองก็อ่าน ATA ไปเรื่อยๆ ผมอุ้มากๆ จนเริ่มกังวลตะหงิดๆครับ จนตกลงกันในกลุ่มว่าจะ เริ่มทำอย่างจริงจัง วันที่ 20 ธ.ค. แบบมาคณะทุกวัน

ตอนนั้นแม้ driver จะยังไม่คืบหน้า แต่สำหรับด้าน hardware ที่จะต้องต่อ ฮาร์ดดิสก์ นั้น เรียกว่า มืดมน

เนื่องจากแม้บอกจะใช้ Robostix ต่อ ซึ่งคิดว่ามี I/O pin เพียงพอแล้ว แต่มันไม่ง่ายเช่นนั้นครับ มันมีเรื่อง 3V ต่อกับ 5V แล้วจะมีปัญหา มีเรื่องทำ pull up, pull down ใช่ว่า volt เท่ากันจะต่อกันได้เลย(ตอนทำ PIC ถูก TA บอกให้ทำโดยไม่รุ้ตัว) มันมีเรื่องของ ช่วงของ voltage ที่จะตีความเป็น Logic 1 หรือ 0 (คุ้นๆมั้ยว่าเรียนในวิชา Logic?)? สำหรับภาคคอมนั้น? เรามองแค่ 1 กับ 0 ครับแต่ไฟฟ้านั้นไม่เรียบง่ายเช่นนั้น พวกผมเองก็ noob ด้วย จนไปหาเพื่อนภาคไฟอยุ่หลายรอบ ซึ่ง ก็อธิบาย ฟังรู้เรื่องบ้าง ไม่รุ้เรื่องบ้าง และพยายามจะเปลี่ยน scope โปรเจคผมให้ได้

พวกผมเองเลยพุ่งเป้าไปหาอีกวิธี คือพยายามหา chip สำเร็จรูปครับ สำหรับต่อบน interface ATA? หาจากเว็บเช่น RS ที่ภาคไฟแนะนำมา แต่ซื้อ chip ไม่ใช่ซื้อผักครับ chip แต่ละตัวมันมี datasheet หลายร้อยหน้าให้โหลดมาอ่านก่อน ซึ่งเขียนละเอียดเหลือเกิน spec ทางไฟฟ้า ทางคอมพิวเตอร์ ซึ่งผมกับเอก ก็นั่งดูๆๆๆ เจอคำศัพท์เทคนิค ก็เดากันไปครับ จะต่อได้มั้ย บลาๆ? skill ที่ได้จาก แข่ง TESA ช่วยได้พอสมควร ทำให้อ่าน datasheet รุ้ว่าส่วนไหนไม่เกี่ยว ส่วนไหนเกี่ยว จนสุดท้ายก็ได้ชิพมา 2-3 ตัว(มี usb ด้วย) และ สั่งไปจริงๆครับ !!? แต่เจอช่วงวันปีใหม่พอดี ก็เลยเลทออกไปอีกหน่อย

ช่วงเวลาด้านบนก็ไม่ใช่ว่า ผมใช้เวลาทั้งหมด แก้ปัญหาเรื่องไฟฟ้า นั่งหา chip กันอย่าง เดียวครับ ผมก็พยายามแก้ปัญหา เรื่อง การใช้งาน Robostix ควบคู่กับ Gumstix ต่อไป อย่างที่บอกมัน เป็น Community Wiki ครับ หลายๆอย่างก็ต้องเดา แต่ก็รุ้ว่า Robostix จริงๆ มันคล้ายๆบอร์ด PIC อันนึงครับ แต่เป็น microcontoller ชื่อ? Atmel ATmega128 ซึ่งนั่นก็ตามมาด้วย datasheet อีกฉบับนึง (จะเห็นว่า มี datasheet พ่วงมาด้วยเสมอ) ก็นั่งอ่านๆไป จนเข้าใจระดับนึง และโมเมเองระดับนึง วันนึงก็นั่งรถไปร้าน ES ซื้อตัวเบิร์น(Programmer) ของบอร์ดตระกูลนี้มา(เลือกเอง โมเมเองว่าใช้ได้) ซื้อมาปั๊ป เอาซอร์สโค้ด C ที่โหลดมาก่อนแล้ว ลอง เบิร์นตาม wiki ดู ปรากฏว่า ใช้ได้!!!!!!!

เปิด/ปิด LED ได้ เท่านั้นแหละ เขียนต่ออีกนิดนึงทันที จนทำให้ไฟ 3 ดวง ติดสลับเป็นไฟวิ่งได้ โอ น้ำตาจะไหลครับ

วันนั้นเป็นวันที่ 26 ธ.ค. หลังคริสต์มาสต์ เวลาประมาณ ทุ่มกว่าๆ??? เพื่อนๆกลุ่มอื่นๆ ที่อยู่บน ชั้น 20 ด้วยกัน? จะเห็นผมกับเอก โวยวาย ดีใจเพียงเพราะเห็นไฟวิ่ง ครับ… 😀

ติดตามตอนต่อไป????

Advertisements

From → diary

5 Comments
  1. ขอบคุณสำหรับเรื่องการเขียน Driver บน Linux
    จากบล็อกที่แล้วจนถึงบล็อกนี้ มีความเห็นว่า มันเป็น “อภิมหาโปรเจคท์” เลยทีเดียวเชียว

    เข้าใจอารมณ์ตอนไฟวิ่งได้ *.*

  2. อ่านแล้วไม่กล้าเล่างานของตัวเองเลย

    ละอาย 555

  3. ไม่เกี่ยวกับโพสต์ จะบอกว่ากุเห็นมึงใช้ ??? อย่างน้อย 3 ครั้งแล้ว =)

  4. ฮืมม โอมันเป็นอารายที่น่าทึงมาก
    ตรงที่เธอโมเมอารายไปมากมาย แต่ก็ใช้ได้จิงๆ ฮ่าๆๆ

Trackbacks & Pingbacks

  1. ชีวิตในปีที่ 23 ทำอะไรไปและมีอะไรต้องทำ « Teerapap Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: