foxding
驱动牛犊
驱动牛犊
  • 注册日期2003-06-11
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1593回复:5

直接调用驱动设备的问题

楼主#
更多 发布于:2003-06-11 17:22
怎么在linux(redhat9)下,添加一个char型设备驱动,我在pc下编个应用程序,gcc编译后,能直接访问我添加的那个设备?
另:/usr/src/linux/driver/下添个设备,在/usr/src/linux/下make后,添加的设备在哪儿?
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-06-12 11:42
怎么在linux(redhat9)下,添加一个char型设备驱动,我在pc下编个应用程序,gcc编译后,能直接访问我添加的那个设备?
另:/usr/src/linux/driver/下添个设备,在/usr/src/linux/下make后,添加的设备在哪儿?

使用open(注册设备名),然后就可以read、write了呀
make之后还没有成为你能用的设备,使用insmod添加
我思,故我在
foxding
驱动牛犊
驱动牛犊
  • 注册日期2003-06-11
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-12 13:13
这个我知道了,但是这样要启动新的内核,所以我现在想把设备驱动程序编译成模块。但是设备驱动程序编译成模块时候的编译指令
是gcc -O2 -DMODULE -D__KERNEL__ -c test.c??
__KERNEL__两边是双_??  

flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-06-12 14:01
是的,双“_”,编译成模块也可以直接使用gcc的呀
gcc -c -I test.c
然后用insmod加载就行了
rmmod卸载他
这个不会改变你的内核
我思,故我在
foxding
驱动牛犊
驱动牛犊
  • 注册日期2003-06-11
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-12 14:19
编译错误:storage size of \'test_fops\' isn\'t known
我的结构体是
struct file_operations lcdtxt_fops = {
NULL, /* lseek */
lcdtxt_read, /* read */
lcdtxt_write, /* write */
NULL, /* readdir */
NULL, /* poll */
lcdtxt_ioctl, /* ioctl */
NULL, /* mmap */
lcdtxt_open, /* open */
lcdtxt_release, /* release */
NULL, /* fsync */
NULL, /* fasync */
NULL, /* check_media_change */
NULL /* revalidate */
};
foxding
驱动牛犊
驱动牛犊
  • 注册日期2003-06-11
  • 最后登录2004-01-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-12 21:29

我说错了,我用gcc -O2 -DMODULE -D__KERNEL__ -c test.c
编译时,
编译错误:storage size of \\\'test_fops\\\' isn\\\'t known
我的结构体是
struct file_operations test_fops = {
NULL, /* lseek */
lcdtxt_read, /* read */
lcdtxt_write, /* write */
NULL, /* readdir */
NULL, /* poll */
lcdtxt_ioctl, /* ioctl */
NULL, /* mmap */
lcdtxt_open, /* open */
lcdtxt_release, /* release */
NULL, /* fsync */
NULL, /* fasync */
NULL, /* check_media_change */
NULL /* revalidate */
};

错误就在结构体struct file_operations test_fops那儿。急救!!



游客

返回顶部