LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3130|回复: 8

2.6内核下PCI驱动程序register过程

[复制链接]
发表于 2009-10-16 17:00:23 | 显示全部楼层 |阅读模式
  1. #include <linux/module.h>
  2. #include <linux/pci.h>
  3. #include <linux/init.h>


  4. #define MODULENAME "fpga"

  5. static int __devinit fpga_init_one(struct pci_dev *pci_dev,const struct pci_device_id *pci_id)
  6. {
  7.         printk("Hello PCI!");
  8. }

  9. static int __devexit fpga_remove_one(struct pci_dev *pci_dev)
  10. {
  11.         printk("Bye PCI!");
  12. }

  13. static struct pci_device_id fpga_pci_tbl[] __initdata = {
  14.     {PCI_ANY_ID,PCI_ANY_ID,PCI_ANY_ID,PCI_ANY_ID,0,0,0},
  15.     {0,}
  16. };

  17. /*MODULE_DEVICE_TABLE (pci, fpga_pci_tbl);*/

  18. static struct pci_driver fpga_pci_driver = {
  19.         name:                 MODULENAME,
  20.         id_table:        fpga_pci_tbl,
  21.         probe:                 fpga_init_one,
  22.         remove:                fpga_remove_one,
  23. };



  24. static int __init fpga_init_module(void)
  25. {      
  26.       printk(KERN_ALERT "enter insmod \n");
  27.         pci_register_driver(&fpga_pci_driver);
  28.       printk(KERN_ALERT "exit insmod \n");
  29. }

  30. static void __exit fpga_cleanup_module(void)
  31. {
  32.       printk(KERN_ALERT "enter insmod \n");
  33.         pci_unregister_driver(&fpga_pci_driver);
  34.       printk(KERN_ALERT "exit insmod \n");
  35. }

  36. module_init(fpga_init_module);
  37. module_exit(fpga_cleanup_module);
复制代码



注册时,probe应该执行,并打印出“Hello PCI!”可是并没有

看到网上说只有在pci_device_id[]匹配到硬件中存在的设备才会执行probe指向的函数。

对于一个嵌入式系统来说,芯片本身就有PCI controller,也有vendor ID和device ID号。
所以应该能probe到自己嵌入式芯片上本身的PCI device。为什么我的probe中的打印没有执行?
发表于 2009-10-16 22:47:18 | 显示全部楼层
用 dmesg 有相关信息打印吗? 看看是不是打印级别不够的原因?
回复 支持 反对

使用道具 举报

发表于 2009-10-16 22:50:07 | 显示全部楼层
对了,要先保证用 lspci  能看到fpga 这个pci设备。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-16 22:55:33 | 显示全部楼层
Post by sd-e-cat;2037224
用 dmesg 有相关信息打印吗? 看看是不是打印级别不够的原因?


不是的,设置成最高级别也不行
dmesg也看过了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-16 22:57:01 | 显示全部楼层
Post by sd-e-cat;2037226
对了,要先保证用 lspci  能看到fpga 这个pci设备。


嵌入式linux里,没有lspci这个命令啊。。。
回复 支持 反对

使用道具 举报

发表于 2009-10-16 22:59:09 | 显示全部楼层
pci设备在位不? vender id 和 device id能匹配上吗?
回复 支持 反对

使用道具 举报

发表于 2009-10-16 23:00:42 | 显示全部楼层
内核编译的时候有没有把pci proc相关项加入? 如果有的话 试一下用cat /proc/pci看看设备在不在? 顺便文一下,什么版本的内核?
回复 支持 反对

使用道具 举报

发表于 2009-10-16 23:04:42 | 显示全部楼层
其实lspci这个工具可以直接从debian的ppc版本软家包中下一个pciutils 的deb包,在debian或者ubuntu中用dpkg -x  pcituils.deb解压,再把相关的文件和目录结构加入到目标板的根文件系统中就可以用了。
回复 支持 反对

使用道具 举报

发表于 2011-12-30 18:14:18 | 显示全部楼层

China's wedding in three grades, high-end mid-range low-end

China's wedding in three grades, high-end mid-range low-end, when it is wearing a wedding dress is usually new clothes, they must be careful, I recently bought a Cheap wedding dresses, affordable, good quality, I recommend to a friend
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表