학습을 진행하기 위에 데스크탑에 Ubuntu를 새로 설치하고, 가상 보드를 사용하기 위해 QEMU와 크로스 컴파일러, 디버거를 설치하였다.
$ sudo apt install gcc-arm-none-eabi
gcc 크로스 컴파일러에는 여러가지 종류가 있는데, 'gcc-arm-플랫폼-ABI타입' 으로 나타낼 수 있다. 플랫폼에 linux를 사용하면 리눅스의 실행 파일을 만들게 되고, none을 사용하면 플랫폼이 없는 즉, 펌웨어의 실행 바이너리를 만들게 된다. ABI는 Application Binary Interface의 약자로 C언어에서 함수 호출 방법을 정해놓은 규약을 의미한다. eabi는 Embedded ABI의 약자로 임베디드 환경에서 사용하는 ABI를 정해놓은 것이다. 윈도우나 리눅스 등에서 사용하는 ABI와 EABI의 차이는 동적 링크의 지원 여부이다. 운영체제가 있는 경우에는 운영체제가 라이브러리를 관리하고 동적으로 링킹해주는 반면 펌웨어에서는 이를 담당할 운영체제가 없기 때문에 동적 라이브러리가 지원되지 않는다.
$ sudo apt install gdb-multiarch
$ sudo apt install qemu-system-arm
$ qemu-system-arm -M ? | grep realview-pb-a8
QEMU는 가상 머신으로 사용할 수 있는 에뮬레이터이다. QEMU는 여러가지 머신을 지원하는데, 해당 실습에서는 교재를 따라 realview-pb-a8을 사용한다.