리눅스 실행
작업중인 커널을 다운로드하는 대신 기존 커널 소스를 재사용해 커널을 해킹한 후 개발 용으로 테스트 한다.
최소한의 리눅스 이미지 사용.
설치
sudo apt-get install git qemu
sudo apt-get build-dep busybox linux-image-$(uname -r)
mkdir -p ~/bin
cd ~/bin
git clone --recursive https://github.com/cirosantilli/runlinux
echo 'PATH="$PATH:'$(pwd)'/runlinux"' >> ~/.bashrc
. ~/.bashrc
예제
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v4.2
runlinux
처음 부팅시 시간이 걸린다.
부팅 되면 커널 소스를 해킹
runlinux
사용자 정의 구성 외부 트리 빌드:
export KBUILD_OUTPUT="$(pwd)/../build"
make menuconfig
runlinux
기존 구성 파이리이 없으면 KBUILD_OUTPUT, make defconfig 사용.
QEMU 추가 옵션 설정.
runlinux -- -bios ~/path/to/OVMF.fd
bios 대신 UEFI x64 사용시 다운로드.
https://sourceforge.net/projects/edk2/files/OVMF/OVMF-X64-r15214.zip
실 하드웨어 실행
빌드 디렉토리에 main.img 파일 생성:
runlinux -i
usb 장치 연결
sudo lsblk
sudo fdisk -l
usb 이미지 굽기
sudo dd if=main.img of=/dev/sdx
실제 컴퓨터 바이오스 부팅 시퀀서 USB 변경
이미지 동작 확인.
qemu-system-x86_64 -enable-kvm -hda main.img
선택사항
사용자 정의 initrd 생성
n
BysyBox 무시 한 후 사용자정의 루트파일 시스템 사용.
runlinux -n /path/to/my/directory/
runlinux -n /path/to/my/init
경로 설정:
- 디렉토리 압축
리눅스 부팅시 가장 먼저 /init 디렉토리를 찾아 실행함.
- init 파일을 사용하면 압축된 파일 시스템의 루트 이름이 바뀜.
initrd 참고: https://nautiluslee.blogspot.com/2019/01/init-hello-world.html
GDB 커널 디버깅:
../runlinux/runlinux -g
CONFIG_DEBUG_INFO 필요한 경우, 커널 옵션을 설정한 후 커널 다시 빌드.
QEMU를 실행 후 GDB 활성화.
디버깅 준비 예:
hbreak start_kernel
list
continue
댓글 없음:
댓글 쓰기