gigimao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1991回复:11

linux系统PCI驱动编译问题?

楼主#
更多 发布于:2003-05-11 01:54
我编写了一个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\"

不知错在哪里?

 :(

最新喜欢:

mapoflmapofl
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-11 15:58
编译模块的话,不是简单的gcc -c
在模块中定义MODULE
编译带上参数
可以去找设备驱动的文章看一下
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
gigimao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-11 16:38
我试了:gcc -D__KERNEL__ -DMODULE -C -E -I/usr/src/linux-2.418-3/include -O xx.o xx.c
这样还是不行 :(
leaf_xx75
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2004-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-11 17:58
自己写个makefile
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-11 22:45
首先你的gcc include项必须要对 -I后面的,去查看一下
另外,我见你对Linux下的开发可能不是很熟悉
有一篇文章“和设备对话”,可以去搜一下,看完应该没问题的
如何再有的话,再说
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
dos
dos
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2010-02-24
  • 粉丝0
  • 关注0
  • 积分90分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-11 23:45
那句出错信息表明你当前的内核配置中没有支持pci总线,因为它没有在config.h中找到CONFIG_PCI这个宏定义。很奇怪,难道你是在用交叉编译器为嵌入试系统编程吗?
gigimao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-12 00:16
我是毕业设计是做Linux系统的PCI驱动,被逼的,不会也得学了。
我找过了,没有“和设备对话”这篇文章,能告诉在哪里吗?
drird
驱动牛犊
驱动牛犊
  • 注册日期2001-09-19
  • 最后登录2005-09-18
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-12 09:10
才这么一点,难道linux下写驱动如此简单! :P
gigimao
驱动牛犊
驱动牛犊
  • 注册日期2003-03-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-05-12 11:06
应该来说会比WINDOWS会来得简单,但是就是调试比较麻烦的,特别是版本问题.
saiwaiyehe
驱动牛犊
驱动牛犊
  • 注册日期2003-10-11
  • 最后登录2003-10-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-19 19:51
gcc -02 -DMODULE -DKERNEL_-c 模块名
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-11-02 13:12
有的,去google搜一下
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
zheng2002
驱动中牛
驱动中牛
  • 注册日期2002-04-17
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-11-02 13:13
我写PCI的驱动,觉得这篇文章帮助很大
qq:14459938 email:zheng2002@21cn.com RH9 kernel 2.4.20
游客

返回顶部