สร้าง network driver บน ubuntu

จาก Wiki Opensource

บันทึกนี้ปรับปรุงล่าสุดเมื่อวันที่ 18-08-2553

ดูแลโดย WIPAT


--ยังไม่เรียบร้อยนะ

  • ทดสอบกับ ubuntu 10.04, kernel 2.6.32-24
  • ตัวอย่างนี้ทดสอบกับ sis190


  1. ติดตั้ง kernel source ด้วยคำสั่ง sudo apt-get install linux-source
    จะได้แฟ้มใหม่อยู่ที่ /usr/src มีชื่อตัวอย่างนี้คือ /usr/src/linux-source-2.6.32.tar.bz2
    ให้แตกแฟ้มออกมาด้วยคำสั่ง sudo tar -jxf /usr/src/linux-source-2.6.32.tar.bz2 -C /usr/src
    จะได้แฟ้ม kernel source อยู่ที่  /usr/src/linux-source-2.6.32

  2. เข้าไปทำงานในพื้นที่เก็บ network source ด้วยคำสั่ง
    cd /usr/src/linux-source-2.6.32/drivers/net
    หาแฟ้มของ network card ที่ต้องการแก้ไข ตัวอย่างนี้คือ /usr/src/linux-source-2.6.32/drivers/net/sis190.c
    จัดการแก้ไขให้เรียบร้อย

  3. กลับเข้าไปทำงานต่อในพื้นที่ /usr/src/linux-source-2.6.32 แล้วทำงานด้วยคำสั่ง
    cd /usr/src/linux-source-2.6.32
    sudo make oldconfig
    sudo mkdir -p .tmp_versions
    sudo make drivers/net/sis190.ko
    sudo modprobe -v -r sis190
    sudo cp drivers/net/sis190.ko /lib/modules/$(uname -r)/kernel/drivers/net
    sudo modprobe -v sis190
    -- เจอ error ว่า FATAL: Error inserting sis190 (/lib/modules/2.6.32-24-generic/kernel/drivers/net/sis190.ko): Invalid module format

  4. มีผู้รู้บอกมาให้ลองใหม่ให้แก้ไข Makefile ด้วย ทำดังนี้
    mkdir -p /tmp/sis190
    cp -v /usr/src/linux-source-2.6.32/drivers/net/sis190.c /tmp/sis190

    สร้างแฟ้ม /tmp/sis190/Makefile ใหม่ให้มีข้อมูลว่า
    obj-m:= sis190.o
    KDIR:= /lib/modules/$(shell uname -r)/build
    PWD:= $(shell pwd)
    default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

    ใส่ข้อมูลเพียงแค่นี้ ต่อไปก็ให้แก้ไขแฟ้ม /tmp/sis190/sis190.c จนพอใจ แล้วทำคำสั่งดังต่อไปนี้
    cd /tmp/sis190
    make
    sudo modprobe -v -r sis190
    sudo cp /tmp/sis190/sis190.ko /lib/modules/$(uname -r)/kernel/drivers/net
    sudo modprobe -v sis190