u-boot에서 자동으로 Linux 부팅

u-boot에서 자동으로 Linux 부팅

보안상의 이유로 u-boot에서 Linux를 부팅하고 비밀번호가 입력될 때까지 모든 출력을 숨겨야 합니다. 매크로를 사용하여 이 작업을 올바르게 수행하도록 uBoot를 구성했으며 CONFIG_AUTOBOOT_KEYED자동으로 성공적으로 부팅할 수 있습니다.

내가 가진 문제는 uBoot가 Linux 커널을 부팅하고 자동 모드를 활성화하면 console=bootargs의 일부로 Linux 커널에 전달된다는 것입니다. 자동 부팅에서는 제대로 작동하지만 부팅 후 콘솔을 다시 활성화하는 방법을 찾을 수 없는 것 같습니다.

또한 정상적으로 부팅하고 자동 부팅을 위해 커널 부팅 매개변수를 추가해 보았 loglevel=0으나 콘솔을 다시 활성화할 수 없었습니다. 나는 시도했다:

dmesg -n 4

그리고

klogd -c 4

커널 로그 수준을 KERN_WARNING(4)으로 다시 설정하려고 시도했지만 성공하지 못했습니다. 커널을 정상적으로 부팅하면 이 명령이 제대로 작동합니다.

이 주제에 관해 제가 찾은 최고의 가이드는 다음과 같습니다.자동 시작 프로세스blackfin.uclinux.org에서.

console=이상적으로 는 bootargs의 일부로 전달되지만 콘솔에서 입력을 받아들이고 비밀번호가 입력되면 출력을 다시 활성화하는 uBoot의 자동 모드를 사용하고 싶습니다 .

답변1

다른 사람이 이 문제에 직면할 경우에 대비해 저는 좋은 해결책을 찾지 못했습니다. 결국 u-boot와 Linux 커널 직렬 드라이버를 해킹하고 기본적으로 비밀번호가 입력되었는지 확인했습니다. 그렇다면 코드가 정상적으로 실행되도록 허용합니다. 그렇지 않은 경우 실제로 콘솔에 아무 것도 인쇄되지 않도록 함수에서 돌아옵니다.

커널의 경우 receive_chars() 함수를 편집하여 비밀번호(입력)를 찾고 Transmission_chars()를 편집하여 출력을 마스킹했습니다. bootargs의 일부로 비밀번호를 전달하도록 u-boot에 요청했습니다. 비어 있으면 비밀번호가 이미 입력된 것이므로 특수 코드는 무시됩니다. 값인 경우 receive_chars()를 통해 입력 문자를 가져와서 bootargs에 저장된 문자열과 비교합니다.

u-boot에서는 CONFIG_AUTOBOOT_KEYED 및 관련 기본 매크로만 사용하여 비밀번호를 입력합니다. 그런 다음 common/cmd_bootm.c를 변경하여 console= 값을 마스크하기 위해 fixup_silent_linux()를 호출하지 않고 위에서 설명한 대로 커널이 이를 처리하도록 했습니다.

이것이 다른 사람들에게 도움이 되기를 바랍니다.

관련 정보