- unixforum.org
- Сборка драйвера
- Сборка драйвера
- Компиляция программ Linux
- Подготовка системы
- Как выполняется компиляция?
- Компиляция программ Linux
- Получение исходников
- Настройка configure
- Сборка программы
- Выводы
- Русские Блоги
- Скомпилируйте загруженный драйвер в ядро ядра (linux)
- Первый, основной способ компиляции драйвера в ядро
- Один, статическая компиляция
- Выберите опцию справки, чтобы просмотреть информацию описания:
- Два, динамическая компиляция
- Интеллектуальная рекомендация
- Используйте Maven для создания собственного архетипа скелета проекта (4)
- Станция интерпретации больших данных B пользуется популярностью среди гигантов района «призрачные животные» Цай Сюкуня.
- Вопрос A: Алгоритм 7-15: алгоритм кратчайшего пути Дейкстры
- Учебный дневник — перелистывание страниц
- Нулевое основание для отдыха-клиента
- Вам также может понравиться
- Подробно объясните, как новички используют sqlmap для выполнения инъекционных атак на базы данных mysql.
- Vue заметки сортируют, пусть вам начать с Vue.js:. 04_3 Сетевое приложение: AXIOS плюс Вью
- Шаблон алгоритма конной повозки
- 35 Line Code, чтобы получить метод исследования событий (ON)
- Образ докера: gitlab
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
Сборка драйвера
Модератор: Bizdelnick
Сборка драйвера
Сообщение camphene » 01.04.2011 00:58
Пожалуйста, помогите!
Мне нужно скомпилировать драйвер устройства под Linux.
В документации написано
В комплекте поставки драйвера идут скомпилированные модули для
ядер 2.4.7, 2.4.36.9, 2.6.16 (64 бита). Для использования с другими версиями
ядра может потребоваться скомпилировать модуль драйвера. Для этого в
директории source/tmk1553busb/ надо запустить соответствующую команду:
make24 для ядра 2.4 или make26 для ядра 2.6. Для того, чтобы модуль драйвера
мог скомпилироваться, необходимо, чтобы были установлены исходники ядра Linux
(Linux kernel sources).
Исходники ядра Linux должны быть расположены в папке /usr/src/linux
для успешной компиляции драйвера. Если такой папки нет, и исходники ядра
расположены в другой папке (например, /usr/src/linux-2.4), то необходимо
обеспечить существование папки /usr/src/linux с исходниками ядра Linux. Для
этого обычно достаточно выполнить команду подобную этой:
ln -s /usr/src/linux-2.4 /usr/src/linux
Эта команда записана в прилагаемом файле linkkern24.
В ядре 2.6 для компиляции драйвера может потребоваться предварительно
выполнить следующие команды:
cd /usr/src/linux
make mrproper
make cloneconfig
make modules_prepare
Источник
Компиляция программ Linux
Все программы для компьютера представляют собой набор команд процессора, которые состоят из определенного набора бит. Этих команд несколько сотен и с помощью них выполняются все действия на вашем компьютере. Но писать программы непосредственно с помощью этих команд сложно. Поэтому были придуманы различные языки программирования, которые проще для восприятия человеку.
Для подготовки программы к выполнению, специальная программа собирает ее из исходного кода на языке программирования в машинный код — команды процессора. Этот процесс называется компиляция. Linux — это свободное программное обеспечение, а поэтому исходные коды программ доступны всем желающим. Если программы нет в репозитории или вы хотите сделать что-то нестандартное, то вы можете выполнить компиляцию программы.
В этой статье мы рассмотрим, как выполняется компиляция программ Linux, как происходит процесс компиляции, а также рассмотрим насколько гибко вы сможете все настроить.
Подготовка системы
Мы будем компилировать программы, написанные на Си или С++, так как это наиболее используемый язык для программ, которые требуют компиляции. Мы уже немного рассматривали эту тему в статье установка из tar.gz в Linux, но та статья ориентирована больше на новичков, которым нужно не столько разобраться, сколько получить готовую программу.
В этой же статье тема рассмотрена более детально. Как вы понимаете, для превращения исходного кода в команды процессора нужно специальное программное обеспечение. Мы будем использовать компилятор GCC. Для установки его и всех необходимых инструментов в Ubuntu выполните:
sudo apt install build-essential manpages-dev git automake autoconf
Затем вы можете проверить правильность установки и версию компилятора:
Но перед тем как переходить к самой компиляции программ рассмотрим более подробно составляющие этого процесса.
Как выполняется компиляция?
Компиляция программы Linux — это довольно сложный процесс. Все еще сложнее, потому что код программы содержится не в одном файле и даже не во всех файлах ее исходников. Каждая программа использует множество системных библиотек, которые содержат стандартные функции. К тому же один и тот же код должен работать в различных системах, содержащих различные версии библиотек.
На первом этапе, еще до того как начнется непосредственно компиляция, специальный инструмент должен проверить совместима ли ваша система с программой, а также есть ли все необходимые библиотеки. Если чего-либо нет, то будет выдана ошибка и вам придется устранить проблему.
Дальше идет синтаксический анализ и преобразование исходного кода в объектный код, без этого этапа можно было бы и обойтись, но это необходимо, чтобы компилятор мог выполнить различные оптимизации, сделать размер конечной программы меньше, а команды процессора эффективнее.
Затем все объектные файлы собираются в одну программу, связываются с системными библиотеками. После завершения этого этапа программу остается только установить в файловую систему и все. Вот такие основные фазы компиляции программы, а теперь перейдем ближе к практике.
Компиляция программ Linux
Первое что нам понадобиться — это исходники самой программы. В этом примере мы будем собирать самую последнюю версию vim. Это вполне нейтральная программа, достаточно простая и нужная всем, поэтому она отлично подойдет для примера.
Получение исходников
Первое что нам понадобиться, это исходные коды программы, которые можно взять на GitHub. Вы можете найти исходники для большинства программ Linux на GitHub. Кроме того, там же есть инструкции по сборке:
Давайте загрузим сами исходники нашей программы с помощью утилиты git:
git clone https://github.com/vim/vim
Также, можно было скачать архив на сайте, и затем распаковать его в нужную папку, но так будет удобнее. Утилита создаст папку с именем программы, нам нужно сделать ее рабочей:
Настройка configure
Дальше нам нужно запустить скрипт, который проверит нашу программу на совместимость с системой и настроит параметры компиляции. Он называется configure и поставляется разработчиками программы вместе с исходниками. Весь процесс компиляции описан в файле Makefile, его будет создавать эта утилита.
Если configure нет в папке с исходниками, вы можете попытаться выполнить такие скрипты чтобы его создать:
Также для создания этого скрипта можно воспользоваться утилитой automake:
aclocal
autoheader
automake —gnu —add-missing —copy —foreign
autoconf -f -Wall
Утилита automake и другие из ее набора генерируют необходимые файлы на основе файла Mackefile.am. Этот файл обязательно есть в большинстве проектов.
После того как вы получили configure мы можем переходить к настройке. Одним из огромных плюсов ручной сборки программ есть то, что вы можете сами выбрать с какими опциями собирать программу, где она будет размещена и какие дополнительные возможности стоит включить. Все это настраивается с помощью configure. Полный набор опций можно посмотреть, выполнив:
Рассмотрим наиболее часто используемые, стандартные для всех программ опции:
- —prefix=PREFIX — папка для установки программы, вместо /, например, может быть /usr/local/, тогда все файлы будут распространены не по основной файловой системе, а в /usr/local;
- —bindir=DIR — папка для размещения исполняемых файлов, должна находится в PREFIX;
- —libdir=DIR — папка для размещения и поиска библиотек по умолчанию, тоже в PREFIX;
- —includedir=DIR — папка для размещения man страниц;
- —disable-возможность — отключить указанную возможность;
- —enable-возможность — включить возможность;
- —with-библиотека — подобно enable активирует указанную библиотеку или заголовочный файл;
- —without-библиотека — подобное disable отключает использование библиотеки.
Вы можете выполнить configure без опций, чтобы использовать значения по умолчанию, но также можете вручную указать нужные пути. В нашем случае ./configure есть, и мы можем его использовать:
Во время настройки утилита будет проверять, есть ли все необходимые библиотеки в системе, и если нет, вам придется их установить или отключить эту функцию, если это возможно. Например, может возникнуть такая ошибка: no terminal library found checking for tgetent(). configure: error: NOT FOUND!
В таком случае нам необходимо установить требуемую библиотеку. Например, программа предлагает ncurses, поэтому ставим:
sudo apt install libncurces-dev
Приставка lib всегда добавляется перед библиотеками, а -dev — означает, что нам нужна библиотека со всеми заголовочными файлами. После удовлетворения всех зависимостей настройка пройдет успешно.
Сборка программы
Когда настройка будет завершена и Makefile будет готов, вы сможете перейти непосредственно к сборке программы. На этом этапе выполняется непосредственно преобразование исходного кода в машинный. Утилита make на основе Makefile сделает все необходимые действия:
Дальше осталось установить саму программу, если вы использовали опцию prefix, чтобы не устанавливать программу в основную файловую систему, то можно применить стандартную опцию make:
После этого программа будет установлена в указанную вами папку, и вы сможете ее использовать. Но более правильный путь — создавать пакет для установки программы, это делается с помощью утилиты checkinstall, она позволяет создавать как deb, так и rpm пакеты, поэтому может использоваться не только в Ubuntu. Вместо make install выполните:
Затем просто установите получившийся пакет с помощью dpkg:
sudo dpkg install vim.deb
После этого сборка программы полностью завершена и установлена, так что вы можете переходить к полноценному использованию.
Если вы устанавливали программу с помощью make install, то удалить ее можно выполнив в той же папке обратную команду:
sudo make uninstall
Команда удалит все файлы, которые были скопированы в файловую систему.
Выводы
В этой статье мы рассмотрели, как выполняется компиляция программы Linux. Этот процесс может быть сложным для новичков, но в целом, все возможно, если потратить на решение задачи несколько часов. Если у вас остались вопросы, спрашивайте в комментариях!
На завершение видео о том, что такое компилятор и интерпретатор:
Источник
Русские Блоги
Скомпилируйте загруженный драйвер в ядро ядра (linux)
Первый, основной способ компиляции драйвера в ядро
Есть два способа скомпилировать драйвер в ядро под linux:
1) Статическая компиляция
2) Динамическая компиляция
Статическая компиляция заключается в интеграции исходного кода загруженного драйвера в исходный код ядра ядра, а затем в настройке соответствующих параметров через графический интерфейс.После настройки параметров сохраните и выйдите, затем скомпилируйте и, наконец, скомпилированный, интегрированный и используемый для записи Записанный файл здесь будет называться uImage.
Динамическая компиляция заключается в компиляции загруженного исходного кода в файл .ko и, наконец, загрузке файла ko на плату с помощью команды insmod.
Выберете ли вы статическую компиляцию или динамическую компиляцию, зависит от ваших потребностей.
Один, статическая компиляция
Я только подробно объясняю, как добавить соответствующие параметры модуля в графический интерфейс. Шаги, предшествующие графическому интерфейсу (make menuconfig), были опущены. Перед этим я просмотрел множество руководств, поэтому я не буду повторять их здесь.
1. О скачанных драйверах
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. .
Станция интерпретации больших данных 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 .
Источник