Почему j1939.h не включен в ядро Ubuntu 18.04 Linux?

#c #linux #can-bus #socketcan

#c #linux #can-bus #socketcan

Вопрос:

Я пытаюсь использовать стандарт CAN J1939 во встроенной системе Linux под управлением Ubuntu 18.04, ядро 5.4.0-52-generic.

На этой странице elinux указано, что j1939.h «попал в основное ядро с версии 5.4». И kernel.org документация для j1939 подразумевает, что она находится в основном ядре.

Наконец, у меня установлены can-утилиты.

Когда я компилирую cpp-файл с #include <linux/can/j1939.h> помощью, я получаю no such file or directory сообщение об ошибке.

Я просмотрел linux/can каталог для подтверждения, j1939.h но его там нет. Есть ли какая-либо причина, по которой мое ядро версии 5.4 не будет иметь j1939.h ? Как я могу наилучшим образом использовать j1939.h в своей программе?

Ответ №1:

Вам нужны пакеты разработки для этих заголовков. Вы можете найти нужный вам пакет на сайте пакетов Ubuntu. Т.е. в данном случае пакеты, содержащие j1939.h. Вы, вероятно, ищете linux-libc-dev или linux-headers-5.4.0-26 .

Комментарии:

1. Ах, хорошая информация. Есть ли какой-нибудь очевидный способ узнать, требует ли какой-либо заголовок дополнительного пакета?

2. Обычно, если вам нужны заголовки, вам понадобятся пакеты разработки. Для «общего» рабочего стола Linux имеет мало смысла содержать заголовки, связанные с CAN, поэтому они не установлены по умолчанию. Лучше всего просто выполнить поиск на странице, на которую я ссылался, чтобы узнать, какие пакеты необходимы. Если они уже установлены, Ubuntu сообщит вам.

3. @Cameron Если это отвечает на ваши вопросы, пожалуйста, поддержите / примите это.

4. На самом деле кажется, что для Bionic нет пакета, доступного с 18.04 j1939.h . В таком случае, есть ли другая лучшая практика использования этого заголовка?

5. Ах, это довольно раздражает. Что вы можете попробовать, так это загрузить файлы .deb как для заголовков, так и для самого пакета с веб-сайта пакета Ubuntu и установить их вручную. Не идеально, но часто это работает.