Jump to content
Калькуляторы

Rtl8186 Firmware Всем, кто пишет под RTL8186

2 dgreen:

Можно ли сделать так чтобы точка перегружалась, если wlan интерфейс не пингуется минуту (или настроить интервал)? В Линксисах такая фича есть, очень удобно.

Я заметил что в 90% умирает не точка, а wlan, по езернету можно до неё достучаться и перегрузить.

Share this post


Link to post
Share on other sites

Вчера вечером запустил базовый вариант новой прошивки. Наконец-то :)

Была масса проблем, связанная в основном с моей невнимательностью :)

1. Перешел на uClibc 29 - осмысленно. В нем переписанно много - и теперь работает пошустрее вроде как (пишут) и, что важно - библиотеки занимают меньше места (проверенно). Но это привело к тому, что пришлось менять библиотеки в toolchain - и, о чем я сразу забыл и промучался лишних 3 часа - хидера тоже :)

2. Собрал BusyBox 1.1.2 - тоже меньше стал. А вот inittab читать все равно не хочет. Надо лезть в нутро и смотреть, почему.

3. Люди, если собераете ramdisk через initrd - следите за размеров его в ядре и при создании самого файла ramdisk. Я не заметил, что у меня эти размеры не совпадают (возился с разными ядрами и исправил не в том) - в итоге корень монтировался, все каталоги есть - а файлов - нет :)

4. Отключил хардварный ватчдог в ядре и перенес его в userlevel. Управление через /proc/watchdog. Отдельным скриптом. Работает. Перегружает точку, если убить скрипт. По просьбе SW добавляю в скрипт пинговалку выбранного списка адресов, ifconfig down - ifconfig up, повторную пинговалку и если нет - то ребут (через ватчдог).

5. Начал переделывать систему сохранения файлов. После всех экспериментов с залитым основным набором софта (включая ipcad) получил libux.bin на 700К, root.bin на 730К - итого где-то 2 по 250К куска на флеше свободных. Хочу сделать их единым куском (логически - разбив сохраняемый файл на 2). Думаю, к концу недели закончу.

6. Сегодня почитаю - поразбираюсь с QoS - вроде как нашел поддержку этого зверя в ядре.

------------------------------------------------

Народ, у меня голова не варит в плане того, что надо в точку запихнуть :)

Я делаю так (если кому что еще надо - пишите - сразу добавлю)

 

kernel 2.4.18

RW filesystem (1024K на root)

RO filesystem (/bin, /lib, /sbin, /usr/bin, /usr/sbin,)

BusyBox 1.1.2 (весь список приводить не буду- там много)

DHCP Server/Client через BusyBox

IPCAD (cisco ip accounting и/или netflow)

dropbear (ssh сервер)

bridge-utils

wireless-utils

 

Скрипты:

Почти все лежат в перегружаемой области - можно все менять. Фиксированный только скрипт, загружающий эту облась в RW filesystem.

Еще надо доделать авирийную ситуацию - переход точки в telnet-server режим с фиксированным адресом (попробую сделать по нажатию и удержанию кнопки) на случай, если налажали со скриптами.

 

 

От веб-интерфейса отказался

От редактора ee (собирал в прошлых прошивках) - отказался

От отдельных пакетов DHCP отказался (есть в BusyBox-е)

 

 

Какие есть еще предложения ?

Share this post


Link to post
Share on other sites

по мне так надо не всякие фичи довешывать а над стабильностью работать. А то меня в частности задолбали всякие у&0@ы которые частоты постоянно глушат.

 

Так что предлагаю заняться находжением в драйвере кода отвечающего за ack таймаут. А не тупым выкручиванием sifs/difs регистров.

И еще сильно интересует изменение кода баркера он же код dsss. Это позволит сильно повысить устойчивость работы в условиях помех.

Share this post


Link to post
Share on other sites
по мне так надо не всякие фичи довешывать а над стабильностью работать

согласен, но есть проблема - пока нет ни одной прошики, работающей в качестве клиента со скрытым SSID окромя фирменных (мои не в счет - они пока виснут, хотя я через нее сейчас к нету и подключен дома)

сильно интересует изменение кода баркера он же код dsss

код dsss выставляется базовой станцией. И то, что БС его берет один на все случаи жизни - это проблема БС.

Все равно использовать 8186 в качестве БС никто не будет. Клиент хороший, а выложить пару килобаксов (это минимум) за организацию БС, а потом сэкономить пару сотен и поставить не нормальный двухкарточный KarlNet, а дешевку - по моему мнению просто глупо. А на станции dsss код будет браться с базы.

которые частоты постоянно глушат
в драйвере кода отвечающего за ack таймаут

Adron, а где связь между длительностью ожидания ответа и зашумленностью эфиоа ? Или я не понял что-то с АСК ?

 

над стабильностью работать

тут я целиком и полностью согласен. Но стабильность - это прежде всего стабильность софта.

А если дрова, которые, к сожалению, HAL - виснут, то либо писать их заново (долго), либо искать обход за счет перестройки софта.

Плюс стабильность того же uClibc 26 оставляет желать лучшего, если честно. По крайней мере, после пересборки 28 пропали необяснимые глюки.

Share this post


Link to post
Share on other sites

КАТАСТРОФА (похоже).

Достаточно пессимистическое начало, но я серьезен.

Начну по поряку.

Вчера решил таки заставить бизибоксовский инит поднимать inittab - не одного меня его отсутствие огорчало.

Быстро понял, что проблема в запуске ядра сч параметром single - это как всегда реалтековцы постарались. Вынес условной компиляцией в конфиг.

Но попутно открылась проблема ... компилятора.

В начале инита есть строчка вида

 

if(argc > 1 && !strcmp(argv[1],"-q")) { ...... }

 

я не первый год (даж не первый десяток лет :) ) пишу на сях - и если argc=2, argv[1]="single" - то я понимаю, что попасть внутрь условного блока мы не должны.

Так вот, именно в этом месте мы туда попадаем.

Попробывал отдельным файликом сделать - не попадаем. Т.е. это не конкретный глюк компилера, а условный - т.е. при определенных условиях он формирует неправильный код.

 

Поскольку такая конструкция используется достаточно часто - мне даже

страшно думать, насколько ошибочно собирается ядро именно этим вот компилятором :(

 

Если у кого есть другой toolchain - может проверите у себя ?

Код из BusyBox 1.1.2 init/init.c, функция init_main

 

А я пошел искать последнии версии gcc и пытаться собрать их для MIPS ...

Share this post


Link to post
Share on other sites

Да, в догонку - Adron-у о кодах Баркера.

Они используются только в 802.11 базовом (1 и 2 Мбит). Выше - CCK и PBCC

Здесь лежит неплохое описание, и в конце страницы - табличка используемых кодировок

http://www.ferra.ru/online/networks/25619/

Share this post


Link to post
Share on other sites
КАТАСТРОФА (похоже).

Достаточно пессимистическое начало, но я серьезен.

Начну по поряку.

Вчера решил таки заставить бизибоксовский инит поднимать inittab - не одного меня его отсутствие огорчало.  

Быстро понял, что проблема в запуске ядра сч параметром single - это как всегда реалтековцы постарались. Вынес условной компиляцией в конфиг.  

Но попутно открылась проблема ... компилятора.

В начале инита есть строчка вида

 

if(argc > 1 && !strcmp(argv[1],"-q")) { ...... }

 

я не первый год (даж не первый десяток лет :) ) пишу на сях - и если argc=2, argv[1]="single" - то я понимаю, что попасть внутрь условного блока мы не должны.  

Так вот, именно в этом месте мы туда попадаем.

Попробывал отдельным файликом сделать - не попадаем. Т.е. это не конкретный глюк компилера, а условный - т.е. при определенных условиях он формирует неправильный код.

 

Поскольку такая конструкция используется достаточно часто - мне даже  

страшно думать, насколько ошибочно собирается ядро именно этим вот компилятором :(

 

Если у кого есть другой toolchain - может проверите у себя ?

Код из BusyBox 1.1.2 init/init.c, функция init_main

 

А я пошел искать последнии версии gcc и пытаться собрать их для MIPS ...

 

Подожди, в бизибоксе у меня стоит строка if(argc > 1 && (!strcmp(argv[1],"single")||strcmp(argv[1],"-s")||strcmp(argv[1],"1")) { ...... }

То есть при явном указании однопользовательского режима, переходит в блок TRUE, иначе - в FALSE. Вполне логично все указано.

 

А вот в ядре я искал где указана строка с параметрами загрузки - не нашел, щас еще по заголовкам пройдусь.

 

ЗЫ. Насчет файловой системы и монтирования:

#ifdef CONFIG_RTK_MTD_ROOT

//if ((err=sys_mount("tmpfs","/var","tmpfs",flags,"size=800k")))modify by Richard H.

if ((err=sys_mount("tmpfs","/var","tmpfs",flags,"size=900k")))

printk("mount /var file system fail! error code=%dn",err);

else

printk("mount /var file system ok!n");

#endif

меня смущает то, что этот участок кода нагло впихнули в ядро. Именно с этим сталкиваешься, когда по-умолчанию указан модуль rtk_mtd без gw. То есть формально в ядро железно впихнули что, куда и каким объемом монтировать в файловой системе. Причем, насчолько я понимаю, корневая в данном случае ramfs...

 

ЗЫ. От себя хочу сказать - это пипец, а не програмисты там сидят. Я еще в программировании никто, но так делать никогда не буду, не был, и не делаю... :)

 

ЗЫЫ. Напомню, если интересно спецификации лежат на ftp://193.227.250.26/specs/

Share this post


Link to post
Share on other sites

Гы. Почему-то пришла в голову мысля: "Против лома нет приема, окромя другого лома". Может наплевать на все и просто закомментировать "лишние" строки в бизибоксе и насиьно заставить его читать иниттаб. Или константой определить многопользовательский режим... Все равно single нам не понадобится.

 

Сори за терминологию, понимать-понимаю, а как по-русски сказать...

 

ЗЫ. И еще, ткните плиз где этот сингл указан, а то уже перелопатил, а откуда main.c берет saved_command_line (она ж extern) не найду.

Share this post


Link to post
Share on other sites
Подожди, в бизибоксе у меня стоит строка if(argc > 1 && (!strcmp(argv[1],"single")||strcmp(argv[1],"-s")||strcmp(argv[1],"1")) { ...... }  

Это в старом бизибоксе. В новом - обработка опции -q. Проблема не в этом - а в том. что компилятор генерит неправильный код. Обйти то это - нет проблем, заменил отрицание на ==0 - и все. Мне страшно, что где-то в ядре компилятор тоже может так же глюкнуть - вот в чем проблема..

И еще, ткните плиз где этот сингл указан

будешь смеяться...

смотри в /arch/mips/philips/nino/

prom.c - строка 39 - там добавляется ...

я поставил там условную компиляцию - добавлять single или не добавлять

 

Насчет файловой системы и монтирования

меня это перестало интересовать - я по другому файловую делаю и CONFIG_RTK_MTD_ROOT у меня не установлен.

Share this post


Link to post
Share on other sites
Причем, насчолько я понимаю, корневая в данном случае ramfs...  

Если установлен CONFIG_RTK_MTD_ROOT - то корневая sqfs. Поэтому и монтируют /var как tmpfs - писать то туда надо....

Share this post


Link to post
Share on other sites
Гы. Почему-то пришла в голову мысля: "Против лома нет приема, окромя другого лома". Может наплевать на все и просто закомментировать "лишние" строки в бизибоксе и насиьно заставить его читать иниттаб. Или константой определить многопользовательский режим... Все равно single нам не понадобится.

 

Сори за терминологию, понимать-понимаю, а как по-русски сказать...

 

ЗЫ. И еще, ткните плиз где этот сингл указан, а то уже перелопатил, а откуда main.c берет saved_command_line (она ж extern) не найду.

 

Я кстати так у себя и сделал :)

Share this post


Link to post
Share on other sites

по мне так надо не всякие фичи довешывать а над стабильностью работать

согласен, но есть проблема - пока нет ни одной прошики, работающей в качестве клиента со скрытым SSID окромя фирменных (мои не в счет - они пока виснут, хотя я через нее сейчас к нету и подключен дома)

сильно интересует изменение кода баркера он же код dsss

код dsss выставляется базовой станцией. И то, что БС его берет один на все случаи жизни - это проблема БС.

Все равно использовать 8186 в качестве БС никто не будет. Клиент хороший, а выложить пару килобаксов (это минимум) за организацию БС, а потом сэкономить пару сотен и поставить не нормальный двухкарточный KarlNet, а дешевку - по моему мнению просто глупо. А на станции dsss код будет браться с базы.

которые частоты постоянно глушат
в драйвере кода отвечающего за ack таймаут

Adron, а где связь между длительностью ожидания ответа и зашумленностью эфиоа ? Или я не понял что-то с АСК ?

 

над стабильностью работать

тут я целиком и полностью согласен. Но стабильность - это прежде всего стабильность софта.

А если дрова, которые, к сожалению, HAL - виснут, то либо писать их заново (долго), либо искать обход за счет перестройки софта.

Плюс стабильность того же uClibc 26 оставляет желать лучшего, если честно. По крайней мере, после пересборки 28 пропали необяснимые глюки.

 

Связь между ack и помехами на самом деле есть.

Если режить проблему с ack то можно перейти на работу полностью в 802.11g стандарте. Так как большая часть помех создается сетями 802.11b то для 802.11g они будут все равно что излучение микроволновки.

Share this post


Link to post
Share on other sites
то можно перейти на работу полностью в 802.11g стандарте

нехочу :)

ортогональные каналы внутри одной передающей станции возможны, но зашумленноть эфира не дает гарантии ортоганальности между двумя соседними частотами в g диапазоне - что неизбежно приведет к ступору точки. У нас в городе такой шум, что это почти не реально.

 

Я кстати так у себя и сделал :)

а я всегда стараюсь найти и исправить причину :) По крайней мере, при переходе на новую версию (если вдруг надо будет) - не прийдется большу ничего коментить :)

Share this post


Link to post
Share on other sites

Привет всем - с праздником.

Интересный праздник труда - но который никто никогда не работает :)

 

Так о чем это я.

Несколько дней провел в всеселом занятии - попытке собрать gcc-4.0.2 + uClibc 0.9.28 ака кросскомпайлер - сделать полный toolchain - как тот, что нам любезно кто-то предоставил (мабуть реалтеки - но в свете последних анализов их кода - я им не верю)

Для начала облазил весь инет - тоолчаайн на uClibc делал вообще только кегел - и на gcc-3.3.3 (вот откуда оказвается растут руки)

Вообще - у него там много итересного для всех, кто с кросскомпиляторами работает - http://kegel.com/crosstool/

Повоевал несколько дней - взял за основу кегелевские скрипты, плюс куски с uClibc, что-то дописал сам - в итоге получил скриптец (набор скриптов), который после запуска вытягивает все нужное с инета, и копилет полносьью дерево разработки - gcc-4.0.2, binutils и uClibc-0.9.28.

Закончил вчера вечером - все вроде нормально, но вот перекомпилеть мои исходники и залить в точку уже не успел. Сегодня вечером проверю - и если все ок - вылью N.leiten-ру на фтп эти скрипты (там немного - 2 с лишним метра).

Пока могу сказать только одно - библиотеки стали меньше процентов на 5 - что уже не может не радывать :)

Share this post


Link to post
Share on other sites

Ккайф, а я разгребаю свою работу и принимаюсь за точки...

Share this post


Link to post
Share on other sites

дядечки, а никто не знает как из юзерспейс опросить кнопочку ресет нашей любимой g700ap ?

как это вообще сделать - видно из бут лоадера (boot/init/main.c)..

Share this post


Link to post
Share on other sites
zuko

напрямую тебя к портам не пустит ядро - это его область данных. Можно через

iwpriv wlan0 write_mem dw,<адрес>,1

прочесть регистр, куда энта кнопочка приставленна.

 

адрес вроде 0xbd010044 или 0xbd010120 - лень в доку лезть... посмотри в rtl_gpio.c, который в linux-2.4.18/drivers/char

Share this post


Link to post
Share on other sites

сорри, read_mem конечно, а не write_mem

сплю с бутылкой пива в руках.. :)

Share this post


Link to post
Share on other sites

о! спасибо!

мне хватит функциональности rtl_gpio.

однако, какова изобретательность, засунули это прямехонько в ядро включая вызов flash reset :)

милые, бесконечно приятные люди :)

Share this post


Link to post
Share on other sites

Хм, интересненько. Появилась идейка эти все функции, что там описаны привязать к /proc/, дабы иметь управление, так сказать напрямую...

Share this post


Link to post
Share on other sites

О, в нашем полку в оношении в риалтековским программерам прибыло - теперь еще и zuko (интересный к стати ник - напоминает кой-кого из лабиринта отражений, ага ? :)

К тати, спасибо зуко за хорошее название - теперь я знаю, как называть риатековцев - "милые, бесконечно приятные люди" :)

 

Теперь о грустном.

gcc-4.0.2 ага кросскомпилер я запустил - но толку ...

в ядре 2.4.18 (и во многих болеепоздних версиях) используються конструкции вида

 

#define func(a) array[a].element

.....

func(i)++; или func(i)--;

 

По умному называется compound statement

так вот - gcc 3.3.* это поддерживает. а выше - нет.

Еще одни "милые, бесконечно приятные люди".

 

В общем - пересобираю теперь 3.3.6 - буду делать все на нем :(

На 3.3.3 не хочу принципиально - он таки глючный.

Share this post


Link to post
Share on other sites

Да,вот еще бы RIP/SAP туда...

Share this post


Link to post
Share on other sites

Кстати, в новой официальной прошивке на g700ap (v2.10 Thr, 30 Mar 2006) есть фича "репитер".

В принципе тот же клиент :)

Share this post


Link to post
Share on other sites

SW,

Кстати, в новой официальной прошивке на g700ap (v2.10 Thr, 30 Mar 2006) есть фича "репитер".

В принципе тот же клиент :)

С этой прошивкой она может работать только "репитером" - интерфейс eth0 там вообще в этом режиме обрубан :( Да и смысл с еще одной кривой прошивки от д-линка, короче как клиент эта прошивка работать не будет ...

Share this post


Link to post
Share on other sites

Работает и как клиент :) не обрубили eth0, единственно точка не пингуется с wi-fi, только по локалке.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now