阅读:1593回复:5
直接调用驱动设备的问题
怎么在linux(redhat9)下,添加一个char型设备驱动,我在pc下编个应用程序,gcc编译后,能直接访问我添加的那个设备?
另:/usr/src/linux/driver/下添个设备,在/usr/src/linux/下make后,添加的设备在哪儿? |
|
沙发#
发布于:2003-06-12 11:42
怎么在linux(redhat9)下,添加一个char型设备驱动,我在pc下编个应用程序,gcc编译后,能直接访问我添加的那个设备? 使用open(注册设备名),然后就可以read、write了呀 make之后还没有成为你能用的设备,使用insmod添加 |
|
|
板凳#
发布于:2003-06-12 13:13
这个我知道了,但是这样要启动新的内核,所以我现在想把设备驱动程序编译成模块。但是设备驱动程序编译成模块时候的编译指令
是gcc -O2 -DMODULE -D__KERNEL__ -c test.c?? __KERNEL__两边是双_?? |
|
地板#
发布于:2003-06-12 14:01
是的,双“_”,编译成模块也可以直接使用gcc的呀
gcc -c -I test.c 然后用insmod加载就行了 rmmod卸载他 这个不会改变你的内核 |
|
|
地下室#
发布于: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 */ }; |
|
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那儿。急救!! |
|