도구를 읽는 리눅스 커널 소스 코드
리눅스에서 물론 창문을 선호하는 소스 통찰력의하지만 정말 좋은 도구는 어떤 소스 통찰력을 없지만, 대안이 많이있다,하지만 느낌 절대적으로 어떤 사람들이 어떤 사람들이 와인을 선택하거나, + ctags를 + cscope의 조합을 정력 선택합니다 정력에 대한 코드 리더를위한 과정의 소스 통찰력을 선택하거나 navigatror, + ctags를 + cscope의 조합이 꽤 좋은 옵션입니다,하지만 난 일식을 사용하는 경우, 도구가 할 읽기 소스 코드와 리눅스 환경과 개인적인 느낌을 일식 훨씬 쉽게의 조합보다 더 정력 + ctags를 + cscope를.
다음 구성은 일식 리눅스 환경 계획을 장착 :
다운로드 일식 : http://eclipse.org/downloads/?osType=linux
Eclipse 환경 설정 프로그램 : http://forum.ubuntu.org.cn/viewtopic.php?t=183803
두 일식 + QEMU 수 리눅스 소스 코드 컴파일러와 디버거
처음 커널 사용 QEMU + 통찰력 또는 QEMU + DDD, insgiht보다 더 많은 인터페이스에 비해 사람의 조합을 디버깅하지만 10.04 우분투 버전 이상, 인사이트에 대한 기본 지원을 삭제 만 소스 코드 컴파일러 설치를 다운로드 할 수 있습니다 통찰력, 과 통찰력 업데이트 할 매우 느립니다. 긴 시간 전에 누군가가 리눅스 커널 소스 코드 컴파일러와 디버깅 일식 + QEMU를 수행하는 데, 나는 마침내 모든 후, 디버거의 일식은 매우 강력하다, 시도 할 시간을 훈제했다.
도구의 조합 : C / C ++ 리눅스 개발자를위한 이클립스 IDE +는 QEMU-0.12.3은 (바람직 평방 미터로, 불행하게도 컴퓨터가 너무 오래되어 하드웨어 가상화를 지원하지 않습니다)
1. 먼저 우리는 내가 리눅스로 들어가십시오를 선택한 커널 소스 www.kernel.org을 다운로드해야합니다. 나는 터미널에서 다음 명령을 입력 내 홈 디렉토리에 다운로드합니다.
$ 카드뮴 (뒷면의 홈 디렉토리)
$ 타르 XF 리눅스로 들어가십시오 (소스 추출)
$에서 mkdir 리눅스 2.6.32-OBJ (커널 컴파일 된 오브젝트 파일 출력 디렉토리를 생성합니다)
$ 카드뮴 리눅스 2.6.32 (커널 소스 트리의 루트 디렉토리)
$ 만들기 O = ~ / 리눅스 2.6.28-OBJ menuconfig를 (여기 우리가 커널을 구성 할, 커널 구성 파일 ~ / 리눅스 2.6.32-OBJ 디렉토리의 .config를 생성)
$ 메이크업의 mrproper
2. 다음 열려 elicpse을 우리는 환영 화면이 때 처음 열 때,
우리는 시작 화면을 해제 할 수있는 권리에 워크 벤치 이미지를 클릭. 이클립스 CDT는 아주 강한 C / C ++ IDE, 그것은 자동으로 기본 해상도 프로젝트 소스 코드와 프로젝트를 컴파일하고 지능형 메시지를 생성한다. 우리가 커널 프로세스가 일시적으로 이러한 기능을 사용하지 않습니다 디버깅하기 때문에 그러나, 그래서 당신은 그들을 닫으려면.
처음에 우리는 창 -에 갔다> 환경 설정 -> 일반 -> 작업 공간 빌드가 자동으로 옵션이 제거됩니다.
그런 다음 창 -> 환경 설정 -> C / C ++로 -> 인덱서, 아니 인덱서에 빠른 기본 C / C ++ 인덱서.
그리고 우리는 새로운 프로젝트를 생성하기 시작했다.
메뉴에서 파일 -> 새로 만들기 -> 프로젝트 ... -> C / C ++ -> C 프로젝트 및 다음을 클릭합니다.
그런 다음 대화 상자가, 리눅스 커널과 프로젝트 이름 열에서 프로젝트 이름을 입력 나타납니다. 그런 다음 사용 기본 위치 옵션 선택을 해제 할 수 있습니다. 위치에 컬럼 작성은 커널 소스 경로를 추출 하였다. 프로젝트 유형을 선택 메이크 프로젝트 -> 빈 프로젝트. 아래와 같이 리눅스 GCC 툴체인은 최종 결과를 선택 :
그런 다음 다음 버튼을 클릭 한 다음 대화 상자가 나타납니다. 이번 프로젝트의 기본 구성은 완전히 우리의 요구 사항을 충족하지 않는 때문이다. 그래서 우리는 고급 설정 버튼은 프로젝트 설정 대화 상자를 엽니 클릭합니다. 우리는 바로 우리가 설정 탭 빌더를 사용하여 기본 빌드 명령이 해제 확인 할 페이지의 해당에서 C / C ++ 빌드 옵션의 왼쪽을 선택하고 만들 수있는 새로운 빌드 명령을 지정 O = / 가정 / XXX / . 리눅스 2.6.28-OBJ 다음 파일 시스템에서 빌드 위치를 클릭 ... /home/xxx/linux-2.6.28-obj 최종 결과에 대한 OBJ 파일 출력 디렉토리를 변경하는 버튼을 아래와 같이 :
동작 옵션은 다음 공간에서 빌드 모든 (증분 빌드)을 변경, 페이지를 클릭 한 다음 변경 (기본 명령 대상 명확한 커널 OBJ 파일)을 mrproper 깨끗 될 것입니다. 어떻게 든 후 아래와 같이 :
이 시간 당신은 커널을 컴파일 할 수 있습니다. Ctrl 키 + B는 커널 컴파일을 시작합니다.
커널 컴파일. /home/xxx/linux-2.6.32-obj/arch/x86/boot/ bzImage 행에서 많은 커널 이미지에 따라 생성.
우리의 xterm에서 실행되는 가상 머신을 QEMU이 시점에서 다음과 같이 명령 줄은 다음과 같습니다
$ QEMU -s -S -hda ~ / 리눅스 0.2.img -kernel /home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage -append 루트 =는 / dev / HDA
我解释一下这个命令行上的参数。
-s 选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用
-S 选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。
-hda ~/linux-0.2.img 表示我们要运行时的硬盘 (这个文件可以在http://wiki.qemu.org/Download下到)
-kernel /home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage 表示我们要调试的内核镜像
-append root=/dev/hda 表示我们要传递给内核的参数(这里你可能感觉有点奇怪为啥是/dev/hda而不是/dev/hda1或是/dev/hda2呢?因为这个镜像仅仅是一个分区的二进制镜像,不是整个硬盘的镜像)
启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。
继续回到eclipse中,这时候我们在菜单中选择Run -> Debug Configurations ,这时候打开一个配置页面。然后我们在C/C++ Application上双击鼠标,这时在右侧的页面弹出了debug配置选项,然后我们在project一栏选择 linux-kernel ,在下面的C/C++ Application中填入/home/xxx/linux-2.6.32-obj/vmlinux,如下图所示:
然后我们单击Debugger选项页,将Debugger改为 GdbServer Debugger . 将Stop on startup at 改为start_kernel,将Connection子选项页下的Type改为TCP将Port number改为1234,最终如下图所示:
然后单击Debug按钮开始调试!这时候Eclipse会提示我们切换 Perspective ,选择是,不再提示。
这时候就开始调试内核,而且是源码级的调试!如下图:
总结:不知道是我机器烂还是咋地,eclipse+qemu虽然调试信息更加详细,eclipse的调试器也足够强大,但是每次调试前都要进行编译,时间太久了,等不起!! 哪位大侠可知道如何每次调试不要编译!!