Добавление патчей в ядро
Введение
Эта статья описывает то, как добавить пачи к нашим ядрам и вообще разкавает о внутренней жизни git репозиторя с ядром. Для начала стоит понять зачем в это лезть. Цели могут быть разные:
- просто интересно.
- есть функцианальность, которую хотелось добавить, а в наших ядрах её нет.
- расшерение поддержки железа. Есть железяка, она не работает, но есть пач и возможность проверить.
Почему этого не стоит делать:
- Задача сложная, если не очень нужно, не забивате себе голову.
Чего не стоит делать:
- Плодить разные flavour. Лучше доавить к имеющимся в идеале в std-def.
- Делать только для себя. Если вы дабавили пач, делающий что то полезное, стоит его выложить в сизиф. Оно может ещё кому-то пригодиться.
Что нам нужно:
- знание git. Хотя бы начальные. Вся разработка ядра ведёться в git, и его здесь ни как не обойти.
- Знание сборочной системы gear
- Доступ к репозитарию.
- Достаточно мощьная машина. Ядро может собираться очень долго(около получаса) в зависимости от железа, и в процессе сборки потреблать до 1Gb под временные файлы. Будте готовы что этот процесс съест много ресурсов.
- Доступ к git.alt. git репозитарий с ядром может занимать до 300Mb будьте готовы хотябы раз его скачать полностью
Разбираемся с бранчами
Для начала нам нужны git репозитарий с ядром. для этого мы его клоним, например это
git clone git://git.altlinux.org/people/silicium/packages/kernel-image-2.6.25.git
Теперь заходим в kernel-image-2.6.25 и видим ванильное ядро. Дело в том что git cкопировал только ветку master. Посмотреть остальные ветки можно командой
git branch -a
И видим множетество веток. Оправившись от шока от их обилия, разберёмся зачем какая нужна.
При ближайшем рассмотрении все ветки можно разделить на:
- feat-*
- fix-*
- kernel-image*
- kernel-sources*
- другие
основные бранчи это бранчи kernel-image-*, именно из них и собирается ядра. Таких бранчий там несколько соответвенно flavourам например пакет kernel-image-std-def собирается из одноименного бранча. остальные std-pae std-ll std-srv являются его производными и в данный момент нам не интересны. Для начала получим себе копию этого бранча
git checkout kernel-image-std-def -b origin/kernel-image-std-def
типерь посмотрев в директорию, мы увидим spec, .gear, modules.build, subflavours и исходники ядра.