[ioctl 디바이스 드라이버 관련] 제대로 한거 같은데 실행이 안?

marubazz의 이미지

아래 파일 세개(p.s : Make 파일이 첨부가 안되네요?? --; 아래 부분에 소스 붙이겠습니다) 를 첨부하였으니 참고하여 가르쳐 주시면 정말 감사하겠습니다. (어플리케이션, 드라이버, make파일)

make (메이크 잘 된거 같음, 하기전에 make clean한번 해주고)

insmod hj_ioctl.o(lsmod 해 보면 모듈 올라갔음)

mknod /dev/hj_ioctl c 254 0(dev 폴더 내에 보면 만들어졌음)

gcc hj_app_ioctl.c

./a.out

근데 결과가
Cannot Open the hj_ioctl device file ->( 이건 파일 안열렸을시에 나오게 app에 만들어놓은 문구입니다)
라고 나오면서 ... 안되네요... 아... 디바이스 프로그래밍 너무 어려워요 T.T

왜 안되는지 아시는분 가르쳐 주시면 감사하겠습니다~

<Makefile>
CC = gcc
KERNELDIR = /usr/src/linux-2.4

CFLAGS = -D__KERNEL__ -DMODULE -I$(KERNELDIR)/include -g -Wall
PROJ = hj_ioctl
OBJ = $(PROJ).o
all : $(OBJ)

$(OBJ) : $(PROJ).c
$(CC) $(CFLAGS) -c $(PROJ).c
clean:
rm -f core $(OBJ)

File attachments: 
첨부파일 크기
파일 hj_ioctl.c2.41 KB
파일 hj_app_ioctl.c929바이트
owlet의 이미지

register_chrdev에서 major를 0로 주셨네요..
major를 0로주면 자동할당입니다.
254로 써서 해보세요.

marubazz의 이미지

아... hj_ioctl.c 파일의 36번째줄

if((HJ_Major=register_chrdev(0,DEVICE_NAME,&HJ_fops))<0){

이걸

if((HJ_Major=register_chrdev(254,DEVICE_NAME,&HJ_fops))<0){

로 바꾸라는 말씀이신가요? 해보니까 insmod가 안되는데요??

device or resuorce busy 라고 나오면서 안되요..^^;

아.. 뭐가 문젤까요 --;
제 친구 컴에선 된다는데... 음...

mknod 하는 법이 틀렸나요?? 주번호를 0으로 하면 자동으로 비는거 할당되는거 아닌가요? 그렇게 해도 안되네요.. 음...

owlet의 이미지

major 254를 사용하고있는 디바이스가 있는건 아닌가요?
0으로 해서 자동할당을 했다면 HJ_Major에 리턴받은 값이 할당받은 major입니다.

mknod /dev/hj_ioctl c 254 0

에서 254대신에 HJ_Major에서 리턴받은값으로 노드를 만들어서 해보세요.

marubazz의 이미지

저.. HJ_Major에서 리턴받은값을 어떻게 하면 알수 있어요??^^;

그리고... 디바이스들이 부여받은 메이저 번호 정보 어떻게 보는지도 가르쳐 주시면 감사하겠습니다^^;

owlet의 이미지

간단하게는 printk("HJ_Major : %d\n", HJ_Major); 해보시면 확인할수 있으실거구요 ^^;

중복되지 않는 다른값을 찾아서 사용하시는게 나으실것같습니다.

참고로 include/linux/major.h를 확인하시면 각 디바이스가 사용하는 major를 확인하실수 있구요

devfs를 사용하시면 이런고민 안하셔도 됩니다. :)

댓글 달기

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