ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: Сборка ядра  (Прочитано 20690 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Сборка ядра
« : 26 Августа, 2009, 16:14:46 »

Не надо под Win, поставьте виртуальную машину с Debian или Ubuntu и собирайте в них.
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Сборка ядра
« Ответ #1 : 27 Августа, 2009, 17:41:21 »

У вас старая сборка... в более её перезапускают.

"Продолжаем разговор" (с) Карлсон.

Значит теперь вопрос по Линксу ( может это офтоп, конечно, но это в рамках вопроса про железку, да и не хочется темы плодить). Виртуальную машину с Ubuntu я поставил. Инструментарий тоже arm-gcc-4.1.1-920t (не сам, помогли знатоки). Теперь решил пойти прямо по инструкции, скачал с сайта http://www.kernel.org/ дистрибутив ядра (linux-2.6.20.4), пропатчил. Пока, вроде Все хорошо.
 
Но дальше, при окончательной сборке ( 'make' ) возникли проблемы.

Во-первых - в каталоге с установленным инструментом несколько компиляторов:

arm/4.1.1-920t/bin/arm-linux-gcc
arm/4.1.1-920t/arm-linux/bin/gcc

Указал путь к обоим, настроил переменную 

export CROSS_COMPILE=arm-linux- ( т.е для запуска файла 'arm-linux-gcc' )

сборка пошла, но остановилась на ошибке:

  CC      init/initramfs.o
  CC      init/calibrate.o
  LD      init/built-in.o
  GEN     usr/initramfs_data.cpio.gz
/home/ale/Tion/linux-kernel/linux-2.6.20.4/scripts/gen_initramfs_list.sh: line 279: usr/gen_init_cpio: не могу запустить бинарный файл
make[1]: *** [usr/initramfs_data.cpio.gz] Ошибка 126
make: *** [usr] Ошибка 2

и все. Я опять сел. Вроде в указанном каталоге файл "gen_init_cpio" имеется. Однако сборка не заканчивается. Что делать?







« Последнее редактирование: 27 Августа, 2009, 20:52:39 от Prilad »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Сборка ядра
« Ответ #2 : 27 Августа, 2009, 21:05:07 »

Добавлять пусть к arm/4.1.1-920t/arm-linux/bin/gcc не нужно. gcc должен вызвываться обычный (не cross). Уберите это из PATH.

Конфигурацию делали (*_defconfig)?

PS. Linux пишеться как Linux.
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #3 : 27 Августа, 2009, 21:25:07 »


Добавлять пусть к arm/4.1.1-920t/arm-linux/bin/gcc не нужно. gcc должен вызвываться обычный (не cross). Уберите это из PATH.


Если не указывать путь к gcc, а только задать переменную
 
export ARCH=arm

то результатом команды make является:

ale@ale-desktop$ make
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
  SYMLINK include/asm-arm/arch -> include/asm-arm/arch-ep93xx
make[1]: `include/asm-arm/mach-types.h' не требует обновления.
  CHK     include/linux/utsrelease.h
  CC      arch/arm/kernel/asm-offsets.s
cc1: ошибка: некорректный ключ "-mlittle-endian"
cc1: ошибка: некорректный ключ "-mapcs"
cc1: ошибка: некорректный ключ "-mno-sched-prolog"
cc1: ошибка: некорректный ключ "-mabi=apcs-gnu"
arch/arm/kernel/asm-offsets.c:1: ошибка: некорректное значение (armv4t) для ключа -march
arch/arm/kernel/asm-offsets.c:1: ошибка: некорректное значение (arm9tdmi) для ключа -mtune=
make[1]: *** [arch/arm/kernel/asm-offsets.s] Ошибка 1
make: *** [prepare0] Ошибка 2



Конфигурацию делали (*_defconfig)?


Да, делал.
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #4 : 27 Августа, 2009, 21:34:00 »

Кстати, а на сайте документации вроде явно указано, что GCC должен быть arm-овский. Или из нижеследующегл это не следует?

Цитировать
Сборка ядра
   1.
      Установите переменные окружения
      export ARCH=arm
      export CROSS_COMPILE=arm-linux-gnu-
      где arm-linux-gnu- — префикс используемого инструментария

Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Сборка ядра
« Ответ #5 : 27 Августа, 2009, 23:26:29 »

1. К arm-linux-gcc путь указывать
2. К gcc (из директории arm) -- не указывать
3. CROSS_COMPILE задавать как написано

При сборке ядра собираются программы для работы на host'е. Это делается gcc (без префиксов).
После чего ядро собирается для указанной архитектуры (ARCH) указанным cross-компилятором (CROSS_COMPILE) arm-linux-gcc.
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #6 : 28 Августа, 2009, 14:52:07 »

1. К arm-linux-gcc путь указывать
2. К gcc (из директории arm) -- не указывать
3. CROSS_COMPILE задавать как написано

При сборке ядра собираются программы для работы на host'е. Это делается gcc (без префиксов).
После чего ядро собирается для указанной архитектуры (ARCH) указанным cross-компилятором (CROSS_COMPILE) arm-linux-gcc.


Все сделал, как Вы указали. Указал путь к arm-linux-gcc. Иначе совсем его не находила система. 
Указал

    export CROSS_COMPILE=arm-linux-

однако все равно в ответ на команду make  высыпались ошибки

ale@ale-desktop$ make
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' не требует обновления.
  CHK     include/linux/utsrelease.h
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/asm-arm/asm-offsets.h
  HOSTCC  scripts/mod/sumversion.o
scripts/mod/sumversion.c: В функции ‘get_src_version’:
scripts/mod/sumversion.c:384: ошибка: ‘PATH_MAX’ не описан (первое использование в этой функции)
scripts/mod/sumversion.c:384: ошибка: (Сообщение о неописанном идентификаторе выдается один раз
scripts/mod/sumversion.c:384: ошибка: для каждой функции, в которой он используется.)
scripts/mod/sumversion.c:384: предупреждение: неиспользуемая переменная ‘filelist’
make[2]: *** [scripts/mod/sumversion.o] Ошибка 1
make[1]: *** [scripts/mod] Ошибка 2
make: *** [scripts] Ошибка 2

Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: Сборка ядра
« Ответ #7 : 28 Августа, 2009, 15:25:19 »

открой файл kernel/linux-2.6.20.4/scripts/mod/sumversion.c в каком нибудь редакторе и допиши
#define PATH_MAX 1024
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Сборка ядра
« Ответ #8 : 28 Августа, 2009, 15:29:48 »

Вы собираете для 2.6.20.4!
Последние 2.6.20.21, попробуйте их.

PS. Ошбка исправляется добавлением строки
#include <limits.h>
в scripts/mod/sumversion.c
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #9 : 29 Августа, 2009, 11:31:29 »

Вы собираете для 2.6.20.4!
Последние 2.6.20.21, попробуйте их.

PS. Ошбка исправляется добавлением строки
#include <limits.h>
в scripts/mod/sumversion.c


Да, я собираю 2.6.20.4, потому что у меня в машинке стоит такая сборка. И мне было принципиально важно понять, смогу ли я пройти путь сборки и загрузки ядра в совершенно незнакомом пока для меня Linux-е.
Наконец добился окончания сборки (благодаря вашим советам). Но!

Вопрос немного не по теме - как сохранить в Ubuntu  переменные, которые необходимы для сборки, такие как export PATH=... ,  export ARCH=... .
Мне при каждом запуске системы приходится вручную прописывать эти команды, а хотелось бы, что бы они прописывались автоматом при старте Ubuntu.

Второй вопрос уже ближе к теме. Я, конечно, сейчас попробую собрать по умолчанию версию 2.6.20.21. Вопрос - какой (какие) файл (файлы) является РЕЗУЛЬТАТОМ сборки? Сейчас у меня в каталоге kernel-linux в результате сборки появился бинарный файл vmlinux, размером 4.4 Мб. Имеенно он является образом системы, с которым можно работать дальше (прикручивать u-boot) ?

Третий вопрос - включена ли в сборку ядра оболочка Opie? Или ее надо прикручивать как модуль?

Я, конечно, продолжу копать. Задача у меня простая - собрать образ для тион-про2 с корневой файловой системой на каком нибудь носителе, а не на рам-диске. Лучше всего пока на внутреннем флеше. И с подключенным по умолчанию тачскрином. Учитывая "сложности" с которыми я столкнулся на этапе тестовой сборки ядра.. это будет совсем не просто. Может подскажете последовательность действий от и до?. Документацию в сети я читаю, но, есть много тонкостей. ???
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #10 : 29 Августа, 2009, 12:05:24 »

Один вопрос снимается, образ ядра я нашел. Это zImage, как я понял
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Сборка ядра
« Ответ #11 : 29 Августа, 2009, 12:07:08 »

> Вопрос немного не по теме - как сохранить в Ubuntu  переменные, которые необходимы для сборки, такие как export PATH=... ,
> export ARCH=... .
> Мне при каждом запуске системы приходится вручную прописывать эти команды, а хотелось бы, что бы они прописывались
> автоматом при старте Ubuntu.

Это никоим образом не имеет отношения к Ubuntu (как к дистрибутиву, чем он является).
Это задача того интерпретатора (shell'a) которым вы пользуетесь (они разнообразны, но у вас сейчас bash).
Поэтому то что вы хотите можно сделать (1) через файл инициализации .bashrc (в вашей домашней директории, см.
значение переменной окружения $HOME). Но так про них быстро забываешь и неожиданно вспоминаешь при сборке чего-то
для host'а. Или же (2) оформить желаемые команды в отдельный файл (т.н. скрипт или сценарий) и выполнять его перед
тем как что-либо собрать для target'а. Или (3) пользоваться системами сборки: Buildroot (Crater), PTXdist (в этом случае
сложность только в их настройке под свои задачи, но воспроизводимость результата значительно лучше).


> Второй вопрос уже ближе к теме. Я, конечно, сейчас попробую собрать по умолчанию версию 2.6.20.21. Вопрос - какой (какие)
> файл (файлы) является РЕЗУЛЬТАТОМ сборки? Сейчас у меня в каталоге kernel-linux в результате сборки появился бинарный файл
> vmlinux, размером 4.4 Мб. Имеенно он является образом системы, с которым можно работать дальше (прикручивать u-boot) ?


Для U-Boot это отдельная история, см.
http://www.zao-zeo.ru/dokuwiki/doku.php/u-boot#образ


> Третий вопрос - включена ли в сборку ядра оболочка Opie? Или ее надо прикручивать как модуль?

Нет, ядро это только ядро. Opie -- это программы, библиотеки и пр. файлы.
Opie можно собрать с помощью Crater'а:
http://www.zao-zeo.ru/dokuwiki/doku.php/linux#различные_сборки_кфс

Ядро тоже можно собрать с помощью Crater'а.


> Задача у меня простая - собрать образ для тион-про2 с корневой файловой системой на каком нибудь носителе, а не на рам-диске.
> Лучше всего пока на внутреннем флеше. И с подключенным по умолчанию тачскрином. Учитывая "сложности" с которыми я
> столкнулся на этапе тестовой сборки ядра.. это будет совсем не просто. Может подскажете последовательность действий от и до?

Берёте
http://www.zao-zeo.ru/media/files/crater-1.0.0_svn747.tar.gz
и делаете как в
http://www.zao-zeo.ru/dokuwiki/doku.php/crater

Нужно отметить создание jffs2 файловой системы. И начать с конфигурацией _по_умолчанию_!
Потом разберётесь как образ ядра и ФС записать на плату.
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #12 : 29 Августа, 2009, 16:18:42 »

Йес. Ядро собрал crater-ом. Пришлось, правда, подправить файл "config.in", прописав там путь к установленному gcc, который ранее указывал на "3.6..."

config TOOLCHAIN_DIR
        string "Toolchain and header file location?"
        default "/usr/local/arm/4.1.1-920t"

В результате появилось по 2 файла в 2-х каталогах в "Images"

9312/
   ramdisk
   rootfs.jffs2

TION_PRO2/
  uImage
  zImage

Теперь разбираюсь с U-Boot
« Последнее редактирование: 29 Августа, 2009, 17:11:57 от Prilad »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Сборка ядра
« Ответ #13 : 29 Августа, 2009, 22:45:32 »

Config.in править нет необходимости
Записан

Prilad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 17
Re: Сборка ядра
« Ответ #14 : 30 Августа, 2009, 12:13:14 »

Config.in править нет необходимости


Возможно, но без этой правки процес сборки вылетал по ошибке.

Ладно, я решил воспользоваться советом http://www.zao-zeo.ru/dokuwiki/doku.php/linux#usb-flash и просто перенести КФС на флешку. Создал на ней ext2 раздел, подмонтировал ее в тион и скопировал "все" папки из раздела root рамдиска тиона. При копировании /sys и /proc возникли проблемы с ограничением доступа. Тогда я примонтировал образ рамдиска, созданный crater-ом, в Ubuntu и убедился, что изначально на рамдиске эти каталоги пустые. Сразу возник вопрос: - эти каталоги используются системой для оперативной работы? Значит их нельзя располагать на флешке, иначе будут жуткие тормоза.  А пока я оставил эти каталоги на флешке пустыми.

Перезапустил тион, остановился в U-Boot. Командой "$ setenv" поменял переменную bootargs, указав в ней root=/dev/sda1, и продолжил загрузку командой "$ boot".

Загрузка прошла, даже запустился терминал. И во тут появились станности. Opie так и не запустился, на терминале - жуткие тормоза (что я и предсказывал), а вот результат команды
/# ls -l
поверг меня в легкий шок - распечаталось содержимое рамдиска, а вовсе не моей флешки. Тогда я подмонтровал флешку, и убедился, что на ней каталоги /proc и /sys УЖЕ НЕ ПУСТЫЕ. т.е система именно их юзает для своих нужд, хотя корень указыавет на рам диск. (все это с жуткими задержками отклика тиона)

Короче - дурная голова рукам покоя не дает. Что я сделал не так?
Записан