У меня есть плата OLinuXino. Я загрузил файл img ArchLinux (ArchLinuxARM-2013.02-olinuxino-rootfs.img) и записал его на SD-карту с помощью dd и загрузил плату с помощью карты. Я подключил плату к Интернету с помощью Ethernet, установил gcc и сделал на нем с помощью pacman. Я смог построить программу пользовательского пространства для платы на плате.
В образе SD-карты ArchLinux уже был каталог заголовков ядра в rootfs (/lib/modules/linux-3.7.2-2-ARCH/build). Так что я смог построить загружаемые модули ядра для платы и на самой плате.
У меня есть компьютер для разработки Ubuntu 12.04.1. Я установил на него Sourcery CodeBench Lite для ARM GNU / Linux (arm-2012.09-64-arm-none-linux-gnueabi.bin). Я могу кросс-компилировать программы пользовательского пространства для OLinuXino на этом ПК разработки, передавать их на плату через SFTP и запускать на плате (используя консоль через последовательный порт ttyAMA0).
Теперь я хочу кросс-компиляцию модулей ядра для платы OLinuXino. Я сделал это ранее для другой платы imx233 пользовательской сборки - в этом случае я настроил систему сборки ядра (LTIB), чтобы оставить исходные коды ядра и rootfs нетронутыми после сборки образа. Таким образом, я смог указать каталог сборки заголовков ядра для кросс-компиляции модуля ядра, и это сработало.
На этот раз для OLinuXino у меня нет источников сборки, поэтому я скопировал rootfs (используя cp -dR) на свой ПК с Ubuntu и попытался перекрестно скомпилировать модуль ядра hello world, указав каталог заголовков ядра как / lib / modules / linux- 3.7.2-2-ARCH / build и выдает следующую ошибку:
anurag@anurag-VirtualBox:~/HelloKS$ make
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -C /mnt/ArchOL/lib/modules/3.7.2-2- ARCH/build M=/home/anurag/HelloKS modules
make[1]: Entering directory `/mnt/ArchOL/usr/src/linux-3.7.2-2-ARCH'
CC [M] /home/anurag/HelloKS/khello.o
/bin/sh: scripts/basic/fixdep: cannot execute binary file
make[2]: *** [/home/anurag/HelloKS/khello.o] Error 126
make[1]: *** [_module_/home/anurag/HelloKS] Error 2
make[1]: Leaving directory `/mnt/ArchOL/usr/src/linux-3.7.2-2-ARCH'
make: *** [all] Error 2
Бинарный файл fixdep в папке скриптов был предварительно скомпилирован для ARM, поэтому я удалил его, перекомпилировал для x86 и поместил туда. Когда я снова попробовал кросс-компиляцию модуля ядра, возникла аналогичная ошибка с жалобой на другой исполняемый файл в папке скриптов (на этот раз modpost).
Мой вопрос в том, как я могу заменить эти двоичные файлы arm в папке kernel-header / build на версию x86? есть ли сценарий в папке сборки для этого? Могу ли я заменить папку сценариев в скопированном ArchLinux на папку сценариев из папки сборки модуля ядра Ubuntu? Или я могу изменить make-файл модулей ядра, чтобы указать сценарию сборки перестроить двоичные файлы в папке сценариев, или использовать другую папку сценариев для этого двоичного файла (я бы указал) путь к папке сценариев ubuntu в папке заголовков ядра? Или я ошибаюсь, и есть лучший способ настроить кросс-компиляцию для платы и настройки, которые у меня есть?
PS. К вашему сведению: кросс-компилятор использует libc 2.16, а в ArchLinux img для OLinuXino есть libc 2.17.
.config
, используйтеmake distclean
в скопированном каталоге и затем скомпилируйте ядро на ПК. После этого все двоичные файлы должны быть правильно настроены. - person artless noise   schedule 05.04.2013scripts
хоста (через mount --bind), чтобы скомпилировать исходный код, но потом у меня возникла странная ошибка сmodpost
:FATAL: section header offset=11258999068426292 in file '/ldata/DATA/src/rtl8192eu-linux-driver/8192eu.o' is bigger than filesize=1100031
- person lilydjwg   schedule 11.09.2015