Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Наложение патча
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
3.14
Следую по внешним инструкциям наложения патча:
Код
patch -p1 <linux-2.6.21-uc0.diff

Выполняю (на уровне linux-2.6.21-uc0 директории) patch -p1 <linux-2.6.21-uc0.diff, в ответ, получаю ошибку на отсутствие изменяемого файла уже на четвертой строке патча, вот часть linux-2.6.21-uc0.diff (первые строки):
Код
diff -urN linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S linux-2.6.21-uc0/arch/arm/boot/compressed/head.S
--- linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S    2007-06-17 06:31:25.000000000 +0100
+++ linux-2.6.21-uc0/arch/arm/boot/compressed/head.S    2007-06-05 10:05:41.000000000 +0100
@@ -296,6 +296,21 @@
LC1:        .word    reloc_end - reloc_start
        .size    LC0, . - LC0
Файл linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S присутствует.
Мне не совсем понятна логика с путями linux-2.6.21-uc0-orig ...
Damon
Я не силен в патчиньи, но попробуйте под strace'ом прогнать или ltrace'ом. Я понимаю, что сие -- "из пушки по воробьям" (С), но по логу хоть понять можно, где patch пытается найти файл, почему обламывается и, возможно, писчу для размышлений, как поправить.
Цитата(3.14 @ Mar 11 2008, 21:30) *
Выполняю (на уровне linux-2.6.21-uc0 директории) patch -p1 <linux-2.6.21-uc0.diff...
...
Код
diff -urN linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S linux-2.6.21-uc0/arch/arm/boot/compressed/head.S
...

может, как вариант, директория, в которой лежат файлы подлежащие патчинью, должна называться linux-2.6.21-uc0-orig и запускать patch не в ней, а на уровень выше? Раз уж она (директория) прописана в путях-то...
amw
Цитата(3.14 @ Mar 11 2008, 20:30) *
Следую по внешним инструкциям наложения патча:
Код
patch -p1 <linux-2.6.21-uc0.diff

Выполняю (на уровне linux-2.6.21-uc0 директории) patch -p1 <linux-2.6.21-uc0.diff, в ответ, получаю ошибку на отсутствие изменяемого файла уже на четвертой строке патча, вот часть linux-2.6.21-uc0.diff (первые строки):
Код
diff -urN linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S linux-2.6.21-uc0/arch/arm/boot/compressed/head.S
--- linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S    2007-06-17 06:31:25.000000000 +0100
+++ linux-2.6.21-uc0/arch/arm/boot/compressed/head.S    2007-06-05 10:05:41.000000000 +0100
@@ -296,6 +296,21 @@
LC1:        .word    reloc_end - reloc_start
        .size    LC0, . - LC0
Файл linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S присутствует.
Мне не совсем понятна логика с путями linux-2.6.21-uc0-orig ...


Код
# cd linux-2.6.21-uc0
# patch -v -p1 -i/path/to/dir/linux-2.6.21-uc0.diff

Вывод в студию плз?

Второй вариант:
Код
# ls
linux-2.6.21-uc0
# patch -v -p0 -i/path/to/dir/linux-2.6.21-uc0.diff

pN это сколько директорий исключить из поиска целевых файлов относительно текущей.
Если текущая директория linux-2.6.21-uc0 то нужно p1, если текущая директория linux-2.6.21-uc0/arch то нужно p2, и т.д.
Существовать должны все директории в конечном результирующем дереве.
Если в конечном результирующем дереве изначально нет нужного файла (включая подкаталоги), и патчем файл создается целиком (то есть до патчя такого файла нет вообще), то будут созданы и все подкаталоги.
vshemm
Ключ -p1 как раз заставляет игнорировать первый каталог из пути в патче. Однако, патчить нужно из соответствующей директории (т.е. из linux-2.6.21-uc0-orig а не на уровне linux-2.6.21-uc0 директории).
amw
Цитата(vshemm @ Mar 12 2008, 11:04) *
(т.е. из linux-2.6.21-uc0-orig а не на уровне linux-2.6.21-uc0 директории).

??????????????????????????
3.14
Ребята, спасибо за участие, разобрался.
Инструкция "патчивания" создана невнимательно, автор забыл сказать о создании копии директории linux-2.6.21-uc0-orig (из linux-2.6.21-uc0) и сам патч накладывать с ключем p0.
Хотя смысл создания копии для меня загадка smile.gif
vshemm
Цитата(3.14 @ Mar 11 2008, 21:30) *
Следую по внешним инструкциям наложения патча:
Код
patch -p1 <linux-2.6.21-uc0.diff

Выполняю (на уровне linux-2.6.21-uc0 директории) patch -p1 <linux-2.6.21-uc0.diff, в ответ, получаю ошибку на отсутствие изменяемого файла уже на четвертой строке патча, вот часть linux-2.6.21-uc0.diff (первые строки):
Код
diff -urN linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S linux-2.6.21-uc0/arch/arm/boot/compressed/head.S
--- linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S    2007-06-17 06:31:25.000000000 +0100
+++ linux-2.6.21-uc0/arch/arm/boot/compressed/head.S    2007-06-05 10:05:41.000000000 +0100
@@ -296,6 +296,21 @@
LC1:        .word    reloc_end - reloc_start
        .size    LC0, . - LC0
Файл linux-2.6.21-uc0-orig/arch/arm/boot/compressed/head.S присутствует.
Мне не совсем понятна логика с путями linux-2.6.21-uc0-orig ...

Директории разные.. Или это опечатка?
amw
Цитата(vshemm @ Mar 12 2008, 11:13) *
Директории разные.. Или это опечатка?

Точно.
*-orig - это до патча. После патча должно быть без -orig. Соответственно, ее вообще не должно быть (*-orig).

Вообще-то патч накладывается на старое дерево что-бы сделать его новым.
Наличие *-orig директории вообще не имеет смысла (кроме резервной копии). Должно быть то дерево каталогов, что получается после наложения патча.

Например есть такие файлы:
a/arch/arm.c
a/test.c

и есть патч
Код
diff -Naur a b
--- a/arch/arm.c
+++ b/arch/arm.c
Тут текст патча, изменяющий несколько строк в файле a/arch/arm.c

Для наложения из самой верхней папки нужен файл b/arch/arm.c
тогда
Код
patch -p0 -i/path/to/file.diff


Или вообще есть файл zzz/arch/arm.c
тогда
Код
cd zzz
patch -p1 -i/path/to/file.diff
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.