Cross compile linux driver

Содержание
  1. Русские Блоги
  2. [Linux] Кросс-компиляция драйвера как модуля
  3. Вопрос 1: Шаги для компиляции модуля
  4. Вопрос 2: Подготовка ядра
  5. Вопрос 3: самый основной компонент модуля
  6. Русские Блоги
  7. Скомпилируйте загруженный драйвер в ядро ​​ядра (linux)
  8. Первый, основной способ компиляции драйвера в ядро
  9. Один, статическая компиляция
  10. Выберите опцию справки, чтобы просмотреть информацию описания:
  11. Два, динамическая компиляция
  12. Интеллектуальная рекомендация
  13. Используйте Maven для создания собственного архетипа скелета проекта (4)
  14. Станция интерпретации больших данных B пользуется популярностью среди гигантов района «призрачные животные» Цай Сюкуня.
  15. Вопрос A: Алгоритм 7-15: алгоритм кратчайшего пути Дейкстры
  16. Учебный дневник — перелистывание страниц
  17. Нулевое основание для отдыха-клиента
  18. Вам также может понравиться
  19. Подробно объясните, как новички используют sqlmap для выполнения инъекционных атак на базы данных mysql.
  20. Vue заметки сортируют, пусть вам начать с Vue.js:. 04_3 Сетевое приложение: AXIOS плюс Вью
  21. Шаблон алгоритма конной повозки
  22. 35 Line Code, чтобы получить метод исследования событий (ON)
  23. Образ докера: gitlab
  24. Кросскомпиляция под ARM
  25. Вводная
  26. Инструменты
  27. Элементарная технология кросскомпиляции

Русские Блоги

[Linux] Кросс-компиляция драйвера как модуля

Недавно я работал над драйверами для Linux, и было много проблем. Давайте сделаем запись.

Вопрос 1: Шаги для компиляции модуля

Чтобы скомпилировать модуль, вам необходимо подготовить следующие инструменты:
Полный и чистый исходный код ядра можно найти на официальном сайтеhttps://mirrors.edge.kernel.org/pub/linux/kernel/При загрузке вы должны обращать внимание на то же самое ядро, которое использовалось при редактировании ядра.Если оно неправильно скомпилировано, оно может не сообщать об ошибке, но при использовании insmod может возникнуть волшебная ошибка версии.
Цепочка инструментов кросс-компиляции готова,Различные цепочки инструментов кросс-компиляции, Общие
aarch64-linux-gnu-
arm-linux-gnueabi-
arm-none-eabi
Смотрите в другом блоге разницу[Embedded Linux] — кросс-компилятор вооружений gnueabi, none-eabi, arm-eabi, gnueabihf, разница gnueabi
Вы также можете столкнуться с ошибками, такими как openssl, вы можете установить соответствующую библиотеку на Baidu.

Вопрос 2: Подготовка ядра

Когда дело доходит до загрузки чистого исходного кода ядра, здесь возникает другой вопрос: нужно ли изменять исходный код ядра в соответствии с реальной ситуацией на плате? Ответ — нет, но вам нужно сделать menuconfig, чтобы сгенерировать файл .config и сделать компиляцию один раз, кроме того, Измените Makefile корневого каталога верхнего уровня, измените ARCH и CROSS_COMPILE
ARCH := arm64
CROSS_COMPILE := aarch64-linux-gnu-

Вопрос 3: самый основной компонент модуля

Ниже приведен простейший модуль модуля HelloWorld:

Источник

Русские Блоги

Скомпилируйте загруженный драйвер в ядро ​​ядра (linux)

Первый, основной способ компиляции драйвера в ядро

Есть два способа скомпилировать драйвер в ядро ​​под linux:
1) Статическая компиляция
2) Динамическая компиляция

Статическая компиляция заключается в интеграции исходного кода загруженного драйвера в исходный код ядра ядра, а затем в настройке соответствующих параметров через графический интерфейс.После настройки параметров сохраните и выйдите, затем скомпилируйте и, наконец, скомпилированный, интегрированный и используемый для записи Записанный файл здесь будет называться uImage.

Динамическая компиляция заключается в компиляции загруженного исходного кода в файл .ko и, наконец, загрузке файла ko на плату с помощью команды insmod.

Выберете ли вы статическую компиляцию или динамическую компиляцию, зависит от ваших потребностей.

Один, статическая компиляция

Я только подробно объясняю, как добавить соответствующие параметры модуля в графический интерфейс. Шаги, предшествующие графическому интерфейсу (make menuconfig), были опущены. Перед этим я просмотрел множество руководств, поэтому я не буду повторять их здесь.

1. О скачанных драйверах

Читайте также:  При установки windows с флешки просит оптический диск

1) Место хранения исходного кода драйвера в исходном коде ядра
В какой каталог должен быть помещен исходный код драйвера в исходный код ядра, это обычно зависит от типа драйвера. Например, если вы загружаете драйвер модуля Wi-Fi, то обычно мы помещаем драйвер модуля Wi-Fi. Поместите исходный код в . /linux-3.10.y/drivers/net/wireless
по этому пути; например, если вы загружаете драйвер символьного типа, он обычно будет помещен в . /linux-3.10.y/drivers/char По этому пути; если вы действительно не знаете, куда его положить, положите . /linux-3.10.y/drivers , Пока вы можете найти его в графическом интерфейсе в конце.

2) Модификация связанных файлов исходного кода драйвера

В исходном коде драйвера нужно изменить только 2 файла:

Kconfig
Файл Kconfig используется для описания информации о связанных параметрах графического интерфейса, например о том, какому типу атрибутов выбора соответствует этот параметр (<> (Д / Н / М), [] [Д / Н ]…), Например, описание информации, относящейся к этой опции и т. Д., Если Kconfig отсутствует, вы должны создать его самостоятельно. Возьмите модуль Wi-Fi в качестве примера. После создания добавьте контент, который вы хотите добавить, следующим образом (если Kconfig уже существует, не изменяйте его):

RTL8821CU Этот макрос можно назвать произвольно, и «Realtek 8821C USB WiFi» Это название этой опции, tristate Средство для установки атрибута выбора этой опции в три состояния, а именно Y / N / M, depends on Чтобы объяснить зависимость, если вы не знаете, что писать, оставьте это depends on , Не нужно добавлять информацию, последняя help Это описание информации о выборе, это необязательно.

Kconfig предназначен для описания параметров, а Makefile — для добавления взаимосвязей между параметрами. Сделайте то же самое, создайте, если нет, то измените следующим образом:

2. Модификации исходного кода ядра.
Как и драйвер, в исходном коде ядра есть только два файла, которые нужно изменить: Kconfig и Makefile. Эти два файла расположены в верхнем каталоге драйвера. Например, путь к исходному коду драйвера drivers/net/wirless/wifi , Вы хотите изменить drivers/net/wirless Kconfig и Makefile по этому пути.

Kconfig
Добавьте следующий код в последнюю строку Kconfig:

Makefile изменяется следующим образом:

После изменения вышеуказанных файлов, когда вы введете команду make menuconfig в терминале telminal и снова войдете в графический интерфейс, вы увидите, что появились соответствующие параметры (как показано ниже). Расположение параметра связано с путем к исходному коду вашего драйвера.Чем глубже путь к драйверу в исходном коде ядра, тем глубже соответствующий путь к параметру в графическом интерфейсе.

Выберите опцию справки, чтобы просмотреть информацию описания:

Два, динамическая компиляция

Вот все же в качестве примера возьмем модуль Wi-Fi. После загрузки соответствующего исходного кода драйвера вам нужно только изменить Makefile. Основные изменения заключаются в следующем:

ARCH Скомпилированная платформа, CROSS_COMPILE Путь, по которому находится цепочка компиляции, обычно передается в ubuntu echo $PATH Команда может видеть путь в цепочке компиляции, KSRC — это путь к исходному коду ядра. После изменения Makefile введите команду make в терминале, чтобы завершить компиляцию, и вы получите файл ko в текущем каталоге, а затем вам нужно только поместить файл ko в конец платы insmod для завершения.

Интеллектуальная рекомендация

Используйте Maven для создания собственного архетипа скелета проекта (4)

Один, базовое введение в Maven Во-вторых, скачайте и настройте Maven Три, настроить домашнее зеркало на Али В-четвертых, создайте содержимое скелета архетипа В-пятых, создайте проект через архетип 6. .

Читайте также:  Linux как устранить дребезг клавиатуры

Станция интерпретации больших данных B пользуется популярностью среди гигантов района «призрачные животные» Цай Сюкуня.

Автор | Сюй Линь Ответственный редактор | Ху Вэйвэй Предисловие Недавно Цай Сюкунь отправил письмо юриста на станцию ​​B. Содержание письма юриста показало, что «на станции B имеется большое кол.

Вопрос A: Алгоритм 7-15: алгоритм кратчайшего пути Дейкстры

Название Описание Во взвешенном ориентированном графе G для исходной точки v задача о кратчайшем пути от v до оставшихся вершин в G называется задачей кратчайшего пути с одной исходной точкой. Среди ш.

Учебный дневник — перелистывание страниц

Используйте плагин Layui.

Нулевое основание для отдыха-клиента

Предисловие: статья, обобщенная, когда я только что связался с тестом API, в дополнение к остальному клиенту этот инструмент сам, некоторые из мелких пониманий API, я надеюсь помочь тому же белую белу.

Вам также может понравиться

Подробно объясните, как новички используют sqlmap для выполнения инъекционных атак на базы данных mysql.

Шаг 1. Откройте для себя инъекцию Со мной все было нормально, когда я был свободен, я случайно нажал на чужой блог и обнаружил, что ссылка заканчивается на id, поэтому я проверил его вручную. Результа.

Vue заметки сортируют, пусть вам начать с Vue.js:. 04_3 Сетевое приложение: AXIOS плюс Вью

В предыдущем разделе мы ввели основное использование AXIOS, по сравнению с нативным Ajax, который при условии, что способ является более простым и, а сетевые данные теперь в состоянии получить его ров.

Шаблон алгоритма конной повозки

Блог гангстеров Тележки, запряженные лошадьми, используются для решения проблемы самой длинной подстроки палиндрома. Основное внимание уделяется подстрокам, а не подпоследовательностям. Если вы хотите.

35 Line Code, чтобы получить метод исследования событий (ON)

Об авторе: Чжу Сяою,Личный публичный номер: языковой класс большой кошки Эта проблема научит вас этой большой классе Cat.Как написать наиболее эффективное метод исследования событий с 35 Line R Code C.

Образ докера: gitlab

GitLab Docker images Both GitLab CE and EE are in Docker Hub: GitLab CE Docker image GitLab EE Docker image The GitLab Docker images are monolithic images of GitLab running all the necessary services .

Источник

Кросскомпиляция под ARM

Достаточно давно хотел освоить сабж, но всё были другие более приоритетные дела. И вот настала очередь кросскомпиляции.

В данном посте будут описаны:

  1. Инструменты
  2. Элементарная технология кросскомпиляции
  3. И, собственно, HOW2

Кому это интересно, прошу под кат.

Вводная

Одно из развивающихся направлений в современном IT это IoT. Развивается это направление достаточно быстро, всё время выходят всякие крутые штуки (типа кроссовок со встроенным трекером или кроссовки, которые могут указывать направление, куда идти (специально для слепых людей)). Основная масса этих устройств представляют собой что-то типа «блютуз лампочки», но оставшаяся часть являет собой сложные процессорные системы, которые собирают данные и управляют этим огромным разнообразием всяких умных штучек. Эти сложные системы, как правило, представляют собой одноплатные компьютеры, такие как Raspberry Pi, Odroid, Orange Pi и т.п. На них запускается Linux и пишется прикладной софт. В основном, используют скриптовые языки и Java. Но бывают приложения, когда необходима высокая производительность, и здесь, естественно, требуются C и C++. К примеру, может потребоваться добавить что-то специфичное в ядро или, как можно быстрее, высчитать БПФ. Вот тут-то и нужна кросскомпиляция.

Читайте также:  Скриншоты windows все версий

Если проект не очень большой, то его можно собирать и отлаживать прямо на целевой платформе. А если проект достаточно велик, то компиляция на целевой платформе будет затруднительна из-за временных издержек. К примеру, попробуйте собрать Boost на Raspberry Pi. Думаю, ожидание сборки будет продолжительным, а если ещё и ошибки какие всплывут, то это может занять ох как много времени.

Поэтому лучше собирать на хосте. В моём случае, это i5 с 4ГБ ОЗУ, Fedora 24.

Инструменты

Для кросскомпиляции под ARM требуются toolchain и эмулятор платформы либо реальная целевая платформа.

Т.к. меня интересует компиляция для ARM, то использоваться будет и соответствующий toolchain.

Toolchain’ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, vendor и OS, vendor зачастую опускается.

  • *-none-eabi — это toolchain для компиляции проекта работающего в bare metal.
  • *eabi — это toolchain для компиляции проекта работающего в какой-либо ОС. В моём случае, это Linux.
  • *eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float.

Описанное выше справедливо для gcc и сделанных на его базе toolchain’ах.

Сперва я пытался использовать toolchain’ы, которые лежат в репах Fedora 24. Но был неприятно удивлён этим:

Поискав, наткнулся на toolchain от компании Linaro. И он меня вполне устроил.

Второй инструмент- это QEMU. Я буду использовать его, т.к. мой Odroid-C1+ пал смертью храбрых (нагнулся контроллер SD карты). Но я таки успел с ним чуток поработать, что не может не радовать.

Элементарная технология кросскомпиляции

Собственно, ничего необычного в этом нет. Просто используется toolchain в роли компилятора. А стандартные библиотеки поставляются вместе с toolchain’ом.

Выглядит это так:

Какие ключи у toolchain’а можно посмотреть на сайте gnu, в соответствующем разделе.

Для начала нужно запустить эмуляцию с интересующей платформой. Я решил съэмулировать Cortex-A9.

После нескольких неудачных попыток наткнулся на этот how2, который оказался вполне вменяемым, на мой взгляд.

Ну сперва, само собою, нужно заиметь QEMU. Установил я его из стандартных репов Fedor’ы.

Далее создаём образ жёсткого диска, на который будет установлен Debian.

По этой ссылке скачал vmlinuz и initrd и запустил их в эмуляции.

Далее просто устанавливаем Debian на наш образ жёсткого диска (у меня ушло

После установки нужно вынуть из образа жёсткого диска vmlinuz и initrd. Делал я это по описанию отсюда.

Сперва узнаём смещение, где расположен раздел с нужными нам файлами:

Теперь по этому смещению примонтируем нужный нам раздел.

Копируем файлы vmlinuz и initrd и размонтируем жёсткий диск.

Теперь можно запустить эмуляцию.

И вот заветное приглашение:

Теперь с хоста по SSH можно подцепиться к симуляции.

Теперь можно и собрать программку. По Makefile’у ясно, что будет калькулятор. Простенький.

Собираем на хосте исполняемый файл.

Отмечу, что проще собрать с ключом -static, если нет особого желания предаваться плотским утехам с библиотеками на целевой платформе.

Копируем исполняемый файл на таргет и проверяем.

Собственно, вот такая она, эта кросскомпиляция.

UPD: Подправил информацию по toolchain’ам по комментарию grossws.

Источник

Оцените статью