모듈에서 floating 연산을 합니다. 2.6 커널에서 빌드 할수 있는

a287848의 이미지

floating 연산을 하는 모듈을 만들고 컴파일 하는데

2.6 에서 floating 연산을 2.6 에서 허용하지 않는 문제 때문에

컴파일이 안됩니다. 벌써 2 주 정도 된것 같은데, 이문제 때문에

진척이 없습니다.

에러 메시지는

MODPOST
*** Warning: "__moddi3" [drivers/dmc/dmc_module.ko] un defined !

*** Warning: "__adddf3" [drivers/dmc/dmc_module.ko] un defined !

*** Warning: "__divdf3" [drivers/dmc/dmc_module.ko] un defined !

*** Warning: "__muldf3" [drivers/dmc/dmc_module.ko] un defined !

...

이렇게 뜹니다.

make option 에서 -msoft-float 를 넣어도 에러가 나오네요.

해결해본신적 있으신분 부탁 드립니다.^^

익명 사용자의 이미지

1. 가장 좋은 방법은 floating point를 사용하지 않는 것입니다. 특별한 이유가 있지 않다면 정수 연산으로 대체할 수 있습니다. 예를 들어 x / 3 에서 소수점 둘째자리까지 결과를 얻고 싶다면 소수점 위는 x / 3, 소수점 아래는 (x * 100) % 3 같이 계산할 수 있습니다.

2. 커널은 FPU 레지스터를 저장하기 않기 때문에 FPU 레지스터를 사용해서는 안되지만 다음과 같이 사용할 수도 있습니다.

kernel_fpu_begin()

FPU를 이용한 연산

kernel_fpu_end()

3. FPU를 이용하지 않고 software floating point 연산을 사용하는 것도 좋은 방법입니다. 이 경우 software floating point library가 모듈에 static link가 되어야 합니다. 위의 경우 link 에러가 뜨는 것은 C library와 모듈이 link가 되지 않기 때문입니다.

a287848의 이미지

답변 주셔서 너무 감사드립니다.

다만 아직도 해결이 안되서 다시한번 질문을 드려야 겠습니다.

일단 어떻게 해서든지 Floating 연산을 해야 하는 경우 입니다

그리고 floating 연산에 log 를 사용하기 때문에 사실상 정수로의 대체는 불가능

하고요.-.- GCC 라이브러리를 정적 링크 시키려고 하는데

원하는데로 안되네요

제가만드는 외부 모듈은 dmc_module.c 입니다.

make file

obj-$(CONFIG_DMC) += dmc_module.o

EXTRA_CFLAGS	:= -Wall -DMODULE -D__KERNEL__ -DLINUX

dmc_module.o:	dmc_module.c ../../include/linux/boost_request_queue.h 
		$(CC) $(EXTRA_CFLAGS) -c -O dmc_module.c dmc_module_tmp.o
		LDFLAGS_MODULE -r dmc_module_tmp.o dmc_module.o /usr/lib/gcc-lib/i386-redhat-linux/3.3.4/libgcc.a		


#ld -r dmc_module_tmp.o -o dmc_module.o /usr/lib/gcc-lib/i386-redhat-linux/3.3.4/libgcc.a
                       

마지막에 제가 ld 를 사용해서 정적 링크 시키려는데 경로가 잘못되어도

확인을 안하네요. 예를들어 libgcc.a 를 libgcccccccc.a 라고 잘못주어도 에러가 안나타납니다. 어떻게 해결해여 할까요? 내일이 deadline 입니다. -.-

Dig it.

flyduck의 이미지

제가 답변을 드렸을 때는 그런 의미가 아니었는데... :-)

libgcc나 C library를 링크할려고 하지 마시고, 필요한 소스만 가져와서 프로젝트에 추가를 하세요. glibc 소스에서 원하는 소스 파일을 찾을 수 있습니다. 예를 들어 __divdf3은 soft-fp/divdf3.c에 구현되어 있습니다. 소스를 조금만 고치면 커널 모듈에 붙일 수 있을 것입니다. log같은 다른 math function도 필요하면 glibc나 uClibc 같은 다른 library 소스에서 찾을 수 있을 것입니다.

Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.

a287848의 이미지

겨우 deadline 지켰네요

저의 스케쥴링 정책은 deadline 인가 봅니다.

anticipatory 도 괜찮을듯 한데.^^

Dig it.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.