패치를 적용하는 방법은 무엇입니까?

패치를 적용하는 방법은 무엇입니까?

다음 패치를 적용해야 하며 지금까지의 패치를 망치고 싶지 않습니다. 아래에는 온라인에서 찾은 전체 콘텐츠가 게시되어 있습니다. 이것은 나와 비슷한 질문에 대한 누군가의 답변입니다.

2007년 3월 20일 화요일 14:32 -0500에 James Bottomley는 다음과 같이 썼습니다.

MODULE이 "n"으로 설정되어 있습니까? 어떤 이유로 기호 내보내기가 보호되는 것 같습니다 #ifdef MODULE... 그 외에는 설명할 수 없습니다.

사실, 그건 실수입니다... 모듈식 구성은 모듈이 아니라 모듈입니다. 이것을 시도해 볼 수 있습니까?

---
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 0949145..a67f315 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -181,10 +181,8 @@ int scsi_complete_async_scans(void)
        return 0;
 }

-#ifdef MODULE
 /* Only exported for the benefit of scsi_wait_scan */
 EXPORT_SYMBOL_GPL(scsi_complete_async_scans);
-#endif

 /**
  * scsi_unlock_floptical - unlock device via a special MODE SENSE command

내가 겪고 있는 문제에 대한 해결책으로 위의 코드를 온라인에서 찾았습니다. 나는 내 자신의 커널을 위한 모듈을 만들려고 합니다. 내 질문은 위 패치를 적용하는 방법입니다. 내가 볼 수 있는 디렉토리에 있어야 할 것 같은데요 /drivers, 그렇죠? 다음에 무엇을 해야 합니까?

커널 및 관련 장치 드라이버를 빌드하기 위해 "make module"을 실행할 때 발생하는 오류는 다음과 같습니다.

sansari@ubuntu:~/WORKING_DIRECTORY$ make modules
scripts/kconfig/conf --silentoldconfig Kconfig
sound/soc/codecs/audience/Kconfig:40:warning: type of 'SND_SOC_ES_SLIM' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:43:warning: type of 'SND_SOC_ES_I2C' redefined from 'boolean' to 'tristate'
sound/soc/codecs/audience/Kconfig:44:warning: choice value used outside its choice group
sound/soc/codecs/audience/Kconfig:41:warning: choice value used outside its choice group
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC [M]  drivers/scsi/scsi_wait_scan.o
  Building modules, stage 2.
  MODPOST 1 modules
ERROR: "__aeabi_unwind_cpp_pr0" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "__aeabi_unwind_cpp_pr1" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "scsi_complete_async_scans" [drivers/scsi/scsi_wait_scan.ko] undefined!
ERROR: "wait_for_device_probe" [drivers/scsi/scsi_wait_scan.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

@faheem - 감사합니다. 이 변경 사항이 어떤 파일에 적용되는지는 아직 확실하지 않습니다. 누군가 수정 작업이 무엇인지 설명할 수 있나요? 어떤 파일이 어떻게 업데이트되나요? 패치에 대한 나의 이해는 그것이 파일에 추가된다는 것입니다. 변경 전후에 여러 줄이 있습니다. 프로그램은 대상 파일의 문자열을 일치시킨 다음 변경 사항을 적용합니다. 위의 수정 사항이 kconfig 및 scsi_scan.c를 변경한다고 말하는 것이 맞습니까?

답변1

명령을 사용하여 패치 1을patch 적용합니다 . 찾고 있는 디렉터리는 drivers/커널 소스 트리의 최상위 수준에 있습니다. 다음과 같이 적용합니다.

$ cd ~/linux
$ ls
arch           firmware  lib              README          usr
block          fs        MAINTAINERS      REPORTING-BUGS  virt
COPYING        include   Makefile         samples         vmlinux
CREDITS        init      mm               scripts         vmlinux-gdb.py
crypto         ipc       modules.builtin  security        vmlinux.o
debian         Kbuild    modules.order    sound
Documentation  Kconfig   Module.symvers   System.map
drivers        kernel    net              tools
$ patch -p1 < ~/path/patch-file.diff

이는 ls올바른 디렉토리가 어떻게 생겼는지 보여주기 위한 것입니다. 이러한 파일 중 일부는 빌드 후에만 존재하므로(예: vmlinux) 누락되더라도 걱정하지 마세요. -p1패치에서 경로 이름 앞의 합계를 무시하는 방법 a/(아무 것도 무시하지 않고 무시하는 등)b/-p0-p2a/drivers

이것이 귀하의 질문에 대한 답이 되기를 바랍니다. 그러나 실제로 로드 가능한 모듈 없이 커널을 구축하지 않는 한(이렇게 하고 있다면 그렇게 하지 않은 경우 make modules), 보고 있는 오류를 수정할 가능성은 거의 없습니다.


각주
1 버전 관리를 위해 사용하고 있다면 git적용할 수도 있지만 그렇지 않은 것 같습니다.

관련 정보