2012-01-19 2 views
3

리눅스 커널을 크로스 컴파일했습니다 (i686의 ARM 용 - Cross-LFS 사용). 이제 QEMU를 사용하여이 커널을 부팅하려고합니다.크로스 컴파일 된 Linux 커널을 디버깅하는 방법?

$ qemu-system-arm -m 128 -kernel /mnt/clfs-dec4/boot/clfskernel-2.6.38.2 --nographic -M versatilepb 

그런 다음이 줄을 표시하고 무한 시간 기다립니다 !!

따라서 커널을 디버깅하여 정확히 무슨 일이 일어나고 있는지 연구 할 수 있습니다.

나는이 커널 빌드를 처음 사용하고있다. 내 커스텀 빌드 커널을 디버깅하는 데 도움이 될 수 있는가? 커널이 고장 났을 가능성이 있습니까? (나는 그렇게 생각하지 않는다. b'se 컴파일 할 때 오류가 없다.)

그리고 내 목표는 아주 최소한의 리눅스 OS를 빌드하는 것이다. 쉬운 것 등 어떤 툴 체인에 대한 어떤 제안 등 드라이버처럼 내 요구 사항에 따라 유연한 &,

감사합니다

+0

누군가 나를 도와주세요. – inblueswithu

+0

누구든지이 같은 것을 알고 있습니까 ?? PLZ 도움말 – inblueswithu

답변

4

QEMU를 사용하여 GDB를 사용하여 커널을 디버그 할 수 있습니다. -s -S 옵션을 사용할 수 있습니다. 간단하고 안정적인 툴체인을 원한다면 DENX (http://www.denx.de/wiki/DULG/ELDK)의 ELDK을 사용할 수 있습니다.

당신은 (그것은 마지막 버전은 아니지만, 당신이 생각 가지고)과 같이 설치할 수 있습니다 :

wget http://ftp.denx.de/pub/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso 

sudo mkdir -p /mnt/cdrom (필요한 경우) 명령은 위의 툴체인을 설치해야합니다

sudo mount -o loop arm-2008-11-24.iso /mnt/cdrom 

/mnt/cdrom/install -d $HOME/EMBEDDED_TOOLS/ELDK/ 

$HOLE/EMBEDDED_TOOLS/ELDK 이하 (필요한 경우 수정하십시오)

echo "export PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin" >> $HOME/.bashrc 

다음과 같이 ARM 도구 체인 버전을 확인할 수 있습니다.

arm-linux-gcc -v 

hello_world를 테스트 할 수 있습니다.프로덕션 커널을 컴파일하려면 지금

hello_wrold: ELF 32-bit LSB executable, ARM, version 1 (SYSV) 

을이 같은 C 프로그램 : 사용자가 입력

arm-linux-gcc hello_world.c -o hello_world 

그리고 : 파일 hello_wrold을 바이너리의 대상 아키텍처를보고는,이 같은해야한다 , 당신은 그것을 최적화해야 (내가 busybox을 사용하는 것이 좋습니다) 당신은 이제 하나의 테스트를 원하는 경우,이 단계를 수행하십시오 :

  1. 생성하는 스크립트를 당신의 체인 도구 set_toolchai을 설정 n.sh :

    #! /usr/bin/sh

    PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin

    ARCH=arm

    CROSS_COMPILE=arm-linux-gnueabi-

    export PATH ARCH CROSS_COMPILE

그리고 당신의 스크립트를 실행 (source ./set_toolchain.sh)

  1. 는 리눅스 커널을 다운로드하고 (의는의 2.6.x를 가정 해 봅시다 압축을 풀고, 그것이 이전 커널하지만이) 컴파일 오류없이 작동하는지 많은 기회가있다.

    여기에 우리가, 당신이 ARM EABI에 옵션 OABI을 수정 make menuconfig를 사용하여 설정해야 할 수도 있습니다 다양한 칩을 사용
    cd ~/linux-2.6.29/arch/arm/configs 
    make versatile_defconfig 
    

    ,이 옵션은

    Kernel features menu 미만 : 당신의 압축을 푼 커널 내부

이 모든 단계가 끝나면 커널을 컴파일 할 수 있습니다.

make 

자세한 컴파일을 원하면 make v=1

다음은 커널이 arch/arm/boot/zImage입니다.

희망 도움말.

감사합니다.

0
나는 당신의 구성 부분 Kernel hacking에서 옵션을 활성화하여 커널을 빌드하는 제안

파일. 그런 다음 kdb 또는 kgdb을 사용하면 더 쉽게 사용할 수 있지만 gdb을 실행하는 다른 컴퓨터가 필요합니다.

`

0

Qemu와 GDB를 연결할 수도 있습니다. Qemu에는 GDB 서버를 실행하는 -s 및 -S 옵션이 있으며 localhost : 1234에 대한 TCP를 통해 연결할 수 있습니다. 그런 다음 GDB에서 커널 이미지 (압축 해제 된 이미지)를로드하고 커널 부팅 거리를 확인할 수 있습니다.

관련 문제