понедельник, 26 апреля 2010 г.

Настройка Wifi на нетбуке HP Mini 501 под Tiny Core Linux

Пару месяцев назад приобрёл себе новый нетбук. Дефолтный SLED меня не порадовал своей тормознутостью, захотелось чего-нибудь быстрого и экзотичного. И вот на welinux наткнулся на заметку про Tiny Core. Понравилось, поставил, столнулся с проблемой неработающего Wifi. Начал копать и откопал.




Для начала нужно определить название Wifi чипа.
Для этого используем lspci. В Tiny Core по умолчанию этой команды нет, необходимо установить пакет pci-utils.
Анализируем вывод и находим такую строчку:

08:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

Из неё делаем вывод, что чип у нас broadcom bcm4312.
Далее идем на linuxwireless.org и читаем мануал.
Пишут там следующее

lspci -vnn | grep 14e4

08:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)

Отсюда можно узнать точную модель. В данном случае "4315".
На сайте есть таблица, по которой можно понять поддерживается ли ваш чип и какой версией ядра.
Напротив моего чипа в таблице было следующее:

supported 2.6.32 and later

А ядро по умолчанию в Tiny Core 2.6.29. "Надо собрать своё" - догадался Штирлиц.
Будем собирать. Для сборки нам понадобится, как минимум, gcc и make. Их надо поставить через пакетный менеджер.
Качаем с kernel.org текущее стабильное ядро.

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.2.tar.bz2
tar xf linux-2.6.33.2.tar.bz2
cd linux-2.6.33.2

Качаем стандартный для Tiny Core конфиг ядра тут. (Main - Downloads - Current Release - src), кладем в папку с исходниками ядра и переименовываем в ".config"

wget http://distro.ibiblio.org/pub/linux/distributions/tinycorelinux/2.x/release/src/config-2.6.29.1-tinycore
mv config-2.6.29.1-tinycore .config

Далее включаем конфигуратор, правим, если что нужно править(я ничего не трогал), выходим, перезаписываем .config и приступаем к сборке.

make menuconfig
make
make bzImage
make modules
make INSTALL_MOD_PATH=./mod_dir modules_install


Собранные модули нужно добавить в initrd следующим образом(инструкция[eng]:

mkdir extract
cp /mnt/sda1/boot/tinycore.gz ./extract
cd extract
zcat tinycore.gz | sudo cpio -i -H newc -d
rm -rf lib/modules/2.6.29.1-tinycore
cp -r ../mod_dir/lib/modules/2.6.33.2-tinycore ./
cd ..
sudo depmod -b extract 2.6.29.1-tinycore
sudo ldconfig -r extract
find extract| sudo cpio -o -H newc | gzip -2 > ../tinycore.gz
advdef -z4 tinycore.gz

Всё собрано, осталось перенести в нужное место и подготовить загрузчик.

cp tinycore.gz /mnt/sda1/boot/tinycore2.gz
cp arch/x86/boot/bzImage /mnt/sda1/boot/bzImage2

Далее открываем /mnt/sda1/boot/grub/menu.lst любым редактором и добавляем туда.

title tinycore2
kernel /boot/bzImage_tr quiet
initrd /boot/tinycore2.gz

Сохраняем, перезагружаемся.
После перезагрузки набираем iwconfig.
Должен появиться наш интерфейс.
Но и это еще не всё!
Еще нам нужна прошивка. Cтавим из репозитория b43-fwcutter. А потом делаем так(тоже с linuxwireless)

wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2
tar xjf broadcom-wl-4.150.10.5.tar.bz2
cd broadcom-wl-4.150.10.5/driver
sudo b43-fwcutter wl_apsta_mimo.o
sudo mkdir /lib/firmware
sudo cp -r b43 /lib/firmware/

Ну и перезагружаем модуль:

sudo rmmod b43
sudo modprobe b43

Далее "sudo wicd-start" ну и wicd-curses, например. Где и видим-таки наши долгожданные сети.
Проверил, работает, не ломается при переходе в suspend и обратно. В общем всё супер.
В качестве бонуса после пересборки ядра заработала прокрутка на тачпаде, с которой достаточно долго ковырялся до этого.



Продолжение...