FastNetMon

Friday, 23 April 2010

Как делать патчи для ядра linux посредством git?

Я уже много писал о том, как стянуть ядро с kernel.org, распаковать его и потом пропатчить каким-нить интересным патчем. Да, когда патч чужой все хорошо и понятно - пускаем patch -p1 < getallworldmoney.diff и получаем измененное дерево, которое осталось лишь собрать. Но в какой ад превращается разработка, когда сам пишешь патч, который затрагивает добрый десяток файлов! Ведь приходится каждый раз вызывать рекурсивное сравнение папок diff ом, чтобы вспомнить, в каком же файле добавил строчку! Разумеется, разработчики ядра умнее :) Они юзают git для этой цели, так что мы пойдем те же путем.

Установка необходимого ПО


Итак, если мы на РедХатах:

yum install git -y


Если на Дебиянах:

apt-get -y install git-core


Получение дерева исходных кодов ядра

Так как патчить мы собрались ядро Линукса, то нам бы его для начала раздобыть. Поэтому идем на офсайт ядра, устремляем свой взор в правый верхний угол, сейчас там написано "Latest Stable Kernel: 2.6.33.2", что говорит нам о том, что данная версия ядра является актуальной и стабильной (да, мы пока со стабильными только играемся).

В средней части страницы присутствует строка с рядом ссылок: "stable: 2.6.33.2 2010-04-01 [Full Source] [Patch] [View Patch] [View Inc.] [Gitweb] [Changelog]", вот как раз ссылка на Gitweb нас интересует более всего. щелкаем по ней. После этого мы попадаем на страницу, где в верхней части расположился вот такой блок:

URL git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.33.y.git
http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.33.y.git
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.33.y.git


Вот как раз за ним мы охотились! Нам из этого списка нужна строка с git://.

Создаем папку, где будем девелопить ядро:

cd ~
mkdir kernel_dev
cd kernel_dev
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.33.y.git


Теперь идем готовить себе кофе, так как процесс весьма длительный.

Основы работы с git


Получение обновлений

В случае, если ветка ядра обновится, необходимо иметь возможность скачать все обновления, для этого используем следующие команды (если у нас самое новое ядо этой ветки, то в ответ мы получим "Already up-to-date."):

cd linux-2.6.33.y
git pull


Добавление / удаление файлов

Для добавления файла в дерево используйте команду:
git add
Для удаления:
git rm


Откат изменений

Откатить все локальные изменения (ну это на случай, если Вы расстроитесь тому, что Галуа из Вас не получился и решите все переделать):
git checkout -f


Просмотр лога изменений и информации о коммитах

git log


Просмотр списка измененных / добавленных файлов

git status


Просмотр изменений во всех файлах / в заданном файле

Изменения во всем репозитории:
git diff


Изменения в одном файле:
git diff fs/proc/stat.c


Просмотреть различия между ревизиями

git diff 96d170a11d7cc998a5ddedc56e98c783f1bee1db..19f00f070c17584b5acaf186baf4d12a7d2ed125


Коммит изменений (в локальный репозиторий!)
git commit -a


После этого Ваш коммит отобразится в git log и на его основе можно будет сделать diff и из него как раз сделать пачт :)

Отмена изменений
git-revert 96d170a11d7cc998a5ddedc56e98c783f1bee1db


Ну вот и все :) После каждого уверенного шага в написании патча для ядра делаете commit, а потом посредством git diff между исходным и конечными этапами получаете полный патч :)

По материалам: http://linux.yyz.us/git-howto.html

No comments :

Post a Comment

Note: only a member of this blog may post a comment.