LINUX.ORG.RU

сборка ядра 2.4.X в среде Linux 2.6.X ?


0

0

Пытаюсь разобраться как это делается
хочется собрать ядро, модули ядра, ветка 2.4.X
на дистрибутиве с компилятором: gcc version 4.1.X

смотрел LFS,

Помогите разобраться.

1.1. достаточно ли :
статическая сборка binutils host-компилятором
+ статическая сборка gcc - нужной версии,
используя собранный binutils
+ указать путь к CROSS_COMPILE ?

1.2. или нужно ёщё собирать :
glibc + пересборка целевых binutils целевым компилятором
пересборка компилятора под установленный glibc


как правильно ?
как по минимому ?

сделал как в 1.1 с использованием
binutils-2.20 и gcc-3.3.4
не работает

1.3 не совсем понимаю
сборка инструментов binutils, gcc должны быть cтатическими
или для ядра не обязательно ?
мне казалось что ядро самодостаточный код

----

2.1. gcc какой версии можно использовать
в README ядра указано: gcc-2.95.3
можно старше и как старше ?
можно использовать gcc-3.3.4 для сборки ядра 2.4.X ?

2.2. не получилось собрать gcc-2.95.3, для него нужен патч ?
не смог его найти.

2.3. не получилось собрать gcc-3.2.3, gcc-3.0
для них нужны патчи, не смог их найти

где искать или как поступить ?

какой версией gcc можно собирать ветку 2.4.X


2.4. нашёл патчи для gcc-3.3.4:
gcc-3.3.4-no_fixincludes-1.patch
gcc-3.3.4-linkonce-1.patch

с ними gcc-3.3.4 собирается как в пункте: 1.1,
но ядро не собирается :(

3.1. под определённый gcc нужны определённые binutils ?
посмотрел LFS - там определенные номера, но мне удалось
собрать только binutils-2.20
собирал их gcc-4.1.2 - на hoste

3.2. сборка binutils-X.XX зависит от того
каким компилятором собираем ?


4. установил binutils-2.20 сборка: static
установил gcc-3.3.4 сборка вроде: static
с учётом путей к установленным binutils

пробовал собирать ядро 2.4.X указав
$ export CROSS_COMPILE=/opt/tools/bin
директория куда установились : ar, as, cpp, gcc, ld, nm, ...

Ядро не собирается :(

....
In file included from
/bb/vv/linux-2.4.26/include/linux/unistd.h:9,
from init/main.c:17:
/bb/vv/linux-2.4.26/include/asm/unistd.h:375: warning: conflicting types for built-in function ‘_exit’
make: *** [init/main.o] Error 1
$

Не подскажите что неправильно делаю
в чём ошибка, как правильно нужно делать ?


только что прекрасно все собрала

ld -m elf_i386 -Ttext 0x100000 -e startup_32 -o bvmlinux head.o misc.o piggy.o
make[2]: Leaving directory `/var/tmp/linux-2.4.37.9/arch/i386/boot/compressed'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o tools/build tools/build.c -I/var/tmp/linux-2.4.37.9/include
objcopy -O binary -R .note -R .comment -S compressed/bvmlinux compressed/bvmlinux.out
tools/build -b bbootsect bsetup compressed/bvmlinux.out CURRENT > bzImage
Root device is (8, 1)
Boot sector 512 bytes.
Setup is 2523 bytes.
System is 1194 kB
warning: kernel is too big for standalone boot from floppy
make[1]: Leaving directory `/var/tmp/linux-2.4.37.9/arch/i386/boot'

real 0m39.762s
user 1m10.000s
sys 0m4.020s

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

текущее ядро
$uname -r
2.6.32.10-lu

binutils
$ld -v
GNU ld (/Meya Argenta/) 2.20.1


$gcc --version
gcc (GCC) 4.1.3 20080704 (Red Hat 4.1.2-27)

с 4.2 будут ошибки, так что берите 4.1

eglibc 2.11.1

для сборки потребовалась утилита /sbin/genksyms из modutils

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

А каким gcc собираете ядро 2.4 ?
gcc-3.4.6 или gcc-4.1.2 ?

у меня gcc version 4.1.2 не собирает ядро 2.4.26
поэтому попытался установить gcc тот который собирает

У Вас : ld, as, objcopy, objdump - используются те,
что по умолчанию на hoste установлены ?

CROSS_COMPILE - префикс, путь поиска gcc, as, ld
по умолчанию не определено берёт текуший что в PATH
я хотел определённую.


Если установлены 2 gcc разной версии то
как определяете каким gcc идёт сборка ядра ?


для gcc-3.4.6 нужны патчи ?
его можно просто собрать используя binutils host-системы ?

us23 ()
Ответ на: комментарий от us23

А каким gcc собираете ядро 2.4 ?
gcc-3.4.6 или gcc-4.1.2 ?


4.1.2-27 redhat собирает, только что собрала им, можете 3.4.6 попробовать, это последняя версия gcc 3

ld, as, objcopy, objdump - используются те,

что по умолчанию на hoste установлены ?

да, 2.20.1

CROSS_COMPILE - префикс, путь поиска gcc, as, ld

по умолчанию не определено берёт текуший что в PATH
я хотел определённую.

можете PATH переопределить перед сборкой

Если установлены 2 gcc разной версии то

как определяете каким gcc идёт сборка ядра ?

export PATH=/usr/local/gcc-4.1/bin:$PATH
вот так, берется первый найденый в PATH бинарник
Смотрите сами куда у вас что установлено


для gcc-3.4.6 нужны патчи ?


нет

его можно просто собрать используя binutils host-системы ?

да

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

у меня почти то-же самое

$ uname -r
2.6.21-1.3194.fc7

$ ld -v
GNU ld version 2.17.50.0.12-4 20070128

$ gcc -version
gcc: unrecognized option '-version'
gcc: no input files

$ make dep
$ make bzImage

....
In file included from
/common/SOURCE/linux-2.4.26/include/linux/unistd.h:9,
from init/main.c:17:
/common/SOURCE/linux-2.4.26/include/asm/unistd.h:375: warning: conflicting types for built-in function ‘_exit’
make: *** [init/main.o] Error 1
$

/sbin/genksyms - а для чего и что за утилита
у меня такой нет, где она используется ?

нашёл только в заголовках ядра 2.6.X


У меня не инсталлирован eglibc - он нужен, для чего ?


us23 ()
Ответ на: комментарий от us23

In file included from
/common/SOURCE/linux-2.4.26/include/linux/unistd.h:9,
from init/main.c:17:
/common/SOURCE/linux-2.4.26/include/asm/unistd.h:375: warning: conflicting types for built-in function ‘_exit’
make: *** [init/main.o] Error 1

конфигурировали? gcc из include-fixed ничего не цепляет?

/sbin/genksyms - а для чего и что за утилита


пакет modutils, без нее не сделать make dep
http://www.kernel.org/pub/linux/utils/kernel/modutils/v2.4/


У меня не инсталлирован eglibc - он нужен, для чего ?


не нужен, вы спрашивали про glibc ? просто привела номер версии, на всякий случай

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

Конфигурировал.

$ make mrproper
скопировал конфиг ядра с которым собиралось в RH7/RH9
потом:
$ make menuconfig
exit -> save
$ make dep
работает так как есть /sbin/depmod и в Макеfile ядра используется
GENKSYMS = /sbin/genksyms
DEPMOD = /sbin/depmod

URCE/linux-2.4.26/include/math-emu \( -name SCCS -o -name .svn \) -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
scripts/mkdep — init/*.c > .depend
$
$ $ ls -lF .depend
-rw-rw-r-- 1 us us 5679 2010-04-02 13:45 .depend
$

$ make bzImage
....
from init/main.c:17:
/mnt/hda7/us/common/SOURCE/linux-2.4.26/include/asm/unistd.h:375: warning: conflicting types for built-in function ‘_exit’
make: *** [init/main.o] Error 1
$


---
Сделал снова:
$ make mrproper
$ make menuconfig
Взял по умолчанию конфиг: arch/i386/defconfig
$ make dep
$ make bzImage
....
from init/main.c:17:
/mnt/hda7/us/common/SOURCE/linux-2.4.26/include/asm/unistd.h:375: warning: conflicting types for built-in function ‘_exit’
make: *** [init/main.o] Error 1
$

Без измененияй


не компилирует main.c

gcc из include-fixed ничего не цепляет?


include-fixed - откуда ?

us23 ()
Ответ на: комментарий от us23

%GCCPREFIX/lib/gcc/$ARCH-$VENDOR-linux/$VERSION/include-fixed

обычно туда ставится достаточно много мусора с исправлением системных заголовков, можно удалять оттуда все, кроме syslimits.h и limits.h

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

не нашёл такой файл,

распаковал и собрал gcc-core-3.4.6 ,
не собирает, те же ошибки

у меня дистрибутив f7, может не подходит ?
binutils Вы обновляли до 2.20.1 ?

Что посоветуете ?

us23 ()
Ответ на: комментарий от Sylvia

так что нужно для сборки 2.4 под slackware 13? у меня такая же ерунда про _main как у ТС.

sprutos ★★ ()
Ответ на: комментарий от us23

Сейчас под CentOS 5.4 собрал 2.4.37.6, genksyms просто скопировал из RH 9.0, собралось без ошибок, bzImage вроде нормального размера. Сейчас просто проверить негде, рабочий ли он. gcc там 4.1.2.

mky ★★★★★ ()

ничего не понимаю (
для сборки обязательно нужно gcc =< 4.1.2 ?
вот что у меня получается в слакваре 13 (/sbin/genksyms скопировал из 10.2)

void@universe:linux-2.4.31$ sudo make bzImage
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o scripts/split-include scripts/split-include.c
scripts/split-include include/linux/autoconf.h include/config
gcc -D__KERNEL__ -I/usr/src/linux-2.4.31/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686 -fno-unit-at-a-time -DKBUILD_BASENAME=main -c -o init/main.o init/main.c
In file included from /usr/src/linux-2.4.31/include/linux/prefetch.h:13,
from /usr/src/linux-2.4.31/include/linux/list.h:6,
from /usr/src/linux-2.4.31/include/linux/wait.h:14,
from /usr/src/linux-2.4.31/include/linux/fs.h:12,
from /usr/src/linux-2.4.31/include/linux/capability.h:17,
from /usr/src/linux-2.4.31/include/linux/binfmts.h:5,
from /usr/src/linux-2.4.31/include/linux/sched.h:9,
from /usr/src/linux-2.4.31/include/linux/mm.h:4,
from /usr/src/linux-2.4.31/include/linux/slab.h:14,
from /usr/src/linux-2.4.31/include/linux/proc_fs.h:5,
from init/main.c:15:
/usr/src/linux-2.4.31/include/asm/processor.h:75: error: array type has incomplete element type
In file included from /usr/src/linux-2.4.31/include/linux/fs.h:322,
from /usr/src/linux-2.4.31/include/linux/capability.h:17,
from /usr/src/linux-2.4.31/include/linux/binfmts.h:5,
from /usr/src/linux-2.4.31/include/linux/sched.h:9,
from /usr/src/linux-2.4.31/include/linux/mm.h:4,
from /usr/src/linux-2.4.31/include/linux/slab.h:14,
from /usr/src/linux-2.4.31/include/linux/proc_fs.h:5,
from init/main.c:15:
/usr/src/linux-2.4.31/include/linux/ncp_fs_i.h:26: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp_fs_i.h:27: warning: 'packed' attribute ignored for field of type '__u8[6]'
In file included from /usr/src/linux-2.4.31/include/linux/ncp_mount.h:12,
from /usr/src/linux-2.4.31/include/linux/ncp_fs_sb.h:12,
from /usr/src/linux-2.4.31/include/linux/fs.h:733,
from /usr/src/linux-2.4.31/include/linux/capability.h:17,
from /usr/src/linux-2.4.31/include/linux/binfmts.h:5,
from /usr/src/linux-2.4.31/include/linux/sched.h:9,
from /usr/src/linux-2.4.31/include/linux/mm.h:4,
from /usr/src/linux-2.4.31/include/linux/slab.h:14,
from /usr/src/linux-2.4.31/include/linux/proc_fs.h:5,
from init/main.c:15:
/usr/src/linux-2.4.31/include/linux/ncp.h:24: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:25: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:26: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:27: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:28: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:29: warning: 'packed' attribute ignored for field of type '__u8[]'
/usr/src/linux-2.4.31/include/linux/ncp.h:37: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:38: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:39: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:40: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:41: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:42: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:43: warning: 'packed' attribute ignored for field of type '__u8[]'
/usr/src/linux-2.4.31/include/linux/ncp.h:137: warning: 'packed' attribute ignored for field of type '__u8'
/usr/src/linux-2.4.31/include/linux/ncp.h:138: warning: 'packed' attribute ignored for field of type '__u8[256]'
/usr/src/linux-2.4.31/include/linux/ncp.h:174: warning: 'packed' attribute ignored for field of type '__u8'
make: *** [init/main.o] Error 1

sprutos ★★ ()
Ответ на: комментарий от sprutos

опаньки! простая установка GCC 4.1.2 заместо 4.3.3 не помогла. буду собирать с нуля.

sprutos ★★ ()

Даже если вы соберете 2.4 для слаки, то запустить все равно не сможете.

Начиная с 12 версии Патрик положил на поддержку 2.4, и поэтому glibc в слаке начиная с версии 12.0 (glibc 2.5 и более новая) обязательно требует ядра версией выше, либо равной 2.6.16.

Последняя версия, которая еще более-менее адаптирована к 2.4 - это 11.0, там в glibc 2.3.6 впихнут патч для LinuxThreads (в то время как в ядрах 2.6 уже давно NPTL). Отказываться от поддержки LinuxThreads и 2.4 начали уже со времен Slackware 10.2, с её 2.4.31 и 2.6.13.

Кроме того, 2.4 имеет некоторые проблемы с многопоточными приложениями именно из-за LinuxThreads. Red hat в RHEL3 кое-как решила эту проблему пропихиванием NPTL в 2.4, но это все равно зверский костыль.

2.4 - RIP, не мешайте ему спокойно уходить на покой.

whoami ()
Ответ на: комментарий от whoami

Если всё же хотите покоыврять именно 2.4, то качните слаку 11.0, и собрайте в ней сколько душе угодно.

whoami ()
Ответ на: комментарий от whoami

>Даже если вы соберете 2.4 для слаки, то запустить все равно не сможете.

ядро не зависит от glibc, нельзя будет загрузить систему, но ядро вполне себе запустится , если ТС собирает 2.4 ядро куда-либо еще и у него есть (или будут) glibc и весь остальной userspace, почему бы и нет?

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

а вот это уже интересней! т.е. мне придется для запуска 2.4 еще и binutils + glibc старые брать?

и еще вопросец, из-за чего не получилось собрать 2.6.21.5 под 13ой слакой? также причина в glibc?

sprutos ★★ ()
Ответ на: комментарий от sprutos

для запуска нужен userspace без nptl и tls
скорее всего менять придется всю систему, а не только binutils, gcc, glibc

что-то может и работать, если оно не использует поточность.

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

>собраное на 2.4.x будет работать на 2.6 )
без nptl и tls??? Э_Э значит, есть обратная совместимость...

udev там только для 2.6, для 2.4 - devfsd

вестимо ))

sprutos ★★ ()
Ответ на: комментарий от sprutos

да, без nptl и tls

но если вы при обновлении какой-либо библиотеки потом соберете ее с tls,
то поломаете систему ;) вообщем-то тут уже написали, не надо мучать 2.4, либо если делаете что-то специализированное для 2.4 , то с 2.4 и собирайте все, всё это значит всю систему.

Ядро можно собрать и на 2.6 , это не принципиально, у него нет зависимостей

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

уговорили : )
буду тестировать 2.4 на старых системах, а 2.6.21.5 (и возможно 2.6.18) всё же буду пытаться прикрутить к текущей конфе. имхо, они более шустрые и отлаженные по сравнению с модными версиями

sprutos ★★ ()
Ответ на: комментарий от sprutos

.32 вместо .27 хотят LTSнуть на kernel.org

весьма стабильное и приличное ядро, наверное его и оставлю, свежее только на ноут буду ставить

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

Да, .32 очень хорошее, и не имеет проблем с тормозами I/O, как .27.

Собственно переполз еще в конце декабря после года на .27, и ни капли не жалею.

whoami ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.