使用MCP23017进行端口扩展的Char设备驱动程序

时间:2016-07-22 11:16:28

标签: c linux linux-kernel raspberry-pi linux-device-driver

我是Linux Kernel Development的新手,我想实现一个Char设备驱动程序,它使用带有RaspberryPi(Raspbian Wheezy)的MCP23017处理端口扩展。

需要端口扩展控制(MCP23017)。真正意义上的驱动程序较少,但驱动程序中的移植功能更多。 该模块通过I2C寻址。我需要在驱动程序中实现以下功能:

·配置I2C地址

·IO的配置

·Pull-Ups的配置

·中断配置

·读/写IOs

重要的是,最多可以同时打开/操作8个模块(8个是块的最大可能地址数)。

我在互联网上看到了很多示例,并使用initopenreadwrite函数实现了一个简单的字符设备驱动程序,并测试了I2C操作对于MCP23017。我对设备驱动程序有一个简短的了解,但不知道如何进一步实现这些功能。

我想知道/澄清以下内容:

  1. dev_open如何运作?如何通过linux命令尝试打开设备并检查设备是否已打开/设备通过dmesg命令打开的次数?

  2. 我希望使用设备驱动程序和MCP23017 IO,上拉和中断的配置同时打开8个不同的模块。怎么做?

  3. 错误:

    /home/pi/i2c_gpio/mcp23017.c: In function ‘mcp23s08_direction_input’:
    /home/pi/i2c_gpio/mcp23017.c:269:9: error: implicit declaration of function      
    ‘gpiochip_get_data’ [-Werror=implicit-function-declaration]
    struct mcp23s08 *mcp = gpiochip_get_data(chip);      
    
    /home/pi/i2c_gpio/mcp23017.c: In function ‘mcp23s08_probe_one’:
    /home/pi/i2c_gpio/mcp23017.c:615:11: error: ‘struct gpio_chip’ has no         
    member  named ‘parent’
    mcp->chip.parent = dev;                  
    
    /home/pi/i2c_gpio/mcp23017.c:681:2: error: implicit declaration of  
    function ‘gpiochip_add_data’ [-Werror=implicit-function-declaration]
    status = gpiochip_add_data(&mcp->chip, mcp);
    ^
    

0 个答案:

没有答案