Страница 2 из 2
Re: embedded linux
Добавлено: 29 окт 2009, 08:56
tes+or
запускал через телнет шелл, смотрел - таки да, там от линукса осталось не так много, но в приципе это он. а под стандартным я вообще подразумевал стандартный для этой модели модема)
что загрузчик менять не обязательно, так это понятно, только вот чтобы им пользоватся желательно какую-то документацию на него иметь иначе по неопытности есть все шансы убить модем. кстати, чего опасаться в первую очередь? понятно надо первым делом забэкапить содержимое флеша, но в идеале вообще нужно забэкапит и внутренний ROM контроллера. у меня AVR ISP2 программатор есть, подойдет? понимаю что вопрос выходит за рамки темы, но тема сама по себе смежная.
кстати, в прицнипе ничто не мешает оставить тот линукс что есть и допилить его. в чем могут быть подводные грабли такого варианта? ну, тоесть, как писать и с какими опциями собирать, чтобы бинарь будучи перенесен туда работал?
но вообще хотелось бы собрать систему для него самому, сугубо скиллов ради.
Re: embedded linux
Добавлено: 04 ноя 2009, 22:59
tes+or
таки поставил себе линукс на рабочую машину, слил туда дистриб uclinux, распаковал и начал копаться в конфигурации оного. первым делом был выбор производителя и конкретного чипа. моего чипа там естественно не оказалось, начал искать похожее. в идеале чтобы достоверно узнать что там нету ничего совместимого нужно было скачать даташиты ко всем чипам и детально их сопоставить с целевым чипом, но мне что-то было лень это делать, потому как их там до чертовой матери. выбрал нечто наиболее стандартное с ARM7TDMI ядром, а именно AT91M55800A, скачал даташит и начал упорно сопоставлять его с даташитом на W90N740CD_CDG. вообще с архитектурой ARM я пока не знаком, но исходя из того что мне известно из общей теории, я заключил, что для того чтобы у меня работала переферия, регистры ею управляющие должны находиться по тем адресам, где их ожидает увидеть ОС. таким образом я выбрал нечто наиболее нужное, а именно UART и начал сопоставлять регистры, в результате чего выявил что мало того что вся совокупность регистров находится по другому адресу, так отличется еще и их набор и смещение аналогичных регистров относительно базового адреса всей их совокупности. и есть еще один момент, правда я смотрел на него уже не очень внимательно, но кажется сам способ адресации памяти у этих чипов также отличается.
исходя из этого я пришел к выводу, что ненадо портить модем и ничего из того что может автоматически выдать эта система сборки на нем не запустится, а если запустится, то переферия работать не будет. т.е. надо выполнить портирование, а я этого делать не умею. пробовал браузить соотвествующие сырцы и даже не смог найти где указываются эти самые адреса регистров. думаю мне пока рано об этом даже думать, тем более когда речь идет о работе и конкретных сроках.
если я где-то не прав - поправьте, но я пришел к выводу, что в моем конкретном случае установка этого дистрибутива на это конкретное устройство невозможна. может посоветуете что-то иное что может запустится на этом чипе?
кроме того - возможно стоит рассмотреть вариант добавления своих бинарей в существующую прошивку?
если все эти варианты бесперспективны, то мне, вероятно, придется реализовывать свою задачу на дополнительном модуле с использованием AVR, но было бы предпочтительно, чтобы все это умел модем, потому как он в любом случае включен в конфигурацию.
Re: embedded linux
Добавлено: 05 ноя 2009, 13:24
mend0za
Просто ищется kernel board setup для ARM7TDMI. Обычно это один файлик со всеми смещениями. В интернете. После чего правится vendor setup, в него добавляется новый вариант, и uClinux конфигурируется для нового варианта оборудования. That's all.
Если не повезло (в интернетах нет)- то board setup составляется по даташиту по аналогии.
Re: embedded linux
Добавлено: 06 ноя 2009, 00:19
tes+or
>Просто ищется kernel board setup для ARM7TDMI
не совсем понимаю, это же ядро и переферию оно никоим образом не определяет
плата сама по себе никак не называется, ну или можно считать что она называется как модем.
в любом случае, если в запросе совместить название чипа или модема со словом linux оно не выдает ничего полезного, потому как китайского я незнаю.
вобщем, будем считать что ничего нет, будем считать что надо написать этот файл самому, только у меня что-то не особо получилось найти этот самый файл со смещениями. у него есть какое-то стандартное название и место?
ну и попрежнему актуальной остается тема изменения существующей прошивки, сейчас попробую еще раз залогиниться в существующую систему и попробовать разобраться как она работает и из чего состоит
Re: embedded linux
Добавлено: 06 ноя 2009, 01:21
tes+or
залогинился и сделал cat /proc/cpuinfo, а там было W90N740, т.е. первая половина названия чипа и стукнуло мне в голову поискать по запросу W90N740 linux, и явились мне такие документы:
http://www.karingroup.com/eng/product/_ ... 4%20en.pdf
http://www.karingroup.com/eng/product/_ ... Manual.pdf
названия говорят сами за себя
но доки старые. пдфка про uсlinux 2003его года и упоминается там 6-ой редхат, так что не факт что я найду все архивы на которые она ссылается, с другой стороны говорят что из интернета никогда ничего не исчезает. еще не такое находил.
прочитаю,попробую - расскажу
Re: embedded linux
Добавлено: 07 ноя 2009, 17:48
tes+or
документацию я прочитал и с самим линуксом все в порядке, да вот только со сборкой возникли определенные проблемы. оказалось нужен тулчейн. я начал его упорно искать и ставить. для начала решил попробовать поставить по этой доке:
http://www.ibm.com/developerworks/linux ... =grlnxw961 , как я понял это стандарт на сегодняшний день. это Sourcery G++ Lite, если кому лень под линк заглядывать. поставил я его, наделал симлинков соотвествующих тем именам к которым обращался make uclinux'a и запустил сборку. сборка оборвалась на первом же файле, заявив мне что компилятор не знает и знать не хочет что такое -mshort-load-bytes и -mapcs-32. я долго и упорно гуглил и выяснил, что эти флаги устарели и на настоящий моменты заменены на -malignment-traps и -mabi=apcs-gnu соотвественно. появилось рациональное желание заменить одни на другие и я начал рекурсивно грепать дерево сырцов чтобы выяснить где они содержатся. выяснилось что каждому .с файлу соотвествует .flags файл в котором описаны флаги сборки. к слову в свежей версии uclinux такого нет. я предположил что эти флаги чем-то сгенерены и заново распаковал архив с сырцами - эти файлы были и там, т.е. логично предположить что средства генерации этих файлов в архив не включены. есть вариант написать выражение из связки find и sed. я представляю как оно должно выглядеть, но пока не брался и более того - боюсь что оно отработает не совсем верно, потому как ранее я так хитро и многоэтажно в шелле не выражался. я бы попробовал, но был еще один вариант - собрать версию тулчейна которая еще поддерживает эти флаги, логично предположить что вероятность иных проблем там также будет намного ниже, потому что код написан под более старые версии гцц. ставить я решил вот по этому хауту:
http://frank.harvard.edu/~coldwell/toolchain/ именно те версии которые там указаны, однако на сборке гцц случилось вот такое, причем далеко не сразу:
Код: Выделить всё
gcc -g -O2 -DIN_GCC -DCROSS_COMPILE -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -pedantic -Wno-long-long -DHAVE_CONFIG_H -I. -I. -I../../../gcc-3.4.4/gcc -I../../../gcc-3.4.4/gcc/. -I../../../gcc-3.4.4/gcc/../include \
-DTARGET_MACHINE=\"arm-unknown-linux-gnu\" \
-c ../../../gcc-3.4.4/gcc/collect2.c -o collect2.o
In function ‘open’,
inlined from ‘collect_execute’ at ../../../gcc-3.4.4/gcc/collect2.c:1537:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[1]: *** [collect2.o] Error 1
make[1]: Leaving directory `/usr/arm/src/BUILD/gcc-3.4.4-stage1/gcc'
make: *** [all-gcc] Error 2
если что, вот этот кусок кода, строка с ошибкой отмечена моим комментом:
Код: Выделить всё
void
collect_execute (const char *prog, char **argv, const char *redir)
{
char *errmsg_fmt;
char *errmsg_arg;
int redir_handle = -1;
int stdout_save = -1;
int stderr_save = -1;
if (vflag || debug)
{
char **p_argv;
const char *str;
if (argv[0])
fprintf (stderr, "%s", argv[0]);
else
notice ("[cannot find %s]", prog);
for (p_argv = &argv[1]; (str = *p_argv) != (char *) 0; p_argv++)
fprintf (stderr, " %s", str);
fprintf (stderr, "\n");
}
fflush (stdout);
fflush (stderr);
/* If we cannot find a program we need, complain error. Do this here
since we might not end up needing something that we could not find. */
if (argv[0] == 0)
fatal ("cannot find `%s'", prog);
if (redir)
{
/* Open response file. */
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT); // <<<ошибка здесь
/* Duplicate the stdout and stderr file handles
so they can be restored later. */
stdout_save = dup (STDOUT_FILENO);
if (stdout_save == -1)
fatal_perror ("redirecting stdout: %s", redir);
stderr_save = dup (STDERR_FILENO);
if (stderr_save == -1)
fatal_perror ("redirecting stdout: %s", redir);
/* Redirect stdout & stderr to our response file. */
dup2 (redir_handle, STDOUT_FILENO);
dup2 (redir_handle, STDERR_FILENO);
}
pid = pexecute (argv[0], argv, argv[0], NULL, &errmsg_fmt, &errmsg_arg,
(PEXECUTE_FIRST | PEXECUTE_LAST | PEXECUTE_SEARCH));
if (redir)
{
/* Restore stdout and stderr to their previous settings. */
dup2 (stdout_save, STDOUT_FILENO);
dup2 (stderr_save, STDERR_FILENO);
/* Close response file. */
close (redir_handle);
}
if (pid == -1)
fatal_perror (errmsg_fmt, errmsg_arg);
}
вот кстати описание этой самой функции open() и тутже встречается текст сообщения об ошибке который был мне выдан:
Код: Выделить всё
__errordecl (__open_missing_mode,
"open with O_CREAT in second argument needs 3 arguments"); //<<текст сообщения
__extern_always_inline int
open (__const char *__path, int __oflag, ...)
{
if (__va_arg_pack_len () > 1)
__open_too_many_args ();
if (__builtin_constant_p (__oflag))
{
if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
{
__open_missing_mode (); //<<вызов сообщения об ошибке
return __open_2 (__path, __oflag);
}
return __open_alias (__path, __oflag, __va_arg_pack ());
}
if (__va_arg_pack_len () < 1)
return __open_2 (__path, __oflag);
return __open_alias (__path, __oflag, __va_arg_pack ());
}
не совсем понимаю как тут что происходит, но может кому-то что-то это скажет
еще есть вариант вытащить из той версии которую я пытаюсь собрать все, что относится к описанию оборудования и попробовать как-то приделать к новой версии. стоит этим заниматся?
вообще какбы сырцы которые я пытаюсь достать 2003его года, но собрали же их как-то китайцы. или не их. может мне постаивть редхат 6ой как в мануале написано? может это простейший способ решения проблемы?
Re: embedded linux
Добавлено: 13 апр 2010, 02:29
integer