Получена «ошибка: деление на ноль в #if» в jiffies.h при компиляции кода драйвера с помощью llvm-gcc - PullRequest
2 голосов
/ 01 августа 2010

Я пытаюсь использовать llvm-gcc (llvm версия 1.7) для компиляции программы драйвера (linux / drivers / net / zorro8390.c) в исходном коде ядра linux (версия 2.6.18.8) для исследовательских целей, но Я получаю много ошибок от jiffies.h:

bash-3.2$ llvm-gcc -D__GNUCC -E -I../../include zorro8390.c -o test.o
In file included from ../../include/linux/lockdep.h:12,
                 from ../../include/linux/spinlock_types.h:12,
                 from ../../include/linux/spinlock.h:78,
                 from ../../include/linux/module.h:10,
                 from zorro8390.c:22:
../../include/linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace"
In file included from zorro8390.c:30:
../../include/linux/jiffies.h:210:31: error: division by zero in #if
../../include/linux/jiffies.h:210:31: error: division by zero in #if
...(a bunch of same errors)
../../include/linux/jiffies.h:432:28: error: division by zero in #if

Я погуглил множество обсуждений этой ошибки, но многие из них посвящены сборке ядра с помощью команды make. Я до сих пор не знаю, как это исправить при непосредственном использовании llvm-gcc. Любое предложение по этому поводу? Большое спасибо за вашу помощь!

Daniel

Ответы [ 4 ]

1 голос
/ 01 августа 2010

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

linux/list.h:887:2: warning: #warning "don't include kernel headers in userspace"

Вы должны выполнить обычную сборку ядра с V = 1 в командной строке make, записать вывод в файл и найти строку для zorro8390.c - которая сообщит вам дополнительную -D переключатели вам нужны. Также могут быть необходимы другие (-I, -include и т. Д.).

0 голосов
/ 06 мая 2016

В моем случае #include <linux/time.h> было в заголовке, но файл заголовка time.h отсутствовал из ... osprey/obj/include/linux. Как только я добавил заголовок в папку out, ошибка была решена. linux/time.h имел правильные определения, которые были необходимы.
По какой-то причине он обнаружил ошибку до того, как обнаружил отсутствующий файл.

0 голосов
/ 07 марта 2013

Я получил ту же ошибку при кросс-компиляции программы (набор инструментов ti-davinci), которая обращалась к заголовкам ядра, я разобрался, используя информацию о здесь .

Правильный способ упаковать файлы заголовков для дистрибутива - запустить «make headers_install» из исходного каталога ядра, чтобы установить заголовки в / usr / include, а затем пересобрать пакет библиотеки C с зависимостью от конкретной версии just.установленные заголовки ядра.

Это создало папку / usr / include в моей директории с исходным кодом ядра, которая содержала заголовки для включения.

0 голосов
/ 01 августа 2010

jiffies - это внутренние такты ядра и зависят от определения, называемого HZ, которое iirc - это число jiffies / секунда. Как правило, это будет константа конфигурации (я помню, что когда-то она была от 100 до 1024, может быть, сейчас она больше). И HZ обычно используется в делениях, следовательно, ошибки div / 0.

Так что это проблемы, на которые справедливо ссылается @Zack; у вас нет определения конфигурации и т. д. Но вы можете попытаться определить HZ (или как он называется сегодня) и посмотреть, сможете ли вы заставить его работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...