Как получить конфигурацию и Module.symvers для ядра Raspbian для компиляции загружаемого модуля для моего RPI 2?

Я установил Raspbian, используя NOOBS_lite_v1_4.zip на новом microSD. После начальной установки я запустил

Обновление sudo apt-get
 sudo apt-get upgrade

Запуск «uname -r» говорит мне, что я запускаю версию Linux 3.18.11-v7 +. У меня нет кросс-компилятора и запускайте все разработки и компиляции на Pi. Я хочу написать установочный драйвер и увидеть на разных сайтах справки, для чего мне понадобились, по крайней мере, заголовки и конфигурация ядра для этого. Следуя примеру второго ответа в Скомпилируйте модуль Linux по ошибке Raspbian Я сделал следующее:

git clone https://github.com/raspberrypi/linux.git  

Затем я побежал:

git checkout rpi-3.18.y  

, чтобы приблизиться к 3.18.11. Затем я запустил

git log Makefile  

, чтобы получить hashtag фиксации для 3.18.11, который является f154a14e3 ....
Затем я получил эту версию:

git checkout f154a14e3  

, который извлек 3.18.11.

Когда я пытаюсь скомпилировать тестовый драйвер с помощью этого дерева, я получаю ошибки, когда конфигурация ядра недействительна и что Module.symvers отсутствует. Как получить конфигурацию и Module.symvers для моего ядра?

4 голоса | спросил Ron Jackson 2 +03002015-10-02T18:45:23+03:00312015bEurope/MoscowFri, 02 Oct 2015 18:45:23 +0300 2015, 18:45:23

2 ответа


5

Это многоступенчатый процесс:

Шаг 1: Получите git_hash из прошивки

Сначала вам понадобится идентификатор фиксации прошивки (firmware-commit-id) из пакета raspberrypi-bootloader:
zgrep '* firmware as of' /usr/share/doc/raspberrypi-bootloader/changelog.Debian.gz | head -1

С учетом идентификатора прошивки - https://github.com /raspberrypi /firmware /commits /master и найдите этот идентификатор фиксации и нажмите ссылку с заголовком Просмотрите репозиторий на этом этапе истории , а затем перейдите в extra. Когда вы там, вы должны увидеть файл с именем git_hash. Откройте этот файл и запишите идентификатор git commit (kernel-commit-id), который вы видите там. Из этого каталога также загрузите файл Module7.symvers для Pi2 (Module.symvers для Pi1)

Шаг 2: Подготовьте ядро ​​для компиляции модуля

Получить исходные коды ядра и поместить их в папку rpf-linux-kernel:
git clone https://github.com/raspberrypi/linux rpf-linux-kernel
Это загрузит более 1 ГБ данных, а затем обработает их, что займет некоторое время.

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

cd rpf-linux-kernel git checkout -b rpi-bootloader-3.18.11 <kernel-commit-id> Это изменится в каталог с кодом ядра raspberrypi, а затем проверит код в ранее извлеченном ядре-commit-id в новую ветку. Я всегда делаю что-то в отдельной ветке, поэтому я могу испортить все, что хочу в этой ветке, и начать с чистого листа, возвращаясь и проверяя новую ветку. Однако это не требуется.

Теперь, когда у нас есть точный код с правом фиксации id, пришло время сделать некоторые приготовления: make mrproper make bcm2709_defconfig make modules_prepare Это очищает все, а затем загружает конфигурацию по умолчанию для Pi2. Для Pi1 вы должны использовать make bcmrpi_defconfig. Затем он готов к компиляции модулей ядра.

cp ../Module7.symvers Module.symvers
Это копирует ранее сохраненный Module7.symvers в текущий каталог. Он должен называться Module.symvers при размещении в rpf-linux-kernel! При компиляции для Pi1 вы должны просто скопировать ранее сохраненный Module.symvers в rpf-linux-kernel. Я предположил, что эти файлы *.symvers были сохранены в родительском каталоге rpf-linux-kernel.

Шаг 3: Настройте свою систему для компиляции модуля ядра

Когда вы компилируете модуль ядра, система сборки выглядит в каталоге /lib/modules/<kernel-version>/build для заголовков /источников ядра.

В следующем примере мы предполагаем, что пользователь «pi» и что предыдущая команда git clone была выполнена в домашнем каталоге и что мы хотим скомпилировать модуль для текущего ядра.
Ссылка, которую мы должны установить, находится между исходным кодом ядра и каталогом /lib/modules/<current-kernel-version>/build. <current-kernel-version> можно получить с помощью uname -r и поэтому команда для установки ссылки будет следующей:
sudo ln -s /home/pi/rpf-linux-kernel/ /lib/modules/$(uname -r)/build

Шаг 4: Скомпилируйте модуль ядра или тестовый драйвер

Теперь, когда все приготовления выполнены, вы можете скомпилировать свой модуль ядра или тестовый драйвер с помощью cd -ing в этот каталог, а затем do make ARCH=arm или что-то в этом роде, чтобы скомпилировать ваш модуль /драйвер.

ответил Diederik de Haas 5 SatEurope/Moscow2015-12-05T06:24:44+03:00Europe/Moscow12bEurope/MoscowSat, 05 Dec 2015 06:24:44 +0300 2015, 06:24:44
0

Я хотел скомпилировать модуль /драйвер ядра для RPI2. Я выполнил инструкции с этой страницы, чтобы построить ядро ​​и соответствующие «Module.symvers».

http: //lostindetails. ком /блог /запись /Компиляция-а-ядро-модуль-для-малина-пи-2

Наконец, я использовал эту команду для создания моего модуля:

export ARCH=arm
export CROSS_COMPILE=/home/dev/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin/arm-bcm2708-linux-gnueabi-
make KERNELDIR=/home/dev/linux

Файл make модуля:

obj-m := xr_usb_serial_common.o

#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
KERNELDIR ?= /home/dev/linux
PWD       := $(shell pwd)

EXTRA_CFLAGS    := -DDEBUG=0

all:
    $(MAKE) -C $(KERNELDIR) M=$(PWD)

modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions vtty

Это сработало для меня!

ответил ssinfod 6 +03002015-10-06T06:33:57+03:00312015bEurope/MoscowTue, 06 Oct 2015 06:33:57 +0300 2015, 06:33:57

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132