레이블이 kernel인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kernel인 게시물을 표시합니다. 모든 게시물 표시

raspberry pi linux kernel compile

raspberry pi linux kernel compile

라즈베리파이에서 디바이스 드라이버를 작성하거나 커널을 수정하기 위해서는 라즈베리파이의 커널 소스를 참조하여 컴파일하기 때문에 라즈베리파이의 커널 소스를 다운 받아야한다.

라즈베리파이의 커널소스와 툴은 github에서 다운받을 수 있다.

git clone http://github.com/raspberrypi/linux.git
git clone http://github.com/raspberrypi/tools

나는 작업디렉터리를 $HOME으로 홈으로 설정하고 홈밑에 linux, tools디렉터리를 받았다.

먼저 커널컴파일과 드라이버컴파일등에 필요한 라즈베리파이커널용 컴파일러를 PATH에 등록하여 사용하기 쉽게 해보자.


/home/dorkiz/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
의 경로에 가면 툴들이 있다.

~/ 경로에 .bashrc파일에 이 툴들의 경로를 추가해준다.


그러면 환경변수에 설정되어 바로 참조할 수 있다.

그리고 라즈베리파이에 맞는 커널 컴파일 설정을 해준다.
arm-linux-gnueabi-gcc를 찾을수 없다는 에러가 떳었는데 워크피시 리눅스를 32비트 바꾸고 해결 할 수 있었다.


컴파일 설정을 해주고나면 make로 커널을 컴파일 할 수 있다.


컴파일 과정은 한 15분정도 걸린다.
컴파일이 완료되면 /home/dorkiz/linux/arch/arm/boot 디렉터리가 생성된다.


커널 Image와 압축된 zImage가 있다
컴파일된 커널 Image 파일은 바로 사용할 수 없기 때문에 kernel.img로 바꾸어 주어야한다.
이전에 받은 툴중에 로드가능한 라즈베리 파이용 커널 이미지를 만드는 툴이 있다.


/home/dorkiz/tools/mkimages/imagetool-uncompressed.py
를 사용하여 /home/dorkiz/linux/arch/arm/boot/zImage를 kernel.img로 바꾸어준다.

이제 라즈비언이 설치되어있는 SD카드 안에 kernel.img를 방금 만든 kernel.img로 교체하고 SD카드를 부팅하면 내가 컴파일된 kernel.img가 로드되게 된다.
Read more

windows xp kernel debugging

windows xp kernel debugging

윈도우 디버거는 크게 유저모드 디버거와 커널모드 디버거로 나눌수 있다.
유저모드 디버거는 유저권한으로 윈도우 프로그램을 디버깅 할수 있고 커널모드 디버거는 ring0 권한으로 윈도우 커널까지도 디버깅 할 수 있다.
윈도우를 공부하거나 루트킷등을 공부하다 보면 커널영역의 메모리를 확인해야 할 필요가 있다.

이번엔 커널모드 디버깅을 할 수 있는 환경을 구성해보겠다.
프로세스를 디버깅하게되면 프로세스는 동작을 안하고 eip가 잡혀있다. 커널모드는 윈도우자체를 디버깅 하는 것이기 때문에 윈도우가 멈춰있는다. 그렇기 때문에 2대의 컴퓨터가 필요하다. vm ware으로 가상머신을 실행하여 2대의 컴퓨터 환경을 구성하고 시리얼통신을 통해서 vm의 윈도우를 디버깅 할 수 있는 환경을 만들 수 있다.
디버거 컴퓨터에는 WDK(+symbols)를 설치하고 windbg를 사용하여 vm의 윈도우를 디버깅 할 것이다.

먼저 vm의 windows xp에 디버깅이 가능한 부트스위치를 추가해 주어야한다.
xp의 경우에 c:\boot.ini파일을 수정하여 부트스위치를 추가 할 수 있다.
boot.ini파일에

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=COM1

를 써넣어 시리얼포트로 디버깅을 가능한 디버그모드를 추가 할 수 있다.
vm의 소프트웨어적인 설정은 완료되었고 이제 시리얼포트를 꽃는 작업을 해주어야 한다.


호스트로 vm을 디버깅 할 것이기 때문에 named pipe를 선택하여 dafault값인 \\.\pipe\com_1을 추가해 준다.
vm에 부트모드를 추가해 주고 가상으로 시리얼포트를 꽃음으로 vm의 디버깅 할 환경 구성은 완료되었다.

이제 호스트컴퓨터의 windbg를 이용해서 vm을 디버깅해보자.


file -> kernel debug를 클릭하고 vm에 설정한 pipe의 이름을 적어준다.
호스트와 vm이 시리얼통신을 할 수 있게 연결이 되었다. 확인을 누르고 vm을 실행 시키면


boot.ini파일을 수정하여 추가한 디버그모드가 뜨게 된다. 디버그모드를 선택하면 커널 디버깅을 할 수 있다.
이제 디버깅을 할 수 있는 환경이 구성되어 있지만 함수이름,구조체,변수이름등을 포함하는 심볼파일이 없기 때문에 디버깅이 매우 힘들다. 심볼파일을 받아 와야한다.

File -> Symbol file path를 선택하고
SRV*.*http://msdl.microsoft.com/download/symbols
를 입력하여 마이크로소프트 심볼서버로부터 심볼을 받아올수 있다.


커널 디버깅을 할 수 있는 환경이 구성되었다.
Read more