LinuxForum.Fans
Тема

Не работает art Linux на Ubuntu 10.04

Автор: r1u1 11 сообщений 3133 просмотров
#168742

Здравствуйте! У меня следующая проблема: скачал linux-headers-2.6.32-art_20110303_i386.deb для Linux Ubuntu 10.04, установил. При попытке скомпилировать следующую программу:

text

// asd.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/art_task.h>

int main(int argc, char *argv[]) { art_prio_t prio; if (argc < 3 || (prio = atoi(argv[1])) < ART_PRIO_MIN || prio > ART_PRIO_MAX) { fprintf(stderr, "usage: %s prio file arg .../n", argv[0]); return -1; } if (art_enter(prio, ART_TASK_RR, 0) == -1) { perror("art_enter"); return -1; } if (execvp(argv[2], &argv[2]) == -1) { perror("execvp"); return -1; } return 0; }

пишет ошибку:

text

/tmp/ccVIkQup.o: In function `main':
asd.c:(.text+0x74): undefined reference to `art_enter'
collect2: ld returned 1 exit status

Компилировал с помощью gcc: gcc asd.c -o twest.

#168783

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

#168799

ART Linux (Advanced Real-Time Linux) является операционной системой реального времени. Разрабатывается Исследовательским центром Digital Human Research Center при Токийском Национальном Политехническом Институте (AIST). Ставится на Ubuntu Linux 10.04. Насколько я понял он работает как второе ядро, позволяя программе работать в режиме реального времени.
То что это системные вызовы (art_enter) я уверен, программу я брал отсюда (http://art-linux.sourceforge.net/), там и написано более подробно про эту систему.

#168810

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

#168817

Насколько я понял ядро ставится само при установке linux-headers-2.6.32-art_20110303_i386.deb, а как его запускать я нигде не могу найти, то же относится к компиляции приведенной программы через gcc.
Если честно я не сильно разбираюсь в Linux, но у меня есть готовая программа которая читает из файла раз в 30 сек информацию и выдавать ответ, осталось только запустить ее в режиме реального времени.

#168824
r1u1 написал:
Насколько я понял ядро ставится само при установке linux-headers-2.6.32-art_20110303_i386.deb

нет, вы поставили только хедеры, посмотрите, что в пакете ради интереса...
пакет с ядром должен будет называться linux-image-2.6.32-art_20110303_i386.deb или что-то вроде того...

r1u1 написал:
у меня есть готовая программа читает из файла раз в 30 сек информацию и выдавать ответ, осталось только запустить ее в режиме реального времени.

вы понимаете, что такое система реального времени? это система, которая должна реагировать на внешнее событие за определённое время. например система управления самолётом, системы различных роботов или управления каким-то сложным производством. А ваш один несчастный процесс, наверняка, достаточно запустить на обычной системе с повышенным приоритетом:
[console]nice -n -10 <команда> <аргументы>[/console]

#168841

Скачал и установил linux-image-2.6.32-art_20110303_i386.deb, все равно таже ошибка.

Fat-Zer написал:

Система реального времени - это система управления
каким-то сложным производством.

Моя программа определяет загруженность материалом газоструйной мельницы, и если она пуста посылает сигнал что бы ее загрузить. Т.е. надо сделать так что бы она не реагировала на системные вызовы Linux, и ее нельзя было убить с помощью сигналов TERM и т.п.

#168877
r1u1 написал:
Скачал и установил linux-image-2.6.32-art_20110303_i386.deb, все равно таже ошибка.

в /boot должен появится новый образ ядра. его надо прописать в загрузчик. в бубунте grub2 используется, я с ним не знаком, так что погуглите как это сделать(может он и сам автоматом добавил новую строчку)... потом перезагрузитесь с новым ядром... если после этого не слинкуется - будем думать...

r1u1 написал:
Т.е. надо сделать так что бы она не реагировала на системные вызовы Linux, и ее нельзя было убить с помощью сигналов TERM и т.п.

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

#169096
Fat-Zer написал:

в /boot должен появится новый образ ядра. его надо прописать в загрузчик. в бубунте grub2 используется, я с ним не знаком, так что погуглите как это сделать(может он и сам автоматом добавил новую строчку)... потом перезагрузитесь с новым ядром

Все зделал как вы сказали, Linux запустился нормально, но все равно таже ошибка при компиляции. А в grub2 надо было просто прописать update-grub и он сам добавляет ядро ART 2.6.32. Только он почемуто его впихнул в подпункт "previous Linux versions". Может потому что у меня на моем ubuntu стоит ядро 2.6.38-8. Может из-за этого и программа не хочет компилится?

#169176
r1u1 написал:
Может из-за этого и программа не хочет компилится?

нет, не из-за этого... это просто порядок записей... можете ещё почитать про редактирование конфигурации grub'а.

в пакете с ядром идёт файл /usr/lib/art_syscalls.o попробуйте с ним слинковать... т.е.
[console]gcc asd.c /usr/lib/art_syscalls.o[/console]

#169279

Заработало! Спасибо вам большое! Откомпилировал как вы сказали и все работает.

Войдите или зарегистрируйтесь, чтобы ответить.