kernel 시작 과정 중 디버깅 인쇄
3145 단어 커널 노트
이 함수들은kernel/arch/arm/kernel/debug에 정의되어 있습니다.S에서는 컨텐트를 커널에 컴파일하려면 make menuconfig에서 Kernel low-level debugging functions가 필요합니다.
2. C 언어 단계 시작 초기에 linux 시스템이 시작되는 초급 단계입니다. "진짜"console 드라이브는kernel에 불러오지 않았습니다. 그러나 이 때 커널을 디버깅하기 위해 정보를 출력해야 합니다. 그러면early printk를 사용해야 합니다. 그 실현은 두 부분을 포함합니다. 하나는earlyprintk의api, 다른bootconsole 드라이브입니다.(1)early_printk 함수는kernel/kernel/printk에 있습니다.c 파일에서 이루어진 (2)bootconsole 드라이브는kernel/arch/arm/kernel/earlyprintk.c 파일에서 구현
early 사용하기printk 모듈, Early printk를 사용할 수 있도록make menuconfig에서 컴파일해야 합니다.실제로 Early에서...printk.c에서bootconsole 구동에 대한 실현도 앞의 어셈블리 단계에서 이루어진 코드printch로 호출된 것이다. 즉, 최종 인쇄에서 호출된 베이스 함수는 모두 어셈블리에서 이루어진 것이다.구체적인 Makefile 및 Kconfig는 다음과 같이 의존 관계가 있습니다.
kernel/arch/arm/kernel/Makefile
obj-$(CONFIG_DEBUG_LL) += debug.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
Kernel/arch/arm/Kconfig.debug
config DEBUG_LL
bool "Kernel low-level debugging functions "
depends on DEBUG_KERNEL
config EARLY_PRINTK
bool "Early printk"
depends on DEBUG_LL
EARLYPRINTK는 DEBUG에 의존한LL의, 즉 능숙한earlyprintk, 반드시 DEBUGLL이어야 돼.earlyprintk.c:
static int __init setup_early_printk(char *buf)
{
printk("%s enter
", __func__);
register_console(&early_console);
return 0;
}
early_param("earlyprintk", setup_early_printk);
커널이 설정되어 있지만 커널에 setup을 호출해야 합니다early_printk는 u-boot에서 내부 핵에 인삼을 전달할 때bootargs에 인자'earlyprintk'를 추가해야 한다. 예를 들어 다음과 같다.
set bootargs ‘console=ttyS5,115200,115200n8 androidboot.console=ttySAC0 uhost0=n ctp=2 skipcali=y vmalloc=384m lcd=S70 **earlyprintk**’
3. C 언어 시작 후 이것은 진정한 consolo 드라이브가 불러온 후에 debug를 사용하지 않습니다.S의 출력이 실현된 것이 아니라, printk의 출력으로 linux 표준 tty 드라이브를 따로 실현했다. 이것이 바로 우리가 자주 사용하는pirntk이다.
그러니까kernel이 시작되지 않지만 알림 메시지가 없을 때early printk를 켜서 볼 수 있습니다.
커널이 시작되었을 때, 일부 프린터 문장은 포트가 등록되기 전에 호출되었을 수도 있기 때문에, 표시할 수 없습니다.early printk는 바로 이 기능을 실현합니다.다음 커널 구성을 선택하면 됩니다. Kernel hacking -> Kernel low-level debugging functions -> Early printk 예를 들어 커널 인쇄: Starting kernel...
Uncompressing Linux… done, booting the kernel. 이어서 아무것도 없어졌다. 이때 엘리프릭을 선택했더니 역시kernel이 막 시작한 메시지를 보았다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kernel 시작 과정 중 디버깅 인쇄내부 핵의 가동 과정은 여러 군데와 관련되고 가동 과정의 코드는 어셈블리 코드와 C 코드로 구성된다.그중의 인쇄 함수도 여러 개가 있다.1. 어셈블리 단계 인쇄 함수는 다음과 같은 몇 가지를 포함한다. 이 함수들은k...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.