#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 и установить их вручную. Не идеально, но часто это работает.