Погорел чип на материнке, нет подключения к сети. Надо купить сетевую карту! Знакомая ситуация?
В моем случае это была сетевая карта TF-3200 от TPlink, которая сейчас популярна в магазинах. Для конечно же нужен драйвер. На диск я не заглядывал, т.к. нету дисковода, а за драйвером полез на официальный сайт.
Внутри несколько папок под разные Windows, MacOS и папка Linux. В Linux у нас что? Правильно, исходники. Т.е. собери драйвер сам, у тебя же линукс. :)
Теперь не большая история о том, как я попытался решить задачу в лоб, собрать драйвер, забыв, что у меня Ubuntu. Readme.txt предлагает инструкции к устаревшим ядрам 2.6.хх и не более.
Сборка драйвера TF-3200 в Ubuntu
Из мануала надо делать make, чтобы собрать драйвер sundance:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#make all => generate sundance.ko #insmod ./sundance.ko (or sundance.o) #ifconfig eth0 xxx.xxx.xxx.xxx netmask yyy.yyy.yyy.yyy eth0 is your network adapter,use "dmesg" to check it, ex: eth0, eth1... xxx is your ip address, ex: 192.168.102.211 yyy is your netmask address, ex:255.255.255.0 c1. cp sundance.o /lib/modules/uname -r /kernel/drivers/net *note: The uname -r is a command. Don't replace uname -r with 2.4.18, 2.4.20smp, or some others. Must type uname -r directly. c2. Add the following lines at /etc/modules.conf: alias eth0 sundance options sundance c3. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0 located at /etc/sysconfig/network-scripts or create it manually. [see - Configuration Script Sample] |
Перед сборкой обязательно установить следующее:
1 2 3 4 5 6 |
sudo apt-get install build-essential sudo apt-get install gcc sudo apt-get install coreutils sudo apt-get install linux-headers-xxx //xxx- ваше ядро |
Ну что же. Make в папке с исходниками сразу выдал ошибку, не найден module.h.
1 2 3 |
error: linux/module.h: No such file or directory |
Если посмотреть Makefile, то видно, что скрипт пытается найти подключаемые файлы совсем не там, где они находятся на последних ядрах.
1 2 3 4 5 6 7 8 9 10 |
K_VER=$(shell uname -r) INCLUDEDIR=$(shell if [ -e /usr/src/linux-$(K_VER)/include ]; \ then echo "/usr/src/linux-$(K_VER)/include"; \ elif [ -e /usr/src/linux-2.4/include ]; \ then echo "/usr/src/linux-2.4/include"; \ elif [ -e /usr/src/linux/include ]; \ then echo "/usr/src/linux/include"; \ else echo "/usr/include"; fi) |
Надо заменить пути /usr/src/linux-$(K_VER)/include на /usr/src/linux-headers-$(K_VER)/include
Теперь папка для подключения найдется.
Убедиться в этом можно выполнив:
1 2 3 |
find /usr/src -name module.h |
Но дальше у меня make выдал ошибку, не смог найти asm/linkage.h. Вообще у меня такой папки в моих headers ядра (/usr/src/linux-headers-3.2.0-35-lowlatency/include/) не оказалось. Я нашел его совсем в другой папке и скинул в папку asm там же. Далее make еще запрашивал файлы, который были разбросаны по разным папкам. Их все я поместил в asm и вот пошла компиляция, которая закончилась кучей ошибок c++.
Мораль сей басни такова, что исходники поставляемые с драйвером скорее всего устарели.
Как же подключить сетевую карту? А очень просто в Ubuntu!
Установка TF-3200 в Ubuntu.
Дело в том, что в Ubuntu модуль sundance уже есть в ядре. :)
Проверяется:
1 2 3 |
modinfo sundance |
Должна выдаться информация. Включаем драйвер!
1 2 3 4 |
sudo modprobe sundance ifconfig |
Последнее покажет существующие интерфейсы, подключения. Должен появиться eth1, кроме eth0.
Травим на него dhclient и интернет появится, при условии, что он раздается роутером или другим устройством напрямую. Иначе еще надо будет выполнить PPPOE подключение или другое.
1 2 3 |
sudo dhclient eth1 |
Чтобы не включать модуль каждый раз при загрузке, можно поместить его в /etc/modules.
Так же в файл /etc/network/interfaces
1 2 3 4 |
auto eth1 iface eth1 inet dhcp |