Компиляция программы для пользовательского режима Linux - PullRequest
0 голосов
/ 26 декабря 2010

Я только что реализовал «псевдо» драйвер устройства и хочу его протестировать.Что я могу сделать в качестве теста, это просто:

echo "something"> /dev/mydev
cat /dev/mydev

Мой драйвер поддерживает более продвинутую функциональность, и я реализовал тестовую программу для проверки этих функционеров.Однако я не могу запустить его на UML (ошибка: исключение с плавающей запятой).Я считаю, что есть «особый» способ компиляции пользовательских программ для UML?

Не могли бы вы дать отправную точку для этого?Как мне скомпилировать тестовую программу?

ps Тестовая программа очень проста и выше ошибка не вызвана ошибкой в ​​программе.pps Для компиляции модуля у меня был готов Makefile, так что это было легко:)

Заранее спасибо.

РЕДАКТИРОВАТЬ: Ядра хоста и UML имеют одинаковую версию 2.6.35

РЕДАКТИРОВАТЬ: я считаю, что мне нужно показать исходный каталог ядра, а также некоторые параметры компилятора, также что-то вроде ARCH = um?

РЕДАКТИРОВАТЬ: В настоящее время я компилирую без каких-либо параметров.gcc test.c.Даже программа «Hello world» не работает на UML.Может быть, мне нужно что-то изменить при компиляции UML?

Ответы [ 2 ]

1 голос
/ 27 декабря 2010

Решение проблемы найдено (спасибо моим одноклассникам и профессору):

версии среды компиляции glibc должны соответствовать UML.Таким образом, компиляция опции --static решает проблему.

0 голосов
/ 26 декабря 2010

Если вы хотите читать / писать с / на ваше устройство, вы должны внедрить, а затем использовать в своей программе, как минимум, системные вызовы open(), read(), write() и close(), напримерлюбое другое устройство на вашем Linux.В приведенном вами примере ваша программа будет выглядеть примерно так (синтаксис может содержать некоторые ошибки):

char* string = "something";
char* result = (char*)malloc(sizeof(char) * strlen(string) + 1);

int fd = open("/dev/mydev", O_RDWR);

write(fd, "something", strlen(string));

read(fd, result, strlen(string));
printf("result = %s\n", result);

close(fd);
...