crc8 undefined while compiling linux kernel module on Beaglebone black/Debian

У вас есть приложение, которое не интегрировано в систему (установлено в каталоге, отличном от каталога по умолчанию, загрузка библиотек не по умолчанию), что вызывает некоторые проблемы, если оно неправильно настроено. Вероятно, он настроен в .bashrc или около того, но в основном это пропускается, если вы запускаете только команду, а не интерактивную оболочку. Есть два варианта:

  • Используйте стандартный ввод для отправки команды на сервер:

     echo "sqlplus SOAF_PUBLISHER/S_PUBLISHER_SOAF@OSBS1" | ssh -tt (скрыто)
     
  • Исправлено инициирование переменных среды PATH и LD_LIBRARY_PATH в ~/.bashrc (или других файлах запуска), чтобы они не пропускались для неинтерактивных команды. Обычно он содержит что-то вроде

     # Если не работает в интерактивном режиме, ничего не делайте
    случай $- в
     *и*) ;;
     *) возвращение;;
    эсак
    # ваши команды...
     

    Просто добавьте над ним модификации PATH и LD_LIBRARY_PATH и повторите попытку.

1
15.08.2016, 02:26
1 ответ

Ошибка исходит не от компилятора, а от компоновщика.Заголовочные файлы содержат только объявление функций, они не содержат кода функции, поэтому объявления функции в заголовке недостаточно для ее выполнения. Компоновщик времени сборки предупреждает вас, что он не нашел места, где определена функция. Когда вы пытаетесь загрузить модуль, ядро ​​выполняет последние шаги связывания. На этом этапе все функции, используемые загруженным модулем, должны быть определены работающим ядром. В вашем случае crc8 требуется модулю, но не определен ядром, поэтому модуль не может быть загружен.

Функция crc8 - это дополнительная функция, которая должна быть активирована с помощью CONFIG_CRC8 («функция CRC8» в «подпрограммах библиотеки») во время сборки. Его можно загрузить как модуль, также называемый crc8 . Попробуйте

modprobe crc8

. Если это сработает, значит в вашей установке есть модуль crc8 . После компиляции bq76pl536 и установки в / lib / modules запустите depmod -a ; при этом создается файл зависимости, и после обычной загрузки bq76pl536 (т.е. с modprobe bq76pl536 , а не напрямую с insmod ) также будет загружен crc8 модуль.

Если это не сработает, значит, в вашей установке нет модуля crc8 , и вам необходимо перекомпилировать ядро ​​с ним. Используйте упаковку и конфигурацию Ubuntu (за исключением изменения одного этого элемента конфигурации). См. вики Ubuntu для пошагового руководства.Поскольку вы изменили конфигурацию, не забудьте добавить модификатор версии в debian.master / changelog , как описано в вики. Затем перезагрузитесь с новым ядром и перекомпилируйте модуль bq76pl536 для нового ядра.

0
28.01.2020, 01:12

Теги

Похожие вопросы