'gcc 4.7'에 해당되는 글 1건

  1. 2012.10.16 Linux Kernel 3.x.x 에서 Virtualbox돌릴시 생기는 문제점 해결 8

Linux Kernel 3.x.x 에서 Virtualbox돌릴시 생기는 문제점 해결

아.. 드디어 몇달간 미루던 문제를 해결했습니다..


아치에서 virtualbox안돌아가는 문제....

아마 아치리눅스에서 기본적으로 제공하는 커널을 사용한다면, 별 문제 없었겠지만

(한국 아치포럼 사이트가 조용했기 때문에... 뭐 그마져도 지금은 닫혀있지만!!!)

저처럼 혼자서 괜히 쓸데없이 바닐라 커널가지고 컴파일한 사람은 말이에요...

여튼 증상은 이렇습니다... "starting virtual machine..." 이 메세지가 나오다가, 잠시후


<바로  이런 거지 같은 상황!!!>


가상터미널(ctrl + alt F7) 같은 화면으로 점프, 그리고 거기서 virtualbox 에러메세지가 dump 됩니다.


그리고 다시 ctrl+alt+F1을 누르고 다시 ctrl+alt+F7을 눌러서 X로 돌아옵니다.

그러면 처음에 저 망할 화살표 0%가 멈춰진채로 가만히 있게 됩니다.

이후에는 모듈도 안내려가고, 프로그램도 suspend 걸려버립니다.

그리고 몇초 지나면 wdm이 프로세스 맛이 갔다고 끄라고 메세지가 나옵니다;; (적어도 오픈박스는 그랬어요!)

pstree쳐서 보면  VBoxSVC, VBoxXPCOMIPCD, VirtualBox 이런 프로세스가 그대로 살아 있습니다..

별수있습니까? killall로 일단 다 날리고...

구글링... 을 했죠.. 근데 이거 은근히 잘 검색이 안되더라구요... virtualbox trac? page 비슷한게 있어서 거기서 주로 찾아봤는데,

결과도 제대로 안나왔는데 close되고 뭐 이래서;;;

그렇게 찾다가 나온 결과를...


"Kernel was compiled with GCC 4.6, while modules with GCC 4.7."

- https://bbs.archlinux.org/viewtopic.php?pid=1108842


요 말을 보긴 했는데...

"이거... 나는 둘다 (virtualbox, llinux kernel) gcc 4.7로 컴파일 했으니까, 상관 없겠지~ 라고 생각해서, 그냥 무시했습니다.....

그리고 구글링을 한참 더 하고 나서...

virtualbox forum에 찾아보니... 뒤에 깨알같이...


The problem is gcc 4.7
A module rebuild with gcc 4.6 solve this problem.

- https://forums.virtualbox.org/viewtopic.php?f=7&t=49409


대놓고 적어놨네여 gcc 4.7이 문제라고 -_-........

이때야 알았습니다... 이제서야 gcc 4.6으로 virtualbox module을 rebuild해야 되는구나.. 하고 인식, 좀 바보 같네여....

거 발견하고도.... gcc 4.7 -> gcc 4.6으로 다운그레이드 하면, 시스템 패키지가 다 꼬여 돌아갈게 당연한거였기때문에

(애초에 pacman에서 시끄러운 소리 내기도 하고...) 다른 방법을 엄청나게 생각하고 있었는데... 답이 안나와 아...

하고 막 다른 해결 방법을 찾기위해서, 구글링을 하고 있었는데....

왠걸 누군가 AUR에 gcc46이라는 패키지가 있더라고요... 난 왜 이런 생각을 못했을까...

다운그레이드 안하고 그냥 이름 다른 패키지를 설치해도 되었던것이였잖아 ㅠㅠ... 아... 다시한번 바보를 외칩니다 ㅠㅠ...

마침 링크를 타고 들어가니 어떤 차칸분께서, 바이너리 링크를 제공하고 계셨습니다...

덕분에 컴파일 안하고 바로 바이너리로 설치 완료!

virtualbox module 컴파일할때  gcc위치를 어떻게 바꿀수 있는 옵션이 있나 잠시 찾아봤다가 그냥 빡쳐서...

mv로 gcc의 파일이름을 바꾼다음에(4.7->4.6) , vboxbuild하고 다시 원래대로(4.6->4.7) 돌려놨습니다..

그리고 재부팅후 virtualbox를 돌려보니깐 잘 돌아가더군요... 만세! 된다!


<당연하게도, 심리즈 모드도 잘 되요~ 모든게 이전과 같구나~>


ps; 애초에 virtualbox 모듈이 왜 gcc버전을 탄다는게 약간 의아..아주 이해 못가는 편은 아니지만, 여태까지 이런현상은 처음이라...

ps2; 씁... 버그 고쳐지기 전까지 커널컴파일 할때마다 귀찮은짓좀 해야겠네요.

_M#]


<<10월 16일 내용 추가>>

더 근본적인 해결방법을 찾았습니다...

https://forums.virtualbox.org/viewtopic.php?f=7&t=50960&start=15#


아치에선 다음과 같이 적용하면 될거 같네요.

1, 일단 dkms에 virtualbox module이 등록되어있다면, 제거

# dkms remove vboxhost/$(pacman -Q virtualbox|awk {'print $2'}|sed 's/\-.\+//') -k $(uname -rm|sed 's/\ /\//')


2, virtualbox-host-source패키지의 헤더파일을 편집합니다.

# vi "$(yaourt -Ql virtualbox-host-source | grep 'vboxdrv/include/iprt/cdefs.h' | cut -d ' ' -f2-)"


3, 헤더파일에서 다음을 찾아서 회색부분을 주석처리하고 검은색 부분만 남겨둡니다. (builtin_expect로 검색하시면 편합니다)

/*
#if defined(__GNUC__)
# if __GNUC__ >= 3 && !defined(FORTIFY_RUNNING)
#  define RT_LIKELY(expr)       __builtin_expect(!!(expr), 1)
#  define RT_UNLIKELY(expr)     __builtin_expect(!!(expr), 0)
# else
#  define RT_LIKELY(expr)       (expr)
#  define RT_UNLIKELY(expr)     (expr)
# endif
#else  */

# define RT_LIKELY(expr)        (expr)
# define RT_UNLIKELY(expr)      (expr)

//#endif


4, dkms에 재등록

# dkms install vboxhost/$(pacman -Q virtualbox|awk {'print $2'}|sed 's/\-.\+//') -k $(uname -rm|sed 's/\ /\//')


5, Reboot (아마 커널패닉이 일어날정도면 rmmod로 모듈제거도 제대로 안될 확률이 높으므로... 그냥 재부팅 해주세요)


정상적으로 잘 작동하는걸 확인했습니다~!


근데 이렇게하면 패키지버전업 + 모듈컴파일 상황이 겹칠경우 문제가 발생하겠네요 으음..

prev 1 next