embedded linux

Здесь обсуждаются все вопросы, не попадающие под другие категории
Аватара пользователя
tes+or
Неотъемлемая часть форума
Сообщения: 535
Зарегистрирован: 16 дек 2004, 17:47
Откуда: minsk
Контактная информация:

Re: embedded linux

Сообщение tes+or »

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

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

кстати, в прицнипе ничто не мешает оставить тот линукс что есть и допилить его. в чем могут быть подводные грабли такого варианта? ну, тоесть, как писать и с какими опциями собирать, чтобы бинарь будучи перенесен туда работал?

но вообще хотелось бы собрать систему для него самому, сугубо скиллов ради.

Аватара пользователя
tes+or
Неотъемлемая часть форума
Сообщения: 535
Зарегистрирован: 16 дек 2004, 17:47
Откуда: minsk
Контактная информация:

Re: embedded linux

Сообщение tes+or »

таки поставил себе линукс на рабочую машину, слил туда дистриб uclinux, распаковал и начал копаться в конфигурации оного. первым делом был выбор производителя и конкретного чипа. моего чипа там естественно не оказалось, начал искать похожее. в идеале чтобы достоверно узнать что там нету ничего совместимого нужно было скачать даташиты ко всем чипам и детально их сопоставить с целевым чипом, но мне что-то было лень это делать, потому как их там до чертовой матери. выбрал нечто наиболее стандартное с ARM7TDMI ядром, а именно AT91M55800A, скачал даташит и начал упорно сопоставлять его с даташитом на W90N740CD_CDG. вообще с архитектурой ARM я пока не знаком, но исходя из того что мне известно из общей теории, я заключил, что для того чтобы у меня работала переферия, регистры ею управляющие должны находиться по тем адресам, где их ожидает увидеть ОС. таким образом я выбрал нечто наиболее нужное, а именно UART и начал сопоставлять регистры, в результате чего выявил что мало того что вся совокупность регистров находится по другому адресу, так отличется еще и их набор и смещение аналогичных регистров относительно базового адреса всей их совокупности. и есть еще один момент, правда я смотрел на него уже не очень внимательно, но кажется сам способ адресации памяти у этих чипов также отличается.

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

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

кроме того - возможно стоит рассмотреть вариант добавления своих бинарей в существующую прошивку?

если все эти варианты бесперспективны, то мне, вероятно, придется реализовывать свою задачу на дополнительном модуле с использованием AVR, но было бы предпочтительно, чтобы все это умел модем, потому как он в любом случае включен в конфигурацию.

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Re: embedded linux

Сообщение mend0za »

Просто ищется kernel board setup для ARM7TDMI. Обычно это один файлик со всеми смещениями. В интернете. После чего правится vendor setup, в него добавляется новый вариант, и uClinux конфигурируется для нового варианта оборудования. That's all.

Если не повезло (в интернетах нет)- то board setup составляется по даташиту по аналогии.

Аватара пользователя
tes+or
Неотъемлемая часть форума
Сообщения: 535
Зарегистрирован: 16 дек 2004, 17:47
Откуда: minsk
Контактная информация:

Re: embedded linux

Сообщение tes+or »

>Просто ищется kernel board setup для ARM7TDMI

не совсем понимаю, это же ядро и переферию оно никоим образом не определяет

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

в любом случае, если в запросе совместить название чипа или модема со словом linux оно не выдает ничего полезного, потому как китайского я незнаю.

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

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

Аватара пользователя
tes+or
Неотъемлемая часть форума
Сообщения: 535
Зарегистрирован: 16 дек 2004, 17:47
Откуда: minsk
Контактная информация:

Re: embedded linux

Сообщение 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-ой редхат, так что не факт что я найду все архивы на которые она ссылается, с другой стороны говорят что из интернета никогда ничего не исчезает. еще не такое находил.

прочитаю,попробую - расскажу

Аватара пользователя
tes+or
Неотъемлемая часть форума
Сообщения: 535
Зарегистрирован: 16 дек 2004, 17:47
Откуда: minsk
Контактная информация:

Re: embedded linux

Сообщение 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ой как в мануале написано? может это простейший способ решения проблемы?

integer
Заглянувший
Сообщения: 36
Зарегистрирован: 20 апр 2009, 18:25

Re: embedded linux

Сообщение integer »


Ответить