我是Linux Kernel Development的新手,我想实现一个Char设备驱动程序,它使用带有RaspberryPi(Raspbian Wheezy)的MCP23017处理端口扩展。
需要端口扩展控制(MCP23017)。真正意义上的驱动程序较少,但驱动程序中的移植功能更多。 该模块通过I2C寻址。我需要在驱动程序中实现以下功能:
·配置I2C地址
·IO的配置
·Pull-Ups的配置
·中断配置
·读/写IOs
重要的是,最多可以同时打开/操作8个模块(8个是块的最大可能地址数)。
我在互联网上看到了很多示例,并使用init
,open
,read
和write
函数实现了一个简单的字符设备驱动程序,并测试了I2C操作对于MCP23017。我对设备驱动程序有一个简短的了解,但不知道如何进一步实现这些功能。
我想知道/澄清以下内容:
dev_open
如何运作?如何通过linux命令尝试打开设备并检查设备是否已打开/设备通过dmesg
命令打开的次数?
我希望使用设备驱动程序和MCP23017 IO,上拉和中断的配置同时打开8个不同的模块。怎么做?
错误:
/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);
^