阅读:1991回复:11
linux系统PCI驱动编译问题?
我编写了一个PCI的程序,代码如下:#include <linux/module.h>
#include <linux/errno.h> #include <linux/fs.h> #include <linux/kernel.h> #include <linux/config.h> #include <linux/pci.h> #include <asm/segment.h> /* define my PCI vendor ID */ #ifndef MYPCI_VENDOR #define MYPCI_VENDOR 0x10b5 /* define my PCI device ID */ #define MYPCI_DEV_ID 0x9050 #endif #define PCI_CARD_NAME \"pci encryptf card\" #define PCI_MAX_DEV 6 /* pci device major number */ #define PCI_MAJOR 240 int pci_major = PCI_MAJOR; /* define PCI I/O address */ static u32 addresses[] = { PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_5, 0 }; /* find PLX9052 pci encryption card */ #ifndef CONFIG_PCI # error \"this driver needs pci support to be available\" #endif int init_mycard(void) { struct pci_dev *pcidev=NULL; int count=0; if(!pci_present()) return -ENODEV; while((pcidev = pci_find_device(MYPCI_VENDOR, MYPCI_DEV_ID, pcidev))!=NULL) { if (pci_enable_device(pcidev)) continue; count+=mypci_init(pcidev); if(count) return 0; if(count==PCI_MAX_DEV) break; } if(count==0) return -ENODEV; return 0; pci_set_master(dev); } /* init pci encrypt card */ void mypci_init(struct pci_dev *dev){ u32 read_val,write_val; int io_addr = dev->address[0] & PCI_BASE_ADDRESS_IO_MASK; pci_read_config_dword(dev, addresses[0],&read_val); pci_write_config_dword(dev, addresses[0],&write_val); } /* file control */ struct file_operations pci_fops = { read: pci_read, write: pci_write, open: pci_open, ioctl:pci_ioctl, release: pci_release, }; /* * This function is called when the user or kernel loads the * module into memory. */ int pci_init_module(void) { int result; result = register_chrdev(pci_major, \"pci_encrypt_card\", &pci_fops); if (result < 0) { printk(KERN_WARNING \"vtop: can\'t get major %d\\n\",pci_major); return result; } printk(\"init_over\\n\"); return 0; } /* * This is called when it is removed. It will only be removed * when its use count is 0. */ void pci_cleanup_module(void) { printk(\"pci_cleanup_module()!\\n\"); unregister_chrdev(pci_major, \"pci_encrypt_card\"); } 编译是出现以下错误提示: [root@gigimao test]# gcc -c pci_encrypt.c pci_encrypt.c:60:3: #error \"this driver needs pci support to be available\" 不知错在哪里? :( |
|
最新喜欢:![]() |
沙发#
发布于:2003-05-11 15:58
编译模块的话,不是简单的gcc -c
在模块中定义MODULE 编译带上参数 可以去找设备驱动的文章看一下 |
|
|
板凳#
发布于:2003-05-11 16:38
我试了:gcc -D__KERNEL__ -DMODULE -C -E -I/usr/src/linux-2.418-3/include -O xx.o xx.c
这样还是不行 :( |
|
地板#
发布于:2003-05-11 17:58
自己写个makefile
|
|
地下室#
发布于:2003-05-11 22:45
首先你的gcc include项必须要对 -I后面的,去查看一下
另外,我见你对Linux下的开发可能不是很熟悉 有一篇文章“和设备对话”,可以去搜一下,看完应该没问题的 如何再有的话,再说 |
|
|
5楼#
发布于:2003-05-11 23:45
那句出错信息表明你当前的内核配置中没有支持pci总线,因为它没有在config.h中找到CONFIG_PCI这个宏定义。很奇怪,难道你是在用交叉编译器为嵌入试系统编程吗?
|
|
6楼#
发布于:2003-05-12 00:16
我是毕业设计是做Linux系统的PCI驱动,被逼的,不会也得学了。
我找过了,没有“和设备对话”这篇文章,能告诉在哪里吗? |
|
7楼#
发布于:2003-05-12 09:10
才这么一点,难道linux下写驱动如此简单! :P
|
|
8楼#
发布于:2003-05-12 11:06
应该来说会比WINDOWS会来得简单,但是就是调试比较麻烦的,特别是版本问题.
|
|
9楼#
发布于:2003-10-19 19:51
gcc -02 -DMODULE -DKERNEL_-c 模块名
|
|
10楼#
发布于:2003-11-02 13:12
有的,去google搜一下
|
|
|
11楼#
发布于:2003-11-02 13:13
我写PCI的驱动,觉得这篇文章帮助很大
|
|
|