[완료] char device driver 올리는데 잘 안되네요...

munhoney의 이미지

캐릭터 디바이스를 올리려고 하는데 잘 안되네요

제가 생각하기에 insmod를 하면 /dev/밑에 원하는 게 생길거라고 생각했는데 생기지 않습니다.
mkmod로 올리고도 해보았는데, 안되는군요.. 뭐가 문제인지..

아래 테스트로 사용한 코드를 보내드립니다.

#include
#include
#include
#include
#include
#include

//MODULE_LICENSE("GPL");
//MODULE_AUTHOR("Peter Jay Salzman");

#define DEVICE_NAME "bit"
#define SUCCESS 0

static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char *, size_t, loff_t *);

static dev_t dev;
static int Major;

static struct file_operations fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
};

static int __init initBIT(void)
{
dev = MKDEV(251,0);

printk(KERN_INFO "BIT TEST START\n");
printk(KERN_INFO "Major : %d Minor : %d \n", MAJOR(dev), MINOR(dev));

register_chrdev_region(dev, 1, DEVICE_NAME);

//Major = register_chrdev(0, DEVICE_NAME, &fops);

return 0;

}

static void __exit exitBIT(void)
{
//unregister_chrdev(Major, DEVICE_NAME);
unregister_chrdev_region(dev, 1);
printk(KERN_INFO "BIT TEST STOP\n");
}

static int device_open(struct inode *inode, struct file *file)
{
printk(KERN_INFO "OPEN DEVICE \n");
try_module_get(THIS_MODULE);
return SUCCESS;
}

static int device_release(struct inode *inode, struct file *file)
{
return SUCCESS;
}
static ssize_t device_read(struct file *flip,
char *buffer,
size_t length,
loff_t *offset)
{
int bytes_read = 0;
printk(KERN_INFO "READ DEVICE \n");

return bytes_read;
}
static ssize_t device_write(struct file *flip,
const char *buffer,
size_t length,
loff_t *offset)
{
printk(KERN_INFO "WRITE DEVICE \n");
return -EINVAL;
}

module_init(initBIT);
module_exit(exitBIT);

baboda4u의 이미지

mknod로 드라이버파일이 생성되었는지 /dev/xxx 확인 해보세요...

그리고 insmod로 컴파일된 xxx.o 또는 커널 2.6이라면 xxx.ko를 로드 하시구

lsmod로 모듈이 올라 가 있는지 확인해보시면 어떨까요?? ^^ 답이 없어서 허접 답변 달아 봅니다.

============================
Stay Hungry, Stay Foolish

============================
Stay Hungry, Stay Foolish

munhoney의 이미지

네 먼저 답변 감사드리구요.

제가 드라이버쪽은 그리 많이 해보지 않아서 그러는데 ....

현재 저 코드를 컴파일해서 insmod로 로드했구요.
그러면 /dev/ 밑에 드라이버가 생성되는게 아닌가요?

먼저 mknod로 드라이버 파일 생성하고 난 다음에 모듈 올려야 하나요?

참고로 insmod하고 lsmod로 하면 잘 올라가 있습니다.

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

ydgoo의 이미지


디바이스 드라이버와 /dev/xxx 가 생성되는 것은 별개입니다.
순서는 상관이 없고 mknod 를 실행해서 device node 를 생성하시면 되구요.

소스를 보니깐 register_chrdev() 가 remark 되어 있어서 fops 가 등록이 안되었으므로
/dev/xxx 장치를 열어도 error 가 난것 같네요.


munhoney의 이미지

말씀하신데로 하니 되더군요.

감사합니다. ^^

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

댓글 달기

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