LinuxForum.Fans
Тема

Сборка и компиляция ядра

Автор: MONSTER-XAKER 44 сообщений 7186 просмотров
#178759
MONSTER-XAKER написал:
Так вот никак не пойму, неправильно собранное ядрышко убивает проц или нулевой загрузчик карёжит.

Вообще-то это очень сильно зависит от конкретного девайса. Некоторые можно и физически поломать прошивкой (если, например, температура и частота процессора программно управляются). А некоторые девайсы требуют работоспособного ядра для перепрошивки. То-есть, если прошить неработоспособным ядром, то все железки останутся целы, но вот в очередной раз прошивать драгоценную приблуду придется уже на программаторе, а не по сериал-порту.

#178761

Хорошо, не буду докучать с Windows. Начинаю изучение Linux.

#178772

bobr, прошивается она через USB порт и как мне кажется определяется она в системе за счёт RedBoot.
Тоесть битый RedBoot и придётся перезаписывать его напрямую в NAND??? :O
---------------------------------------
Кстати ещё один вопрос, можно ли запустить Linux из родного ядра? (в Dingoo кажется так DOSBOX запускали)
У нас есть небольшой SDK для неё и как говорят люди они спокойно собирают программы из исходников (компилируют в *BIN)

#178810
MONSTER-XAKER написал:
прошивается она через USB порт

который работает в качестве сериал-порта.

MONSTER-XAKER написал:
Тоесть битый RedBoot и придётся перезаписывать его напрямую в NAND??? :O

Не знаю. Но возможно. Стоит погуглить на тему "такая-то_консолька don't boot"

MONSTER-XAKER написал:
Кстати ещё один вопрос, можно ли запустить Linux из родного ядра?

Скорее всего можно. Ведь родное ядро - тоже линукс. (ведь линукс?)

#178816

Скорее всего можно. Ведь родное ядро - тоже линукс. (ведь линукс?)

Если арха ARM то ядро конечноже по структуре схожа с линуксом.
Родная ось вроде мало ресурсов кушает от проца и ОЗУ значит линь будет работать норм smile
Тогда остаётся несколько вопросов:
-Какой дистрибутив брать? (чтоб мало ресурсов от системы кушал и по функционалу не отличался от полноценного линя)
-Если есть SDK то как его партировать? (я нуб в этих делах)
-Как я читал то копиляция это объединение исходных (*C ) фалов в один файл. С помощью какой тулзы и как их объеденить? (Есть exe-шник который превращяет откомпилированный файл в понятный рапу *BIN)

Есть один ньюанс: если люди говорят правду то наша ось берёт *BIN файлы не больше 8-ми Мбайт :(

Вот SDK: http://www.turbobit.net/1q5wvsdgx8fx.html

Ну или хотелось бы партировать DOSBOX для эмуляции x86 (поэксперементировать, побаловаться :D )

#178907

MONSTER-XAKER, Уж не сочтите за "взгляд сверху", но похоже вам стоит подучить матчасть. Если вы с трудом представляете себе, что такое компиляция, скорее всего, портирование ОСи - задача не для вас.
Но раз уж вам интересно, то тулза для компилирования С-файлов - gcc
Да, и еще: "ехе-шники" в Виндоусе. Во всех остальных ОС просто "исполняемые файлы".

#178914
MONSTER-XAKER написал:
-Как я читал то копиляция это объединение исходных (*C ) фалов в один файл. С помощью какой тулзы и как их объеденить? (Есть exe-шник который превращяет откомпилированный файл в понятный рапу *BIN)

1) BIN'ов не бывает. Есть ELF'ы
2) есть утилита gcc, она делает из *.c -> ELF
3) если *.c много, то gcc работает дооолгоооо. Потому делают как: из каждого *.с делают полуфабрикат *.о, а потом, тем-же gcc объединяют *.o -> ELF (линквка называется). Когда программер меняет один с-файл, нет нужды переделывать все о-полуфабрикаты. Следит за этим утилита make.

MONSTER-XAKER написал:
Есть один ньюанс: если люди говорят правду то наша ось берёт *BIN файлы не больше 8-ми Мбайт

вы сможете ТАКОЕ количество кода написать? вы собрались жить вечно? oO

#178916
MONSTER-XAKER написал:
objdump

Скачал для Windows, как им пользоваться?

поставить семёрочку же!

ЗЫЖ вы не ошиблись форумом?

#178980
bobr написал:
Да, и еще: "ехе-шники" в Виндоусе. Во всех остальных ОС просто "исполняемые файлы".

исполняемые файлы->executable files->executable->экзеки или экзешшники... ИМХО вполне допустимо, кроме того "исполняемый файл" звучит очень официально и очень долго пишется...

drBatty написал:
вы сможете ТАКОЕ количество кода написать?

я видел исполняемые файлы на 273Мб. (правда при компиляции с -Os и без -g они сокращались до 2,5-й :lol: )

MONSTER-XAKER написал:
-Какой дистрибутив брать?

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

MONSTER-XAKER написал:

я уже вроде гворил, какой это замечательный хостинг...

#178985

BIN'ов не бывает. Есть ELF'ы

Ну точнее приписывает к эльфам пару строчек к заголовку и в конец файла (рап требует) и меняет расширение на BIN

есть утилита gcc, она делает из *.c -> ELF

За самый простейший пример взял hello-world.c (самый известный пример на "C" языке)
Указав рабочую директорию с заранее подготовленным hello-world.c и hello-world.o прописываю в терминале:

gcc -с hello-world.c

В результате вылетает сообщение:

no input files

Что я не так делаю :(

#178996
MONSTER-XAKER написал:
Что я не так делаю sad

Читаешь вестимо :lol: ...

text

man gcc

[console]
user@host:~/ПроектыС/hello-word$ gcc hello-word.c -o hello-word.exe
user@host:~/ПроектыС/hello-word$ ./hello-word.exe
Hello world!
[/console]

gcc --help написал:

Синтаксис: gcc [ключи] файл...
Ключи:
-pass-exit-codes Выход с максимальным кодом возврата от прохода
--help Вывести этот текст
--target-help Показать специфические ключи целевой платформы
--help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
Показать специфические ключи командной строки
(Задайте '-v --help' для вывода ключей всех проходов компиляции)
--version Display compiler version information
-dumpspecs Показать встроенные спецификации
-dumpversion Показать версию компилятора
-dumpmachine Показать имя целевой платформы
-print-search-dirs Показать каталоги поиска
-print-libgcc-file-name Показать имя run-time библиотеки компилятора
-print-file-name=<биб> Показать полное маршрутное имя библиотеки <биб>
-print-prog-name=<прог> Показать полное имя компоненты компилятора <прог>
-print-multi-directory Показать корневой каталог с версиями libgcc
-print-multi-lib Показать соответствие между ключами и каталогами
поиска библиотек
-print-multi-os-directory Показать относительный маршрут к библиотекам операционной системы
-print-sysroot Display the target libraries directory
-print-sysroot-headers-suffix Вывести суффикс sysroot, используемый для поиска заголовочных файлов
-Wa,<ключи> Передать <ключи>, разделённые запятыми, ассемблеру
-Wp,<ключи> Передать <ключи>, разделённые запятыми, препроцессору
-Wl,<ключи> Передать <ключи>, разделённые запятыми, компоновщику
-Xassembler <арг> Передать <арг> ассемблеру
-Xpreprocessor <арг> Передать <арг> препроцессору
-Xlinker <арг> Передать <арг> компоновщику
-combine Передать компилятору несколько исходных файлов вместе
-save-temps Не удалять промежуточные файлы
-save-temps=<arg> Do not delete intermediate files
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components
-pipe Передавать промежуточные данные по конвейеру
-time Включить хронометраж проходов
-specs=<файл> Использовать <файл> спецификаций вместо
внутренних спецификаций компилятора
-std=<стандарт> Считать, что исходный код следует <стандарту>
--sysroot=<каталог> Использовать <каталог> как головной каталог для заголовков
и библиотек
-B <каталог> добавить <каталог> к списку поиска программ
компилятора
-b <машина> Генерировать код для указанной <машины>,
если возможно
-V <версия> Использовать <версию> gcc, если она установлена
-v Отображать команды, запускаемые компилятором
-### Как -v, но параметры берутся в кавычки и команды не запускаются
-E Только препроцессирование - без компиляции, ассемблирования, компоновки
-S Только компиляция - без ассемблирования и компоновки
-c Компиляция и ассемблирование, без компоновки
-o <файл> Записать результат в <файл>
-x <язык> Задать язык последующих входных файлов.
<язык> может быть: c c++ assembler none
'none' означает, что далее язык нужно
определять по расширению имени файла

Ключи, начинающиеся с -g, -f, -m, -O, -W, или --param автоматически
передаются процессам, запускаемым gcc. Для передачи ключей этим процессам, используйте ключи -W<буква>.

Инструкции по составлению и отправке отчётов об ошибках см. на:
<http://gcc.gnu.org/bugs.html>.
#178999
Fat-Zer написал:
я видел исполняемые файлы на 273Мб

дык напишите в коде что-то вроде

text
static int m[1048576];

и будет у вас 4х метровый файл.
кстати. я тут цеплял к elf пару гигов - работает wink

MONSTER-XAKER написал:
gcc hello-world.c -o hello-world.o

В результате вылетает сообщение:

"gcc: no input files" или "gcc: no such file of directory"

Что я не так делаю

всё.

#179059

Огромная благодарность вашему форуму и тем кто мне помогает!
Хоть я и нуб в среде Linux и лиш начинаю осваивать терминал но я наконец научился компилировать программы и абривиатура GCC меня больше не пугает smile

Предположим что я умею компилировать простые исходники из "Cи" в исполняемый "О", умею сращивать несколько "о" файлов в один,
но я нимагу понять почему они не запускаются на моей консольке?

Вроде делаю как положено:
Есть файлик который приписывает к ELF-у в заголовок и в конец пару строк для инициализации файла ядром (уже говорилось выше)
и задаёт новое расширение BIN (в среде приставки эти бины направляются на переработку напрямик процессору, как я понял)
В терминале выглядит так:

mkbing.exe <путь к файлу "о"> <путь к чистому файлу "bin">
Программа выводит подпись создателя и сообщяет что записала в файл bin XXXX байт данных.

По идее приставка должна проглотить и слёту проживать файл, но после запуска остаётся гореть лиш чёрный экран (спасает лиш reset)
Может я поспешил с запуском ELF файла? Может он ещё сыроват чтоб проц исполнил его?

#179064
MONSTER-XAKER написал:
абривиатура GCC меня больше не пугает

за то меня пугает: здесь вам не тут, БОЛЬШИМИ буквами писать не надо.

MONSTER-XAKER написал:
в исполняемый "О"

*.o это полуфабрикаты.
вы фарш кушали? и как?

MONSTER-XAKER написал:
Может он ещё сыроват чтоб проц исполнил его?

что плюётесь? ага. фарш ещё и жарить надо...

#179065

А как его пожарить? И главное чем??? oO

#179068
MONSTER-XAKER написал:
А как его пожарить? И главное чем???

facepalm
вы читать умеете?

drBatty написал:
1) BIN'ов не бывает. Есть ELF'ы
2) есть утилита gcc, она делает из *.c -> ELF
3) если *.c много, то gcc работает дооолгоооо. Потому делают как: из каждого *.с делают полуфабрикат *.о, а потом, тем-же gcc объединяют *.o -> ELF (линквка называется). Когда программер меняет один с-файл, нет нужды переделывать все о-полуфабрикаты. Следит за этим утилита make.

ЗЫЖ на самом деле gcc вызывает ld, но вам пока рановато. Впрочем... Скрывать я не буду:

Показать
LD(1) GNU Development Tools LD(1)

NAME
ld - The GNU linker

SYNOPSIS
ld [options] objfile ...

DESCRIPTION
ld combines a number of object and archive files, relocates their data and ties up symbol references.
Usually the last step in compiling a program is to run ld.

ld accepts Linker Command Language files written in a superset of AT&T's Link Editor Command Language
syntax, to provide explicit and total control over the linking process.

This man page does not describe the command language; see the ld entry in "info" for full details on the
command language and on other aspects of the GNU linker.

This version of ld uses the general purpose BFD libraries to operate on object files. This allows ld to
read, combine, and write object files in many different formats---for example, COFF or "a.out". Different
formats may be linked together to produce any available kind of object file.

Aside from its flexibility, the GNU linker is more helpful than other linkers in providing diagnostic
information. Many linkers abandon execution immediately upon encountering an error; whenever possible, ld
continues executing, allowing you to identify other errors (or, in some cases, to get an output file in
spite of the error).

The GNU linker ld is meant to cover a broad range of situations, and to be as compatible as possible with
other linkers. As a result, you have many choices to control its behavior.

OPTIONS
The linker supports a plethora of command-line options, but in actual practice few of them are used in any
particular context. For instance, a frequent use of ld is to link standard Unix object files on a
standard, supported Unix system. On such a system, to link a file "hello.o":

ld -o <output> /lib/crt0.o hello.o -lc

hint: в man pages ещё очень много интересного и полезного...

#179150

Ну пропустил hello.o через ld
ld -o hello.1 hello.o -lc

Структура чуть изменилась но на приставке всё ещё чёрный экран. Что дальше делать?

#179160
MONSTER-XAKER написал:
Структура чуть изменилась но на приставке всё ещё чёрный экран. Что дальше делать?

голову включить. Вы не знаете, что значит слово link? откройте словарь.

ЗЫЖ 2All, это наверное самы забавный форум в рунете. :lol:

#179164

Я только учусь компилировать и запускать программы на устройствах ARM

Войдите или зарегистрируйтесь, чтобы ответить.