embedded linux
- tes+or
- Неотъемлемая часть форума
- Сообщения: 535
- Зарегистрирован: 16 дек 2004, 17:47
- Откуда: minsk
- Контактная информация:
Re: embedded linux
запускал через телнет шелл, смотрел - таки да, там от линукса осталось не так много, но в приципе это он. а под стандартным я вообще подразумевал стандартный для этой модели модема)
что загрузчик менять не обязательно, так это понятно, только вот чтобы им пользоватся желательно какую-то документацию на него иметь иначе по неопытности есть все шансы убить модем. кстати, чего опасаться в первую очередь? понятно надо первым делом забэкапить содержимое флеша, но в идеале вообще нужно забэкапит и внутренний ROM контроллера. у меня AVR ISP2 программатор есть, подойдет? понимаю что вопрос выходит за рамки темы, но тема сама по себе смежная.
кстати, в прицнипе ничто не мешает оставить тот линукс что есть и допилить его. в чем могут быть подводные грабли такого варианта? ну, тоесть, как писать и с какими опциями собирать, чтобы бинарь будучи перенесен туда работал?
но вообще хотелось бы собрать систему для него самому, сугубо скиллов ради.
что загрузчик менять не обязательно, так это понятно, только вот чтобы им пользоватся желательно какую-то документацию на него иметь иначе по неопытности есть все шансы убить модем. кстати, чего опасаться в первую очередь? понятно надо первым делом забэкапить содержимое флеша, но в идеале вообще нужно забэкапит и внутренний ROM контроллера. у меня AVR ISP2 программатор есть, подойдет? понимаю что вопрос выходит за рамки темы, но тема сама по себе смежная.
кстати, в прицнипе ничто не мешает оставить тот линукс что есть и допилить его. в чем могут быть подводные грабли такого варианта? ну, тоесть, как писать и с какими опциями собирать, чтобы бинарь будучи перенесен туда работал?
но вообще хотелось бы собрать систему для него самому, сугубо скиллов ради.
- tes+or
- Неотъемлемая часть форума
- Сообщения: 535
- Зарегистрирован: 16 дек 2004, 17:47
- Откуда: minsk
- Контактная информация:
Re: embedded linux
таки поставил себе линукс на рабочую машину, слил туда дистриб uclinux, распаковал и начал копаться в конфигурации оного. первым делом был выбор производителя и конкретного чипа. моего чипа там естественно не оказалось, начал искать похожее. в идеале чтобы достоверно узнать что там нету ничего совместимого нужно было скачать даташиты ко всем чипам и детально их сопоставить с целевым чипом, но мне что-то было лень это делать, потому как их там до чертовой матери. выбрал нечто наиболее стандартное с ARM7TDMI ядром, а именно AT91M55800A, скачал даташит и начал упорно сопоставлять его с даташитом на W90N740CD_CDG. вообще с архитектурой ARM я пока не знаком, но исходя из того что мне известно из общей теории, я заключил, что для того чтобы у меня работала переферия, регистры ею управляющие должны находиться по тем адресам, где их ожидает увидеть ОС. таким образом я выбрал нечто наиболее нужное, а именно UART и начал сопоставлять регистры, в результате чего выявил что мало того что вся совокупность регистров находится по другому адресу, так отличется еще и их набор и смещение аналогичных регистров относительно базового адреса всей их совокупности. и есть еще один момент, правда я смотрел на него уже не очень внимательно, но кажется сам способ адресации памяти у этих чипов также отличается.
исходя из этого я пришел к выводу, что ненадо портить модем и ничего из того что может автоматически выдать эта система сборки на нем не запустится, а если запустится, то переферия работать не будет. т.е. надо выполнить портирование, а я этого делать не умею. пробовал браузить соотвествующие сырцы и даже не смог найти где указываются эти самые адреса регистров. думаю мне пока рано об этом даже думать, тем более когда речь идет о работе и конкретных сроках.
если я где-то не прав - поправьте, но я пришел к выводу, что в моем конкретном случае установка этого дистрибутива на это конкретное устройство невозможна. может посоветуете что-то иное что может запустится на этом чипе?
кроме того - возможно стоит рассмотреть вариант добавления своих бинарей в существующую прошивку?
если все эти варианты бесперспективны, то мне, вероятно, придется реализовывать свою задачу на дополнительном модуле с использованием AVR, но было бы предпочтительно, чтобы все это умел модем, потому как он в любом случае включен в конфигурацию.
исходя из этого я пришел к выводу, что ненадо портить модем и ничего из того что может автоматически выдать эта система сборки на нем не запустится, а если запустится, то переферия работать не будет. т.е. надо выполнить портирование, а я этого делать не умею. пробовал браузить соотвествующие сырцы и даже не смог найти где указываются эти самые адреса регистров. думаю мне пока рано об этом даже думать, тем более когда речь идет о работе и конкретных сроках.
если я где-то не прав - поправьте, но я пришел к выводу, что в моем конкретном случае установка этого дистрибутива на это конкретное устройство невозможна. может посоветуете что-то иное что может запустится на этом чипе?
кроме того - возможно стоит рассмотреть вариант добавления своих бинарей в существующую прошивку?
если все эти варианты бесперспективны, то мне, вероятно, придется реализовывать свою задачу на дополнительном модуле с использованием AVR, но было бы предпочтительно, чтобы все это умел модем, потому как он в любом случае включен в конфигурацию.
Re: embedded linux
Просто ищется kernel board setup для ARM7TDMI. Обычно это один файлик со всеми смещениями. В интернете. После чего правится vendor setup, в него добавляется новый вариант, и uClinux конфигурируется для нового варианта оборудования. That's all.
Если не повезло (в интернетах нет)- то board setup составляется по даташиту по аналогии.
Если не повезло (в интернетах нет)- то board setup составляется по даташиту по аналогии.
- tes+or
- Неотъемлемая часть форума
- Сообщения: 535
- Зарегистрирован: 16 дек 2004, 17:47
- Откуда: minsk
- Контактная информация:
Re: embedded linux
>Просто ищется kernel board setup для ARM7TDMI
не совсем понимаю, это же ядро и переферию оно никоим образом не определяет
плата сама по себе никак не называется, ну или можно считать что она называется как модем.
в любом случае, если в запросе совместить название чипа или модема со словом linux оно не выдает ничего полезного, потому как китайского я незнаю.
вобщем, будем считать что ничего нет, будем считать что надо написать этот файл самому, только у меня что-то не особо получилось найти этот самый файл со смещениями. у него есть какое-то стандартное название и место?
ну и попрежнему актуальной остается тема изменения существующей прошивки, сейчас попробую еще раз залогиниться в существующую систему и попробовать разобраться как она работает и из чего состоит
не совсем понимаю, это же ядро и переферию оно никоим образом не определяет
плата сама по себе никак не называется, ну или можно считать что она называется как модем.
в любом случае, если в запросе совместить название чипа или модема со словом linux оно не выдает ничего полезного, потому как китайского я незнаю.
вобщем, будем считать что ничего нет, будем считать что надо написать этот файл самому, только у меня что-то не особо получилось найти этот самый файл со смещениями. у него есть какое-то стандартное название и место?
ну и попрежнему актуальной остается тема изменения существующей прошивки, сейчас попробую еще раз залогиниться в существующую систему и попробовать разобраться как она работает и из чего состоит
- tes+or
- Неотъемлемая часть форума
- Сообщения: 535
- Зарегистрирован: 16 дек 2004, 17:47
- Откуда: minsk
- Контактная информация:
Re: embedded linux
залогинился и сделал 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-ой редхат, так что не факт что я найду все архивы на которые она ссылается, с другой стороны говорят что из интернета никогда ничего не исчезает. еще не такое находил.
прочитаю,попробую - расскажу
http://www.karingroup.com/eng/product/_ ... 4%20en.pdf
http://www.karingroup.com/eng/product/_ ... Manual.pdf
названия говорят сами за себя
но доки старые. пдфка про uсlinux 2003его года и упоминается там 6-ой редхат, так что не факт что я найду все архивы на которые она ссылается, с другой стороны говорят что из интернета никогда ничего не исчезает. еще не такое находил.
прочитаю,попробую - расскажу
- tes+or
- Неотъемлемая часть форума
- Сообщения: 535
- Зарегистрирован: 16 дек 2004, 17:47
- Откуда: minsk
- Контактная информация:
Re: embedded linux
документацию я прочитал и с самим линуксом все в порядке, да вот только со сборкой возникли определенные проблемы. оказалось нужен тулчейн. я начал его упорно искать и ставить. для начала решил попробовать поставить по этой доке: 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/ именно те версии которые там указаны, однако на сборке гцц случилось вот такое, причем далеко не сразу:
если что, вот этот кусок кода, строка с ошибкой отмечена моим комментом:
вот кстати описание этой самой функции open() и тутже встречается текст сообщения об ошибке который был мне выдан:
не совсем понимаю как тут что происходит, но может кому-то что-то это скажет
еще есть вариант вытащить из той версии которую я пытаюсь собрать все, что относится к описанию оборудования и попробовать как-то приделать к новой версии. стоит этим заниматся?
вообще какбы сырцы которые я пытаюсь достать 2003его года, но собрали же их как-то китайцы. или не их. может мне постаивть редхат 6ой как в мануале написано? может это простейший способ решения проблемы?
Код: Выделить всё
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);
}
Код: Выделить всё
__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
Давно это было ... http://hardened.gentooexperimental.org/ ... /ticket/29