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

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

Знаете, у меня сейчас мозг взорвется.

 

Имеется дерево исходников от 5460, там, в исходниках ядра имеется директория drivers/flash/nor.

В этой директории лежит nor_core.lib, из которого должен получиться nor.o, реалтковский закрытый драйвер NOR-флеша.

В конфиге сказано, CONFIG_FLASH_NOR, однако этот nor.o упорно не хочет появляться. Куда копать?

Share this post


Link to post
Share on other sites

ЭЭЭ, вообще-то там уже скомпиленная библиотека лежит nor_core.lib и ее проблематично настраивать. У меня еще есть директория export в ней есть исходники, но это другие файлы, по-моему никак не касающие библиотеку.

Share this post


Link to post
Share on other sites

Ну у меня тоже есть export, но похоже, что драйвера среди этих исходников нету.

И, даже если в конфиге ядра сказано CONFIG_FLASH_NOR, этот драйвер реально не собирается и в ядро не вставляется.

В итоге отсутствует доступ из flash к собственно флеш-памяти, и ничего не работает, MAC-адреса отсутствуют, и т.д. и т.п.

Чего с этим делать - пока не знаю...

Share this post


Link to post
Share on other sites

ЭЭЭ, вообще-то там МАС-адреса есть, просто мы их стираем при перезаписи прошивки вот и все. Струкутра прошивки с использованием команды flash такая же как и в официальной прошивке. так что искать МАС нет смысла.

Share this post


Link to post
Share on other sites

А вот и нет.

Конкретно.

Заливаю прошивку (ядро+рамдиск), заливаю веб-странички, заливаю даже конфиг.

Перезаливаю много раз.

Потом откатываюсь на старую прошивку, от производителя - все конфиги сохранены, вплоть до пароля на VPN

 

Так как драйвер подцепить? ;)

Share this post


Link to post
Share on other sites

Не знаю, правильно это или нет, но я сделал так:

mips-linux-gcc -I /home/kostik/acorp/build/wr254x1/linux-2.4.18/include/asm/gcc -D__KERNEL__ -I/home/kostik/acorp/build/wr254x1/linux-2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -G 0 -mno-abicalls -fno-pic -DR3000 -mips1 -pipe -nostdinc -g -DJACKSON_NET_WORK -gstabs+ -c nor_cmds.c -o nor_cmds.o

mips-linux-gcc -I /home/kostik/acorp/build/wr254x1/linux-2.4.18/include/asm/gcc -D__KERNEL__ -I/home/kostik/acorp/build/wr254x1/linux-2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -G 0 -mno-abicalls -fno-pic -DR3000 -mips1 -pipe -nostdinc -g -DJACKSON_NET_WORK -gstabs+ -c nor_info.c -o nor_info.o

cd ../

mips-linux-ld -G 0 -r -o nor.o export/nor_info.o export/nor_cmds.o nor_core.lib

 

после чего добавил drivers/flash/nor/nor.o в основной Makefile, и сборщик его подобрал. Буду пробовать вечером, получилось или нет ;)

Добавка: получилось ;)

Share this post


Link to post
Share on other sites
Заливаю прошивку (ядро+рамдиск), заливаю веб-странички, заливаю даже конфиг.  

Перезаливаю много раз.  

Потом откатываюсь на старую прошивку, от производителя - все конфиги сохранены, вплоть до пароля на VPN  

здесь просто реалтеки перестраховались. У них 3 (вот это избыточность) копии настроек. А все прошивки в нете работают максимум с двумя. А родные ртслеживают, если что не так - на старте переливают из первой.

Вот кусок из родного init.sh

 

# See if flash data is valid

$TOOL test-hwconf

if [ $? != 0 ]; then

echo 'HW configuration invalid, reset default!'

$LOADDEF

fi

 

$TOOL test-dsconf

if [ $? != 0 ]; then

echo 'Default configuration invalid, reset default!'

$LOADDEFSW

fi

 

$TOOL test-csconf

if [ $? != 0 ]; then

echo 'Current configuration invalid, reset to default configuration!'

$LOADDS

fi

 

так что ничего другого во флеше нет. Можешь ее через /dev/mtd открыть и всю прочесть - читается все 2 метра.

Share this post


Link to post
Share on other sites

а, еще. NOR флеша там нет.

Я не шибко специалист в типах фоеша - но, как сказанно в даташите по 8186

Support boot from NAND type to reduce total bone cost

и ни слова о загрузке с NOR.

А поскольку система таки грузится, то значит флеш типа NAND.

Share this post


Link to post
Share on other sites

Угу слава богу что flash параметры они пределали (3 экземляра и сравнение при прошивке) ... а я вот на днях ovis 1120 востанавливал .. (слетела нафиг вся прошивка - и к томуже в области где храняться параметры получился бардак полный) ... кроме как залить туда shortlinux и дать через rs-232 команду flash reset hardaware - , больше ничего не помогло - все прошивки отваливались в кернел паник !!! а после данной процедуры асе прошивки работали - специально проверил (поначалу было впечатленин в физической неисправности - типа флеш микруха накрылась частично) .....

Share this post


Link to post
Share on other sites

Можно поискать даташит на Intel 28F160, но мне лень.

В моем конкретном WR-G стоит именно NOR флешка. И в даташите на 8186 об этом написано в разделе Memory Controller.

 

Кроме этого, практика - лучший критерий истины ;) :

 

RealTek Nor-Type Flh System Driver. © 2002 RealTek Corp.

Found 1 x 2M Bye Intel TE28F160C3

flash: init complete (31), size 2048(KB) blks 1024 hs 512

RealTek E-Flash System Driver. © 2002 RealTek Corp.

Cannot find driver for DiskOnChip Millennium at 0x6000

Can't allocate major number 31 for Memory Technology Devices.

Share this post


Link to post
Share on other sites
Kitsok, а все наверно просто .. неправильно опрелеляет ядро флешку .... иль вообще такой просто не знает ...

Share this post


Link to post
Share on other sites

;)

Я наверное неправильно вопрос поставил. Попробую еще раз.

Итак, есть дерево исходников, в котором есть в бинарном виде драйвер NOR-type флеша. Лежит в директории drivers/flash/nor:

 

root@:/home/kostik/acorp/build/wr254x1/linux-2.4.18/drivers/flash/nor# ls -al *

-rwxr-xr-x 1 kostik kostik 418 2005-06-07 13:48 Config.in

-rwxr-xr-x 1 kostik kostik 301 2005-06-07 13:48 Makefile

-rw-r--r-- 1 root root 834 2006-04-12 19:39 make.sh

-rwxr-xr-x 1 kostik kostik 15112 2005-06-07 13:48 nor_core.lib

-rw-r--r-- 1 root root 211453 2006-04-13 01:08 nor.o

 

export:

итого 20

drwxr-xr-x 2 kostik kostik 160 2006-04-13 10:50 .

drwxr-xr-x 3 kostik kostik 208 2006-04-13 10:50 ..

-rwxr-xr-x 1 kostik kostik 155 2005-06-07 13:48 Makefile

-rwxr-xr-x 1 kostik kostik 2829 2005-06-07 13:48 nor_cmds.c

-rwxr-xr-x 1 kostik kostik 5819 2005-06-07 13:48 nor_info.c

-rwxr-xr-x 1 kostik kostik 315 2005-06-07 13:48 struct.h

root@:/home/kostik/acorp/build/wr254x1/linux-2.4.18/drivers/flash/nor#

 

nor/Makefile :

root@:/home/kostik/acorp/build/wr254x1/linux-2.4.18/drivers/flash/nor# cat Makefile

obj-y += nor_core.lib

obj-m :=

obj-n :=

obj- :=

O_TARGET := nor.o

export-objs :=

list-multi :=

mod-subdirs :=

subdir-y :=

subdir-m :=

subdir-$(CONFIG_FLASH_NOR) += export

obj-$(CONFIG_FLASH_NOR) += export/export.o

include $(TOPDIR)/Rules.make

 

root@11:/home/kostik/acorp/build/wr254x1/linux-2.4.18/drivers/flash/nor#

 

В конфиге ядра (.config) опция CONFIG_FLASH_NOR включена:

root@:/home/kostik/acorp/build/wr254x1/linux-2.4.18# cat .config | grep CONFIG_FLASH_NOR

CONFIG_FLASH_NOR=y

root@:/home/kostik/acorp/build/wr254x1/linux-2.4.18#

 

Однако при сборке ядра (make) nor.o не компилируется, т.е. даже не пытается.

Более того, он не попадает в Makefile (основной), поэтому его приходится вставлять туда руками:

DRIVERS-$(CONFIG_FLASH_NOR) += drivers/flash/nor/nor.o

 

Но и в этом случае make не пытается скомпилировать nor.o, он лишь включает его в список объектных модулей ядра на этапе линковки, что вызывает ошибку, т.к. модуля нету.

 

Пришлось руками скомпилировать nor.o из nor_cmds.c, nor_info.c и nor_core.lib, после чего все заработало.

 

Вопрос: почему при компиляции ядра компилятор не пытается скомпилировать nor.o сам?

 

P.S. После "ручной" процедуры все прекрасно работает - ядро через этот модуль определяет флешку, конфиги читаются, точка конфигурится и т.д.

Share this post


Link to post
Share on other sites

Почему не ставится сам ? Потому что SDK, которое гуляет по инету не есть полностью доделанное. Т.е. дрова под NOR выпущенны реалтеком, но не используются в точках типа 5460 и т.д. и писатели конфигов и майков не утруждали себя доделыванием этого.

 

Вопрос в другом. В принципе. А тебе зачем все это ? Эсть готовый работающий доступ к флешу через /dev/mtb - зачем еще что-то ?

Тот же флеш - вид сбоку ?

Share this post


Link to post
Share on other sites

У меня вопрос к линуксоидам.

Где (и как) ядро грузит файловую, собранную как sqfs. Немогу найти точку обращения к флешу за куском, начинающимся с сигнатуры ROOT

 

Задача стоит в том, чтобы смонтировать эту вот sqfs не в корень, а в отдельную папку. А в корень смонтировать рамдиск, прилинкованный к ядру.

Может кто посоветует - где искать

 

Монтирования корня проходит в fs/super.c - но вот что-то именно доступа к sqfs там нет. Вечером конечно еще посижу - но может кто уже искал.... и даже находил ?

Share this post


Link to post
Share on other sites

Отвечаю на первый вопрос (про mtd).

Потому, что мне нужно было до сегодняшнего дня сделать работающую прошивку. Я сделал ;) Переделывать все "с нуля" времени не было. И без дров под NOR доступа к флешу все-равно бы не было.

 

Про файловую систему.

А вот не следом ли за ядром (с рамдиском) оно лежит?

Точно, там и лежит.

Гляди в RTL8186 Linux system note.doc, там написано.

Share this post


Link to post
Share on other sites

Судя вот по этому, шьется по адресу 100000

 

echo "============Create Squashfs====================="

rm squashfs.o

#$MKCRAMFS $RAMFSDIR cramfs.o -r

$MKSQUASHFS $RAMFSDIR squashfs.o -be

echo "doing CVIMG"

$CVIMG root squashfs.o root.bin 100000 100000

ROOTSIZE=`du -s $RAMFSDIR | cut -f1`

IMGSIZE=`du -s squashfs.o | cut -f1`

echo "=============================================="

echo "Summary:"

echo "==>Squashfs disk size = $ROOTSIZE KBytes"

echo "==>Squashfs image size = $IMGSIZE KBytes"

Share this post


Link to post
Share on other sites

Kitsok,

доступ к флешу был, есть и будет без дров NOR. Сам подумай - ядро файловую берет ? Настройки берет ? веб-странички берет ?

Откуда ? Из флеша. И берет он ее через /dev/mtd, который в свою очередь формируется mtd_четатам.o, который в дровах реалтека в папке линуха.

Доступ есть - просто попробуй :)

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

 

По второй мессаге.

Где лежит корневая система во флеше - и так понятно. Даже если она вдруг потеряется - найти ее по сигнатуре ROOT не составляет труда. Мне не понятно, где ее монтирует ядро (вернее, уже почти понятно. Кому интересно - посмотрите init/main.c и fs/stat.c - очень глубокомысленное решение по сборке ядра от реалтека. Руки бы повырывал таки программистам.)

В общем - сегодня я таки прицеплю sqfs поверх intrd - уже знаю как. А это снимает ограничение на RO_FS при 8 метрах оперативки.

Share this post


Link to post
Share on other sites
У меня вопрос к линуксоидам.

Где (и как) ядро грузит файловую, собранную как sqfs. Немогу найти точку обращения к флешу за куском, начинающимся с сигнатуры ROOT

 

Задача стоит в том, чтобы смонтировать эту вот sqfs не в корень, а в отдельную папку. А в корень смонтировать рамдиск, прилинкованный к ядру.

Может кто посоветует - где искать

 

Монтирования корня проходит в fs/super.c - но вот что-то именно доступа к sqfs там нет. Вечером конечно еще посижу - но может кто уже искал.... и даже находил ?

 

Может pivot_root подойдет. Вроде все то он и делает.

Share this post


Link to post
Share on other sites

dgreen, Дааа ... помоему так и есть ... исходя из pivot_root вроде оно ...

но это смотря только с одной стороны исходника .... фууууух башка перестала уже совсем соображать .... (сигнализацию делаю дома - в 24-проводах начал путаться) .... :( P/S Пора спатки наверно ...

Share this post


Link to post
Share on other sites

На счет зависаний Ovislink 5460 - уже даже руки начали опускаться .. :(

В общем прошол тестирование в комплексе (точка без радиаторов замотанная в поролон - чтобы побольше грелась) Выше 60 градусов температуры не было замечено .. условия были такими : сам 5460 был замотан в поролон и припаен биквад + к этому был подключен электорнный осцилограф .... после внутреннего источника было 3.3 В стабильно - без нюансов :( Сделал лично свой вывод ИМХО - драйвер (wlan) очень глюченный .... больше ничего не ост аеться ... вообщем НЛО какоето .....

Share this post


Link to post
Share on other sites

Фу-у-у-х. Поборол я двухфайловую систему :)

Самое трудноре было понять, как заставить ядро пользоавть обе.

Оказалось все очень просто. Программеры из реалтека, описывая возможные ситуаци условной компиляцией просто не задумались о том. что возможна ситуация наличия initrd и sqfs одновременно :)

Подправил руками.

sqfs монтируется очень просто - напрямую из блочного девайса mtdblock (в некоторых версиях ядра он почему-то называется mtd1).

Что я сделал:

Сделал 2 файловый - одна RO, хранящая все бинарники и библиотеки. (/bin,/sbin,/lib,/usr/bin,/usr/sbin)

Вторая - RW, хранит все остальное

RW - это root, организованный через initrd - т.е. прилинкован к ядру.

RO - это sqfs.

Он монтируется сразу после initrd (дописал прямо в init/main.c) в точку /ro_fs,

а RW-fs изначально проложенны символические ссылки.

 

Вроде как файловые собрал - тепереь надо разобраться с ядром.

Если его собирать без CONFIG_KERNEL_TINY - то его размер (неупакованный - то, что будет выложено память) - около 7 метров. Для d-linka это катастрова. Памяти не останется :(

Если собрать с CONFIG_KERNEL_TINY - то пропадает часть функциональности.

Сегодня полезу по коду ядра - смотреть, что убирает CONFIG_KERNEL_TINY, и что можно оставить.

Результаты - завтра на ветке.

Share this post


Link to post
Share on other sites

dgreen,

Если собрать с CONFIG_KERNEL_TINY - то пропадает часть функциональности.

 

Что тут имееться ввиду под функциональностью ??

Share this post


Link to post
Share on other sites

Alexnik,

Сегодня полезу по коду ядра - смотреть, что убирает CONFIG_KERNEL_TINY, и что можно оставить.

Результаты - завтра на ветке.

Share this post


Link to post
Share on other sites

Прикольно... насчет двуфайловой системы...

 

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

Share this post


Link to post
Share on other sites
Kitsok,

доступ к флешу был, есть и будет без дров NOR. Сам подумай - ядро файловую берет ? Настройки берет ? веб-странички берет ?

Откуда ? Из флеша. И берет он ее через /dev/mtd, который в свою очередь формируется mtd_четатам.o, который в дровах реалтека в папке линуха.

Доступ есть - просто попробуй :)

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

Отвечаю.

Без этого долбанного драйвера никто после загрузки ядра ничего из флеша не берет ;)

Ядро файловую систему не берет вообще, она подшита к ядру в виде рамдиска. В память ее берет бутлоадер.

Настройки тоже не берет, бо нету доступа. И веб-странички не берет.

И вообще ничего не работает, как я уже и писал два или три раза ;)

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