Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

debug로 컴파일시 부팅 안됨 #127

Closed
jeehoonkang opened this issue Aug 11, 2020 · 8 comments · Fixed by #134
Closed

debug로 컴파일시 부팅 안됨 #127

jeehoonkang opened this issue Aug 11, 2020 · 8 comments · Fixed by #134
Assignees

Comments

@jeehoonkang
Copy link
Member

다음과 같이 바꿔서 make qemu하면 부팅이 안됩니다:

diff --git a/Makefile b/Makefile
index 69f3956..1281e4d 100644
--- a/Makefile
+++ b/Makefile
@@ -10,8 +10,10 @@ ifeq (qemu-gdb, $(firstword $(MAKECMDGOALS)))
        RUST_MODE = debug
        XBUILD_MODE :=
 else
-       RUST_MODE = release
-       XBUILD_MODE := --$(RUST_MODE)
+       # RUST_MODE = release
+       # XBUILD_MODE := --release
+       RUST_MODE = debug
+       XBUILD_MODE :=
 endif
 
 # OBJS = \

우리가 버그때문에 낭비하는 에너지가 큰데, 이번에 노력을 들여서 한번 잡고 넘어가면 좋겠습니다. 디버그 빌드로 돌려봐서 버그 잡아봅시다...

@coolofficials
Copy link
Collaborator

coolofficials commented Aug 11, 2020

교수님, 어제 정우 님과의 대화 중에 #109 (comment) 의 코멘트가 gdb-debug 모드가 잘 해결되면 필요 없다는 의견 나왔습니다. 교수님의 의견이 궁금합니다. (#[no_mangle] 을 많이 추가하는 issue입니다.)

@kimjungwow kimjungwow self-assigned this Aug 12, 2020
@kimjungwow
Copy link
Collaborator

#125 를 보기 전 이 이슈부터 고민해보겠습니다.

@kimjungwow
Copy link
Collaborator

교수님께서 수정하신 Makefile을 이용해 make qemu 실행시 발생하는 에러를 공유합니다.
panic: bget: no buffers
image

@kimjungwow
Copy link
Collaborator

#126 이 머지된 후 Makefile 내에서 --release 없이 cargo xbuild를 실행하면 다른 에러가 뜹니다. 원인 파악중입니다..
image

@kimjungwow
Copy link
Collaborator

  • rv6의 iget에서 panic이 뜬 것은, freerange()0x80063b18 ~ 0x88000000에 쓰레기 값을 넣을 때 Icache가 들어갈 주소 0x80067020 에도 쓰레기 값을 넣기 때문입니다.
  • xv6에서는 freerange()0x8002501c ~ 0x88000000에 쓰레기 값을 넣을 때 Icache의 주소 : 0x8001eef0 는 건드리지 않습니다.
  • rv6와 xv6에서 freerange를 실행할 때 pa_end의 값은 같지만 pa_start가 다릅니다.
  • 계속 원인 파악중입니다

@coolofficials
Copy link
Collaborator

#129 와 관련이 있을까요?

@kimjungwow
Copy link
Collaborator

#129 와 관련이 있을까요?

  • 관련이 있는지는 모르겠는데, kernel.ld에서 정의한 end를 rv6에서는 받아오지 않고 있었습니다. 우선 endkernel.ld에서 다음과 같이 정의됩니다.
    PROVIDE(end = .);
  • xv6에서는 아래와 같이 kernel.ld로부터 end를 받아옵니다.

    rv6/kernel/kalloc.c

    Lines 14 to 15 in ffa7c17

    extern char end[]; // first address after kernel.
    // defined by kernel.ld.
  • 하지만 rv6에서는 kernel.ld로부터 end를 받지 않고, 자체적으로 END를 정의합니다. extern "C"를 이용해 받아와야 할 것 같습니다.
    pub static mut END: [u8; 0] = [0; 0];
  • 이것이 freerange()와도 관련이 있을 것 같습니다.

@kimjungwow
Copy link
Collaborator

kimjungwow commented Aug 12, 2020

static mut 변수들을 end 앞으로 가져오는 것은 #131 에서 다루겠습니다. (이것을 해결해도 디버그 컴파일시 부팅이 안 되어서..)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants