Qemu+busybox rootfs+원격디버깅 guest장치 gdbserver 명령실행 문제

tms320c5x의 이미지

안녕하세요. hw와 비 리눅스쪽 sw개발하다 늦게 리눅스 관련 공부하는 개발자입니다. 리눅스분야는 쉬운게 하나 없네요. 그동안 편한 환경에서 개발했다는 생각이 들기도 하지만, 목적하는 개발전에 지치네요.
제 환경은, 노트북에 윈도우7과 멀티부팅으로 나눠 우분투 20.04.3을 설치했고, 디바이스드라이버를 공부하는 중인데,
그러려면 타겟이 있어야 해서 Qemu를 이용하여 추가 장치를 만들어 학습 하려는데 잘 안되네요. 설치등은 구글링해서 하고 있는데요 요약하면
목적 : 임베디드 hw에서 리눅스 디바이스드라이버 작성/디버깅
-> arm..등으로 해보고 싶지만 초보라 일단은 호스트(우분투)와 같은 x86_64를 vm 장치로 시작
. 호스트: 원래 있던 노트북(우분투리눅스)
. 타겟(게스트): 호스트에서 Qemu로 생성. 호스트 커널소스로부터 만든 리눅스이미지(bzImage)로 부팅
후 타겟에서 특정 응용프로그램을 실행하고 호스트에서 원격디버깅 하려는 것임
과정 : 1)rootfs는 busybox 통한 방법으로 rootfs.img.gz 생성(busybox 바이너리들 포함)
2)kernel 이미지는 기존 호스트에서 생성(kernel ver: 5.11.22, bzImag)
3)타겟생성을 위해 VM으로 추가장치 생성
qemu-system-x86_64 -kernel /usr/src/linux-5.11.22/arch/x86/boot/bzImage -initrd /home/dggil/Downloads/rootfs/rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh" /
-m 4096M -s

커널이나 모듈은 원격디버깅이 필요하다 하고, 그러기 위해 타겟에 gdbserver가 있어야 한다길래 상기 1) rootfs 이미지 생성 전,gdb소스 다운받고 타겟이 될 rootfs/bin에 gdbserver을 설치했습니다
gdb설치시, "/configure --prefix=/home/.../rootfs"
현 호스트와 같은 타겟 VM으로 하려니 --target은 생략했고, 호스트에서 실행하면 다른 경로에선 "gdbserver(Ubuntu..)" 로 나오고, rootfs/bin의 gdbserver는 Ubuntu 단어가 없습니다.(버전은 호스트와 같음)
이후 rootfs.img.gz 생성 후 3)처럼 실행하고, Qemu창에서 "/#./gdbserver" 실행하면 "/bin/sh:gdbserver: not found" 라며 실행이 안됩니다. echo $PATH 보면, "/bin:/sbin:/usr/bin:/usr/sbin:" 라서 경로문젠 아닌거 같은데, gdb 설치하고 자동생성된 /lib까지 path에 포함시켰는데도 안됨, 호스트에서 생성한 hello 실행파일을 rootfs 루트에 복사하고 rootfs.img.gz 다시 만들고 Qemu 실행하여 창에서 ./hello 실행하면 -static 옵션으로 컴파일 한것만 Qemu 창에서 실행되니 라이브러리가 없어서 그런가 싶은데. 원격디버깅 익히는 것이 촛점이라 구글링에서 처럼 제 rootfs이미지는 busybox로 임시로 만든건데 타겟 rootfs 디렉토리에 glibc, 동적라이브러리..등 먼저 설치해야 하나요? 호스트에서 rootfs에 설치한 gdbserver는 동적으로 설치되었던 것인가요? 아까 경로에 포함한 /lib은 gdb 설치후에 생성된 것이라 경로에 포함시켰는데도 안되던데...static 설치는 안되나요? 다운받은 gdb를 static으로 명시하여 컴파일하고자 /configure 이후 생성된 복잡한 Makefile 내부에 CFLAGS, ..._CFLAGS 등 -g 들어간 부분들에 -static 모두 넣고 컴파일해봤는데 별의별 에러로 더이상 못해봤는데, 인터넷에 gdbserver로 원격디버깅 설명은 있는데, 라이브러리 얘기는 못봤는데... 아니면 gdbserver 컴파일 옵션이 잘못 된건지...
./configure --disable-shared 옵션 주고 make하면
g++: error: alloc.o: 그런 파일이나 디렉터리가 없습니다
g++: error: ax.o: 그런 파일이나 디렉터리가 없습니다
이하 계속 에러 발생하다 끝나고, ./configure --enable-static 하고 make하면 정상으로 끝나긴 하나, 상기3처럼 다시 해봐도 "/bin/sh:gdbserver: not found" 입니다. gdbserver 빌드시 게스트용 gdbserver가 호스트와 같아 target, build 없이 "/configure --prefix=/home/.../rootfs" 했는데 이게 문제인지. 만약 주려면 --target=x86_64 으로 하면 되는지, 저 값은 어느파일에 정의 되어 있나요? INSTALLATION, README, Makefile? 참고서적엔 glibc소스가 있는 매뉴얼에 있다는데 뭔지 모를 .taxi 라는 파일만 잔뜩 있고...

의견 부탁드리겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.