1. 압축 해제 및 폴더 접근

wget을 통해 필요한 압축파일은 받은 상태라 가정 후 시작한다.

tar xfvz 01_startup.tar.gz 

를 통해 압축 해제 후, 폴더에 접근한다. 근데 왠걸... "-bash: cd: 01_startup: 허가 거부" 라고 뜨지 않는가?

cy@???:~/os_project$ ls -al 
합계 80
drwxrwxr-x  6 cy cy  4096  5월 10 02:31 .
drwxr-xr-x 48 cy cy  4096  5월 10 02:30 ..
drw-r--r--  6 cy cy  4096  4월 28 10:08 01_startup

ls -al 을 보면, read권한이 없어 문제 없는듯 보이지만, root가 아닌 계정에서 폴더 접근을 위해서는 x 플래그가 켜져 있어야 한다. 아마, centos 와 달리 ubuntu에서는 root를 사용하기 보단 일반 계정에서 sudo 를 통해 작업을 하는 경우가 많기 때문일듯 하다.

sudo chmod +x 01_startup -R

 

이젠 01_startup 폴더에 접근 가능하다.

우선 필요한 프로그램 들을 설치하도록 하자.

sudo apt-get install qemu-system-arm

sudo apt-get install bison

아래 과정 중 기타 프로그램 설치가 필요할 경우 설치하도록 한다.

cy@???:~/os_project/01_startup$ make config-smdkc210 
make: arm-none-linux-gnueabi-gcc: 명령을 찾지 못했음

cp -f configs/Config-smdkc210.mk Config.mk

ubuntu의 경우 apt-get 으로 설치 가능한 툴체인 중 가장 유사한 것은 gcc-arm-none-eabi 이다. 해당 툴체인을 설치하여 사용하도록 한다.

sudo apt-get install gcc-arm-none-eabi 

수정할 부분을 찾기 위해 grep 명령어를 사용하도록 한다.

cy@???:~/os_project/01_startup$ grep "gnueab" ./* -nri
./Config.mk:6:CROSS_PREFIX            := arm-none-linux-gnueabi-
./Makefile:41:    #arm-none-linux-gnueabi-gdb -x .gdbinit
./configs/Config-smdkc210.mk:6:CROSS_PREFIX            := arm-none-linux-gnueabi-
./configs/Config-rpi2.mk:6:CROSS_PREFIX            := arm-none-linux-gnueabi-
./configs/Config-rpi1.mk:6:CROSS_PREFIX            := arm-none-linux-gnueabi-

찾아진 부분들을 모두,  arm-none-linux-gnueabi- 에서  arm-none-eabi- 로 바꾸도록 한다.

(이는 gcc-arm-linux-gnueabi 을 설치 후, arm-none-linux-gnueabi- 에서  arm-linux-gnueabi- 로 바꾸어도 상관 없다.)

 

이제 make 를 하면 컴파일이 완료 됨을 확인 가능하다.(sudo make 로 할 필요가 있다. )

 

여기까지 하고, 끝낼 수 있으면 좋겠지만...

나는 SSH 환경에서 작업을 하고 싶다. 그래서 Makefile 을 좀 더 자세히 보기로 하였다.

 35 run: all
 36         gnome-terminal --hide-menubar -e "qemu-system-arm -M smdkc210 -display none -serial stdio -kernel $(TARGET)" &

Makefile 을 통해 어짜피 gnome-terminal 을 통해 qemu 결과를 봄을 확인하였다. 즉, display가 필요없다는 뜻 이다.

따라서 run 을 아래와 같이 수정하도록 한다.

 35 run: all
 36         qemu-system-arm -M smdkc210 -nographic -kernel $(TARGET)

gnome-terminal 로 새로운 터미널로 열지 않으려고 하기 때문에 gnome-terminal 을 지웠다.

-serial stdio 를 사용할 경우, stdio 가 qemu의 serial 과 연결되어, 이후 사용에 문제가 생기므로 지웠다.

-display none 대신 -nographic 을 사용하였다.

(serial 이 nographic 을 사용 시 정상적으로 입력/출력 된다고 믿고있다. 이후 serial 사용 코드 사용 시 재확인 필요하다.)

 

아래와 같이 정상적으로 실행 됨을 확인 가능하다.

cy@???:~/os_project/01_startup_ubuntu$ sudo make run
make[1]: Entering directory `/home/cy/os_project/01_startup_ubuntu/kernel'
make[2]: Entering directory `/home/cy/os_project/01_startup_ubuntu/kernel/mach-s5pc210'
arm-none-eabi-ld -nostdlib -nostartfiles -nodefaultlibs -static -X -r startup.o   interrup.o  uart.o   -o built-in.o
make[2]: Leaving directory `/home/cy/os_project/01_startup_ubuntu/kernel/mach-s5pc210'
arm-none-eabi-ld -nostdlib -nostartfiles -nodefaultlibs -static -X -r mach-s5pc210/built-in.o   event.o  interrupt.o  lib.o  main.o  mutex.o  scheduler.o  task.o  test.o  timer.o -o built-in.o
make[1]: Leaving directory `/home/cy/os_project/01_startup_ubuntu/kernel'
arm-none-eabi-ld -nostdlib -nostartfiles -nodefaultlibs -static -X -T /home/cy/os_project/01_startup_ubuntu/kernel/mach-s5pc210/kernel.lds -N kernel/built-in.o /usr/lib/gcc/arm-none-eabi/4.8/libgcc.a -o baekos.elf
arm-none-eabi-nm baekos.elf | grep -v '\(compiled\)\|\(\.o$\)\|\( [aUw] \)\|\(\.\.ng$\)\|\(LASH[RL]DI\)' | sort > Symbols.map
arm-none-eabi-objcopy -O binary -R .note -R .comment -S baekos.elf baekos.img
/bin/cp -f baekos.img /tftpboot

     Compile Result
===========================================================
   text       data        bss        dec        hex    filename
   5188          4      39664      44856       af38    baekos.elf
===========================================================

qemu-system-arm -M smdkc210 -nographic -kernel baekos.img
smdkc210 board supports only 2 CPU cores. Ignoring smp_cpus value.

Starting Baek's Education RTOS Kernel..............

(종료를 위해서는 ctrl +a +x 를 입력하면 된다.)

 

현재 하는 삽질

 - raspi2 QEMU 를 발견하였다. 하지만, 커널 로드를 실패하는건지, uart출력의 문젠지(GPIO 가 없으므로...) 화면이 나오지 않아 확인중이다. baekos 가 아닌 raspi2 용 리눅스는 실행됨을 확인하였다.

참고 : http://blog.3mdeb.com/2015/12/30/emulate-rapberry-pi-2-in-qemu/

번호 제목 글쓴이 날짜 조회 수
27 2019년에 os 개발스터디 진행이 불가능한가요? mzk8086 2019.07.01 219
26 OS개발 스터디 파하였나요? [1] 천재깔창 2017.07.31 676
25 중단되었나요? 천재깔창 2017.07.16 325
24 [아키텍쳐/운영체제] 4주차(20170604) 스터디 로그 목태양 2017.06.04 249
23 [아키텍쳐/운영체제] 4주차(20170604) 스터디 장소 공지 목태양 2017.06.01 66
22 [아키텍쳐/운영체제] 3주차(20170528) 스터디 로그 목태양 2017.05.28 84
21 [아키텍쳐/운영체제] 3주차(20170528) 스터디 장소 공지 [1] 목태양 2017.05.25 56
20 [아키텍쳐/운영체제] 2주차(20170521) 스터디 로그 [1] 목태양 2017.05.21 99
19 [아키텍쳐/운영체제] 서울창조경제혁신센터 예약 반려 [3] allan 2017.05.22 114
18 [아키텍쳐/운영체제] 2주차(20170521) 스터디 장소 공지 [7] 목태양 2017.05.19 135
17 [아키텍쳐/운영체제] 2주차 스터디 장소 관련 [7] 목태양 2017.05.17 94
16 [아키텍쳐/운영체제] 2주차 스터디 참석 여부 반영 부탁드립니다. [2] 목태양 2017.05.15 95
15 [아키텍쳐/운영체제] 1주차(20170514) 스터디 로그 [3] 목태양 2017.05.14 232
14 GIT 공부 자료들 [6] EeS 2016.07.12 810
13 아 죄송합니다. qtopia 2016.08.08 246
12 How to Context switching in BeakOS? [1] EeS 2016.06.22 322
» ubuntu 에서 baekos 를 QEMU 로 돌리기 위한 삽질기(1) [3] EeS 2016.05.10 1267
10 ARM Instruction 임시값 로드 관련. titititi 2016.05.29 190
9 qemu에서 s5pc210의 entry가 0x40010000 번지인 이유 [3] 아이엠푸 2016.05.08 417
8 이번 주 스터디 장소입니다. [1] 옹알이 2016.05.07 233
XE Login