Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: make config
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
juvf
собираю софт мэйком
make xconfig (или make minuconfig или в конце концов make config)
make all

make all спотыкается. ему нужен кросскомпилятор. нужно так

make CROSS_COMPILE=arm-none-eabi- all

добавил параметр CROSS_COMPILE в Kconfig. Один раз в менюшке указал "arm-none-eabi-" и забыл. Это я так думал, что забыл. Параметр CROSS_COMPILE в make xconfig появился. задал. но при сборке опять make пытается собрать компилятором gcc вместо arm-none-eabi-gcc. Как мэйку передать из конфигурации этот параметр?
Jury093
Цитата(juvf @ Nov 10 2016, 06:25) *
добавил параметр CROSS_COMPILE в Kconfig. Один раз в менюшке указал "arm-none-eabi-" и забыл. Это я так думал, что забыл. Параметр CROSS_COMPILE в make xconfig появился. задал. но при сборке опять make пытается собрать компилятором gcc вместо arm-none-eabi-gcc. Как мэйку передать из конфигурации этот параметр?

пара вариантов
1. в файле настроек шелла (для bash например ~/.bashrc) пропишите
Код
export CROSS_COMPILE=arm-none-eabi-

потом выйдите из терминалки или запустите новую, чтобы выполнились настройки
2. в своем скрипте напишите строку:
Код
GCC=arm-none-eabi-

и далее для make указывайте
Код
make CROSS_COMPILE=$GCC


можно вообще ничего не прописывать, запустили терминалку, дали команду
Код
export CROSS_COMPILE=arm-none-eabi-

и пока не вышли, переменная будет работать..
Эдди
Я для raspberry вот таким скриптом ведро компелял:
Код
#!/bin/bash
make -j4 ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- Image modules dtbs
mkdir Modules
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-none-eabi- INSTALL_MOD_PATH=Modules modules_install

А потом перенес на флеху.
juvf
вопрос не в том, как мейку из шела и всякими экспортами передать CROSS_COMPILE. вопрос в том, как в конфигурацию включить CROSS_COMPILE?

на пальцах....
качаем исходгники uсLinux. выполняем две команды
make menuconfig
make

получаем бинарь.

при конфигурации указываем, что кросскомпилятор есть arm-none-eabi-. потом маке подхватывает эту переменную и вместо gcc использует arm-none-eabi-gcc. потом можно ковырять сырци и многократно на разных компах делать сборку. кросскомпилятор всегда подхватиться. красиво? красиво!

далее.... качаем u-boot. теже яйца команды
make menuconfig
make

но тут авторы Kconfig уже не воткнули кроскомпилятор. приходится бубном писать скрипты или делать всякие экспорты. хотелось бы также в make menuconfig есдиножды указать этот кросскомпилятор и чтоб маке all его подхватил без дополнительных указаний. Я в Kconfig архитектура процессора добавил переменную CROSS_COMPILE. Теперь при вызове make menuconfig? там где выберается таргет, боард, фэмели... можно указать кросскомпилятор. Но при выполнении make all почемуто маке не знает про секс CROSS_COMPILE

по мимо CROSS_COMPILE я бы в Kconfig воткнул бы -j8 и ещё чего нибудь. Хотелось бы научиться делать красивые конфиги для make-а.
psL
Цитата(juvf @ Nov 10 2016, 18:34) *
как в конфигурацию включить CROSS_COMPILE?

Как-то так: https://patchwork.kernel.org/patch/69210/
Переменные в Kconfig имеют префикс CONFIG_
Эдди
Еще один вариант — все делать внутри армовского чрута при помощи qemu. Я так разворачивал генту на raspberry (т.к. она слишком тормозная, чтобы непосредственно на ней компелять).
Вот таким скриптом у меня монтируются разделы "малинки":
Код
#!/bin/bash
CHRT="ROOT"
if [ $# != 1 ]; then
    echo "usage: $0 /dev/sdb"
    exit 1
fi

function mnt(){
    mount --rbind $1 ${CHRT}$1
}
[ -f /proc/sys/fs/binfmt_misc/arm ] || echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\x
ff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register
mount ${1}2 ${CHRT}
mv ${CHRT}/usr/bin/qemu-arm-static_ ${CHRT}/usr/bin/qemu-arm-static
mount ${1}1 ${CHRT}/boot
mount -o bind linux ${CHRT}/usr/src/linux
mnt /dev
mnt /sys
mount -t proc none ${CHRT}/proc
mnt /run
mount -o bind portage ${CHRT}/usr/portage
chroot ${CHRT}

И скрипт для размонтирования:
Код
#!/bin/bash
CHRT="ROOT"
mv ${CHRT}/usr/bin/qemu-arm-static ${CHRT}/usr/bin/qemu-arm-static_
umount ${CHRT}/boot
umount ${CHRT}/usr/portage/
umount ${CHRT}/usr/src/linux
umount ${CHRT}/proc
umount ${CHRT}/run
umount ${CHRT}/sys
umount ${CHRT}/dev/pts
umount ${CHRT}/dev/shm
umount ${CHRT}/dev
umount ${CHRT}

Главное - не забыть /usr/bin/qemu-arm-static, иначе на настоящем железе система не загрузится.
juvf
Цитата(Эдди @ Nov 11 2016, 10:27) *
а паи (орандж пай, банана пай, расбери пай) можно на низком уровне пощюпать? На али есть орандж пай, фоты.... не вижу разъема для подключения отладчика. У процессора я так понял нет внутреннего флеша. Т.е. страт либо с тфт, либо с усб, либо с лан. От куда старт программы и как выбирается? можно ли подебажить подобный проц/комп начиная с ресета?
juvf
Цитата(psL @ Nov 11 2016, 01:52) *
Как-то так: https://patchwork.kernel.org/patch/69210/
Переменные в Kconfig имеют префикс CONFIG_
Не понятно, как так? Ещё понадобилось включить в конфигурацию параметры. Кто нибудь создавал свои конфиги? Как в них добавлять параметры и как их передавать в
makefile?
Эдди
Цитата(juvf @ Nov 11 2016, 11:16) *
можно на низком уровне пощюпать?

Да, если в настройке загрузки указано дублировать tty на последовательный порт. Я так отлаживал загрузку "малинки".
juvf
Цитата(Эдди @ Nov 15 2016, 00:12) *
Да, если в настройке загрузки указано дублировать tty на последовательный порт. Я так отлаживал загрузку "малинки".
ну вот после ресета программа процессор (обычно) страртует с адреса 0х00. там вектор прерывания. по вектору прерывания обычно уходим в startup.s. Далее идет инициализация тактового генератора, инициализация таблицы векторов прерывания, инициализация сдрам, ног GPIO и т.д. Низкоуровневая инициализация.... до инициализации UART ещё далеко. тем более до /drv/tty. Ещё нет линукса... только u-boot начал работать. как это дебажить? как по шагам в таких процессорах выполнять программу?
Эдди
Цитата(juvf @ Nov 15 2016, 05:23) *
только u-boot начал работать. как это дебажить? как по шагам в таких процессорах выполнять программу?

Только через JTAG, если он выведен, конечно.
А смысл на столь ранних этапах дебажить? Разве только если пытаться написать свой собственный загрузчик...
juvf
Цитата(Эдди @ Nov 15 2016, 10:55) *
А смысл на столь ранних этапах дебажить? Разве только если пытаться написать свой собственный загрузчик...
я это и пытаюсь сделать. нужно сделать свою железку, со своими блекджеком и шлю.... своей мэмори мэп, со своей переферией, залить туда свой загрузчик, который зальёт свой линукс. Но для начало можно на готовых фруктах потренироваться, если у них конечно есть аппаратный отладчик.
Эдди
В табличке "I/O interfaces and ports" можно выбрать одноплатник с распаянным JTAG.
juvf
Цитата(Эдди @ Nov 15 2016, 12:30) *
В табличке "I/O interfaces and ports" можно выбрать одноплатник с распаянным JTAG.
малины с джитагом нет ((.... чтонить выберу. Спасибо.
R6L-025
Может быть Вам будут ближе системы на кристалле? Вроде платки DE0-SoC-nano. Там код зашитый в проц грузит прелоадер, и начиная с этого момента данные выводятся на последовательную консоль. После чего грузится сам u-boot
Tarbal
Цитата(juvf @ Nov 15 2016, 12:59) *
малины с джитагом нет ((.... чтонить выберу. Спасибо.


Да нафига вам джитаг. Мне был нужен только когда я в начальном загрузчике отлаживал опработчик иксепшна (по-русски наверное исключения, но не знаю термина). Все остальное можно пощупать и без него. Уж столько инструментов есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.