สร้าง network driver บน ubuntu
- ทดสอบกับ ubuntu 10.04, kernel 2.6.32-24
- ตัวอย่างนี้ทดสอบกับ sis190
- ติดตั้ง 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
- เข้าไปทำงานในพื้นที่เก็บ 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
จัดการแก้ไขให้เรียบร้อย
- กลับเข้าไปทำงานต่อในพื้นที่ /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
- มีผู้รู้บอกมาให้ลองใหม่ให้แก้ไข 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