Linux 커널에 RT PREEMPT 패치를 적용하려고 합니다. 가이드에서 언급한 대로이것그리고이것, 다음을 수행해야 합니다.
zcat patch-4.14.15-rt13.patch.gz | patch -p1
(커널 소스 코드가 포함된 디렉터리에 있다고 가정합니다.)
하지만 다음과 같은 메시지를 많이 받습니다.
The next patch would create the file tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-event-createremove.tc,
which already exists! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored
patching file virt/kvm/arm/arm.c
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
3 out of 3 hunks ignored -- saving rejects to file virt/kvm/arm/arm.c.rej
결국 그 과정은 실패했습니다. 나는 ubuntu:16.04
이것을 도커 컨테이너와 도커 컨테이너 모두에서 시도했지만 debian:stretch
결과는 동일합니다.
그런데 패치 프로세스는 bash 스크립트의 일부이기 때문에 상호 작용할 수 없습니다.
패치를 적용하고 있어요라즈베리 파이 커널 소스 코드그런데.
여기있어완전한 패치 출력.
내가 뭘 잘못했나요? 패치를 올바르게 적용하는 방법은 무엇입니까?
그 내용은 virt/kvm/arm/arm.c.rej
다음과 같습니다:
--- virt/kvm/arm/arm.c
+++ virt/kvm/arm/arm.c
@@ -650,7 +650,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
* involves poking the GIC, which must be done in a
* non-preemptible context.
*/
- preempt_disable();
+ migrate_disable();
kvm_pmu_flush_hwstate(vcpu);
@@ -687,7 +687,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
kvm_pmu_sync_hwstate(vcpu);
kvm_timer_sync_hwstate(vcpu);
kvm_vgic_sync_hwstate(vcpu);
- preempt_enable();
+ migrate_enable();
continue;
}
@@ -742,7 +742,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
kvm_vgic_sync_hwstate(vcpu);
- preempt_enable();
+ migrate_enable();
ret = handle_exit(vcpu, run, ret);
}
건축 후.