Помогите разобраться с принципами компилирования заголовков ядра, да и ядра в целом в Fedora Core 4.
Вопросов несколько.
1. После установки пакета kernel-2.6.12-1.1456_FC4.src.rpm в папке /usr/src/redhat/SOURCES появилось много разных файлов.
В том числе ихсодники ядра в архиве (linux-2.6.12.tar.gz2) и патчи к нему:
patch-2.6.12.5.bz2
linux-2.6-acpi-20050729.patch.bz2
и т.д...
НО!
есть ещё в этом же каталоге файлы просто .patch типа:
linux-2.6.12-scsi-blacklist.patch
linux-2.6-diskdump.patch
с патчами ядра типа patch.bz2 всё понятно -- по различным документациям:
bzcat /path/to/patch-2.4.19.bz2 | patch -s -p0
и всего делов.
Но что делать с файлами .patch?
2. Настройка линков (sic! прошлый век!)
Раньше в ядрах 2.2.х, 2.4.х было необходимо сделать следующее:
cd /usr/include
rm -rf asm linux scsi
ln -s /usr/src/linux/include/asm-i386 asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/scsi scsi
то бишь сделать ссылки:
/usr/include/linux -> /usr/src/linux/include/linux
/usr/include/asm -> /usr/src/linux/include/asm
/usr/src/linux/include/asm -> /usr/src/linux/include/asm-i386 (architecture of mine pocessor)
И этого хватало для компиляции ядра.
Но на http://www.opennet.me/docs/RUS/lfs/chapter06/kernel.html рекомендуют делать так:
=== CUT ===
ln -s /static/bin/pwd /bin/pwd &&
make mrproper &&
make include/linux/version.h &&
make symlinks &&
mkdir /usr/include/asm &&
cp include/asm/* /usr/include/asm &&
cp -R include/asm-generic /usr/include &&
cp -R include/linux /usr/include &&
touch /usr/include/linux/autoconf.h &&
rm /bin/pwd
=== CUT ===
Там же есть следующее любопытное высказывание:
=== CUT ===
Раньше было принято создавать символические ссылки директорий /usr/include/{linux,asm} на /usr/src/linux/include/{linux,asm}. Однако, это была плохая идея, как объясняет Линус Торвальдс в списке рассылки ядра Linux (Linux Kernel Mailing List, отрывок):
Тем, кто компилирует новые ядра, настоятельно рекомендую:
- не создавать символических ссылок (кроме той, которую создает
само ядро, "linux/include/asm", символическая ссылка, которая
используется при внутренней компиляции ядра.)
Да, именно так делаю я. В моем каталоге /usr/src/linux есть заголовки
старого ядра 2.2.13, несмотря на то, что я не использовал ядро 2.2.13
уже очень давно. Однако именно с этими заголовками компилировался
пакет glibc, соответственно именно эти заголовки соответствуют
файлам объектов библиотеки.
Также именно такое положение вещей являлось рекомендуемым
на протяжении последних пяти лет. Я не могу понять, почему вся эта
заморочка с символическими ссылками все еще существует, как зомби.
Практически во всех дистрибутивах есть эта неработающая символическая
ссылка, и люди до сих пор помнят, что исходники ядра Linux должны
находится в "/usr/src/linux", несмотря на то, что это уже давно не так.
=== CUT ===
ТАК КАК ЖЕ ДЕЛАТЬ ПРАВИЛЬНО?
что куда как копировать и какие ссылки создавать?
Где и зачем хранить заголовки ядра?
3. При попытке создать "по старинке" ссылки для ядра 2.6 в FC4 командами
cd /usr/include
rm -rf asm linux scsi
ln -s /usr/src/linux/include/asm-i386 asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/scsi scsi
ссылки, разумеется, создаются.
НО при выполнении команды make menuconfig получаю следующий ответ:
=== CUT ===
[root@vampire linux]# make menuconfig
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c: In function 'parse_config_file':
scripts/basic/fixdep.c:245: warning: pointer targets in passing argument 1 of 'use_config' differ in signedness
scripts/basic/fixdep.c: In function 'parse_dep_file':
scripts/basic/fixdep.c:299: warning: pointer targets in passing argument 1 of '__builtin_strchr' differ in signedness
scripts/basic/fixdep.c:299: warning: pointer targets in assignment differ in signedness
HOSTCC scripts/basic/split-include
In file included from /usr/include/linux/errno.h:4,
from /usr/include/bits/errno.h:25,
from /usr/include/errno.h:36,
from scripts/basic/split-include.c:26:
/usr/include/asm/errno.h:4:31: error: asm-generic/errno.h: No such file or directory
scripts/basic/split-include.c: In function 'main':
scripts/basic/split-include.c:113: warning: pointer targets in assignment differ in signedness
make[1]: *** [scripts/basic/split-include] Error 1
make: *** [scripts_basic] Error 2
=== CUT ===
Выходит теперь эти линки не работают? или я что-то делаю не так?
ИТОГО:
Блин! Есть где-нибудь ПОЛНАЯ информация о том, какие ВСЕ предварительные операции необходимо сделать с системой перед компилированием ядра?
Существующие FAQ-и и прочие доки либо ограничиваются банальными
make mrproper
make config (menuconfig, xconfig...)
make dep
make clean
либо описывают процесс подготовки прошлого века -- типа создания ссылок на каталоги.
Неужели нет ни одной ТОЛКОВОЙ доки? Чтобы от А до Z?
Интересует компиляция версии ядра 2.6.х, оф коз...
v.v.balashoff