2014-01-27 2 views
1

Я работаю над некоторыми модулями ядра Linux & Мое текущее ядро ​​- 3.8, я хочу обновить его до ядра 3.10.Как перенести ядро ​​Linux в более высокую версию ядра

Я подумал о двух способов сделать это:

  1. Либо ЗАКАНЧИВАТЬ отдельную 3.10 ветвь, а затем объединить его с моей текущей 3.8 отрасли.
  2. Или патч 3.8 с 3.9 патч, а затем исправить его с 3.10 патч (патчи, доступные на kernel.org являются дифф из текущей и предыдущей версии, что я считаю)

Какой подход, который я должен следовать? Есть ли лучший способ сделать это?

Я использую git как программное обеспечение для управления версиями.

+0

AFAIK для работы ваших модулей необходимо заменить ядро ​​вашей системы, например, если вы скомпилируете свой модуль против версии 3.10 ядра, то ваша система также должна запустить эту версию. – rendon

+0

1) Найдите ближайшую к вашей базе версию, имеющую доступную 3.10. 2) Разверните текущее дерево против этого дерева 3.8. 3) Применяйте свои изменения к этой версии 3.10, автоматически, где это возможно, и вручную * в том числе до степени переноса на новые механизмы, где это необходимо *. 4) Продолжить продвижение вперед прогресс –

+0

rendon: Да, я заменяю все ядро. @ChrisStratton: Спасибо за предложение, я делаю что-то похожее на то, что вы предложили, я загрузил дерево ядра, я определил версию, ближайшую к моей базе, которая имеет доступную 3.10. Тогда я возьму разницу этого нетронутого 3.8 и 3.9, применим его к моему 3.8, затем снова то же самое с нетронутыми 3.9 и 3.10. Надеюсь, это сработает. – brokenfoot

ответ

2

В плане git вы можете выбрать любой способ.

Вы можете взять источники v3.8, создать отдельную ветку (называемую, скажем, my_modules), применить ваши изменения в этой ветке, зафиксировать их. Затем вам нужно объединить эту ветку с фактическими источниками ядра (я бы предложил с восходящим потоком master, но вы можете выбрать любую другую точку (фиксацию) в истории развития ядра): git merge <chosen-branch-o-tag-o-commit>. На этом этапе вам, возможно, придется разрешать конфликты слияния, если они есть, обновить свой модуль до внутреннего API внутреннего ядра и т. Д., А затем зафиксировать объединенное состояние. См. git merge --help и другую соответствующую документацию git. Теперь у вас есть изменения, адаптированные к выбранной версии ядра, и они могут видеть разницу между ядром вверх и исправленным: git diff <chosen-branch-o-tag-o-commit> HEAD. В результате фиксации картина будет выглядеть следующим образом:


A - ... - B 
\    \ 
    D1 - D2... - M 

где начальная точка ветвления (3,8 ядра), В коммита вы слиты с (более новым ядром), D1..DN являются фиксации вашего водителя и M - это слияние.

В качестве альтернативы вы также можете использовать другой подход, называемый rebasing. В этом случае вы «пересаживаете» свою начальную последовательность совершения на новый выбранный корень: git rebase -i B. Затем git попытается повторно применить всю последовательность D1 ... DN к новому корню B итеративно. Обратите внимание, что на каждый шаг 1 ... N вы можете получить конфликт, который вам необходимо решить, а затем продолжить процесс перезагрузки с git rebase --continue. В [успешного] конце вы получите новый фиксации последовательности D'1 - D'N растет из B:


A - ... - B 
      \ 
       D'1 - .... D'N 

Пожалуйста, обратите внимание, что технически D'1 ... D'N глядя/аналогичный/к вашему оригинальному D1 ... DN различны. Они имеют собственное время фиксации, могут иметь несколько другой текст патча и т. Д. В зависимости от ваших потребностей они могут или не могут быть тем, что вам нужно.

+0

Спасибо за разработанные анны, после некоторых обсуждений и предложений здесь я думаю, что я пойду с подходом diff & patch. – brokenfoot

+1

На самом деле подход diff & patch просто неудобен. Это похоже на культивирование поля с лошадью и ручным плугом, в то время как все остальные используют тракторы и комбайны. Вам нужно будет повторить все скучные действия для каждого ядра версии, к которому вы хотите обновить свой модуль. Но, конечно же, вам решать. – user3159253

+0

Оказалось, что мой драйвер имел очень минимальные изменения при переносе на более высокое ядро. Поэтому для меня было проще всего создать патч и применить его к последней версии ядра. Спасибо за понимание, хотя! – brokenfoot

Смежные вопросы