기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

제가 단순한 디바이스 드라이버를 만들고 drivers/char/폴더에 char 디바이스 드라이버 코드를 넣고

drivers/char/폴더의 Kconfig에 만든 디바이스 드라이버 정보를 넣고, Makefile에 디바이스 드라이버의 object를 추가해서

넣었습니다. 그런데 아래의 코드 Simple Device Driver가 정상적으로 포함되어 컴파일이 되었습니다.

그래서 만들어진 uImage (리눅스 커널)을 보드에 넣어서 정상 동작하는 것을 확이했습니다.

그런데 이 드라이버가 추가가 잘 되었는지 확인은 어떻게 하는 것인가요? 단순히 알 수 있는 방법이 없나요?

혹시나해서 제가 mknod해서 노드를 만들고 어플리케이션에서 디바이스 드라이버를 open()해서 사용을 하려고 하니

open했을 때 printk()함수로 커널 메세지가 디스플레이가 되어야 하는데 디스플레이가 되지 않고 있습니다.

그래서 제 짧은 생각으로는 이 문제를 다음과 같이 생각했습니다.

 

첫째, 제대로 디바이스 드라이버가 커널 추가가 되지 않았다?

둘째, 이 디바이스 드라이가 제가 사용하는 커널 버전에는 맞지 않는 것이 아닌가?

셋째, 먼가 옵션이 빠진 것이 아닌가?

 

제가 사용하는 커널은 2.6.30 버전입니다. 그리고 아래 코드는 제가 인터넷에서 가져온 단순 디바이스 드라이버 입니다.

리눅스 커널에 디바이스 드라이버를 포함하려면 먼가 빠진 것이 있는거 같은데 고수님들의 조언 부탁드립니다. ㅠㅠ;

 

======================================Simple Device Driver =========================================


#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/fcntl.h>
#define CALL_DEV_NAME "template"
#define CALL_DEV_MAJOR 512
#define CALL_DEV_SUB 0
/*
Note:
check device name and major device number before test.
usage: mknod /dev/template c 512 0
*/
/*
* IO functions
*/
int template_open (struct inode *inode, struct file *fp)
{
 int num = MINOR(inode->i_rdev);
 printk ("open function has been called -> minor: \n", num);
 // MOD_INC_USE_COUNT; // When use 2.4 kernel - information only
 return 0;
}
int template_release (struct inode *inode, struct file *fp)
{
 // MOD_DEC_USE_COUNT; // When use 2.4 kernel - information only
 printk ("release function has been called\n");
 return 0;
}
loff_t template_llseek (struct file *fp,loff_t offset,int whence)
{
 printk ("llseek function has been called: off , whence \n", offset,whence);
 return offset;
}
ssize_t template_read (struct file *fp, char *buf, size_t count, loff_t *f_pos)
{
 printk ("read function has been called: buf , count \n", buf, count);
 return count;
}
ssize_t template_write (struct file*fp, const char *buf, size_t count, loff_t *f_pos)
{
 printk ("write function has been called: buf , count \n", buf, count);
 return count;
}
int template_ioctl (struct inode *inode, struct file *fp, unsigned int cmd, unsigned long arg)
{
 printk ("ioctl function has been called: cmd , arg \n", cmd,arg);
 return 0;
}
/*
* Assigning functions
*/
struct file_operations template_fops = {
 .owner = THIS_MODULE,
 .llseek = template_llseek,
 .read = template_read,
 .write = template_write,
 .ioctl = template_ioctl,
 .open = template_open,
 .release = template_release,
 /* check linux/fs.h file for addtional information of this structure */
};
/*
* Initializer and finalizer
*/
static int template_init (void)
{
 int res;
 printk ("initializer has been called\n");
 res = register_chrdev(CALL_DEV_MAJOR, CALL_DEV_NAME, &template_fops);
 if (res < 0) return res;
 return 0;
};
static void template_exit (void)
{
 printk ("finalizer has been called\n");
 unregister_chrdev (CALL_DEV_MAJOR, CALL_DEV_NAME);
};
//#ifndef MODULE
/*
* Receiving kernel option such as 'template=1'
*/
static int given_value = 0;
static int __init template_setup (char *str)
{
 int passed_values[4];
 str = get_options (str, ARRAY_SIZE(passed_values), passed_values);
 if (passed_values[0] > 0) given_value = passed_values[1];
 return 1;
}
__initcal(template_init);
__setup ("template=", template_setup);
//#endif
//module_init(template_init);
//module_exit(template_exit);
MODULE_LICENSE("Dual BSD/GPL");


추락천사

2012.02.16 20:39:05
*.52.109.245

추가가 되어서 로드되었는지 확인하고 싶으시면, init에 있는 printk가 부팅 로그에 찍혔는지 확인해보시면 되겠죠-

혜민아빠

2012.02.17 18:18:49
*.148.23.122

안나와요 init에 있는 printk 메세지가요 ㅠㅠ; 도저히 모르겠네요

추락천사

2012.02.17 20:21:49
*.52.109.245

menuconfig는 하셨나요?

혜민아빠

2012.02.17 22:51:24
*.148.23.122

그럼요 했습니다. menuconfig도 했죠..그래서 거기서 제가 만든 드라이버를 선택도 했고요...ㅠㅠ

List of Articles
번호 제목 글쓴이 날짜 조회 수

고도리님께서 집필하시는 책 출판 되었나요? [5]

엑시노스 4210 Display 구동관련 문의. [3]

  • GBC
  • 2012-02-21
  • 조회 수 1780

제가 임베디드 보드의 플래쉬를 사용하기 위해서는 어떻게 해야하나요... file [1]

임베디드 리눅스에서 어플리케이션 작성하여 정자하기 위해서는... [1]

KC,CE,FCC 인증 관련 문의 [4]

예전에 구입했던 c100보드를 가지고 공부를 하고있는데요. [3]

디버거 UART를 Data 전송 용도로 사용하기 위해서... [1]

엑시노스 디코딩에 관련된 질문입니다. [3]

  • seeman2
  • 2012-02-19
  • 조회 수 1659

v210 audio chip을 제거방법 문의. [5]

  • yama
  • 2012-02-19
  • 조회 수 1610

frame buffer layer에 관해서 여쭙니다. [2]

소스 추가 도움좀 부탁드립니다. [2]

/dev 폴더에 있는 node파일 중에서 어떤 것을 open해야 플래쉬를... file [5]

개발용 노트북 구매 관련 질문(시리얼 포트 필요 유무) [1]

  • 다콩
  • 2012-02-17
  • 조회 수 1936

안드로이드 FileSystem쪽에서 센서 디버깅

[Angstrom Distribution Linux] [2]

[NDK에 STL 포팅] [2]

[openCL driver] [1]

임베디드 리눅스로 상용 인터넷 연결하기 [1]

디바이스 드라이버를 포함해서 리눅스 커널 컴파일에 대해서... [4]

ICS를 구동 하기 위한 최소한의 H/W 사양? [5]

사용자 로그인