2.6内核下spi驱动的编写
来源:百度文库 编辑:神马文学网 时间:2024/07/08 22:38:23
如果你需要使用spi驱动的接口,不是去修改驱动的实现代码,因为它只负责完成spi的硬件交互功能。
你使用spi功能的代码只需要用到spi.h中定义的方法就可以了,这就是linux driver layers framework的可人之处。
我们通过一个简单的例子来实际理解一下:
#include
#include
#include
#define TEST_REG 0x02
static int test_read_reg(struct spi_device *spi, int reg)
{
char buf[2];
buf[0] = reg << 2;
buf[1] = 0;
spi_write_then_read(spi, buf, 2, buf, 2);
return buf[1] << 8 | buf[0];
}
static int spi_test_probe(struct spi_device *spi)
{
printk("TEST_REG: 0x%02x\n", test_read_reg(spi, TEST_REG));
return 0;
}
static int spi_test_remove(struct spi_device *spi)
{
return 0;
}
static struct spi_driver spi_test_driver = {
.probe = spi_test_probe,
.remove = spi_test_remove,
.driver = {
.name = "testHW",
},
};
static int __init spi_test_init(void)
{
return spi_register_driver(&spi_test_driver);
}
static void __exit spi_test_exit(void)
{
spi_unregister_driver(&spi_test_driver);
}
module_init(spi_test_init);
module_exit(spi_test_exit);
MODULE_DESCRIPTION("spi device test");
MODULE_LICENSE("GPL");
在这个驱动中,你只需要用spi_register_driver向系统进行注册,就可以让系统用你指定的与 .name 相匹配的硬件交互代码
去执行你的读写请求。
几乎在所有与spi相关的函数中都会用到struct spi_device *spi这个指针,probe函数正好把这个指针传给你,保存好这个指针,你就可以在驱动的任何地方通过他去处理与spi设备相关的操作。
你使用spi功能的代码只需要用到spi.h中定义的方法就可以了,这就是linux driver layers framework的可人之处。
我们通过一个简单的例子来实际理解一下:
#include
#include
#include
#define TEST_REG 0x02
static int test_read_reg(struct spi_device *spi, int reg)
{
char buf[2];
buf[0] = reg << 2;
buf[1] = 0;
spi_write_then_read(spi, buf, 2, buf, 2);
return buf[1] << 8 | buf[0];
}
static int spi_test_probe(struct spi_device *spi)
{
printk("TEST_REG: 0x%02x\n", test_read_reg(spi, TEST_REG));
return 0;
}
static int spi_test_remove(struct spi_device *spi)
{
return 0;
}
static struct spi_driver spi_test_driver = {
.probe = spi_test_probe,
.remove = spi_test_remove,
.driver = {
.name = "testHW",
},
};
static int __init spi_test_init(void)
{
return spi_register_driver(&spi_test_driver);
}
static void __exit spi_test_exit(void)
{
spi_unregister_driver(&spi_test_driver);
}
module_init(spi_test_init);
module_exit(spi_test_exit);
MODULE_DESCRIPTION("spi device test");
MODULE_LICENSE("GPL");
在这个驱动中,你只需要用spi_register_driver向系统进行注册,就可以让系统用你指定的与 .name 相匹配的硬件交互代码
去执行你的读写请求。
几乎在所有与spi相关的函数中都会用到struct spi_device *spi这个指针,probe函数正好把这个指针传给你,保存好这个指针,你就可以在驱动的任何地方通过他去处理与spi设备相关的操作。
2.6内核下spi驱动的编写
请教:2.6内核下spi驱动的编写
一个最简单的Linux 2.6内核驱动模块
linux内核的一些预定义 - linux内核与驱动
2.4/2.6版Linux内核可装载模块的不同对设备驱动的影响
blog中文翻译 : WEB2.0的资金驱动与技术内核
WEB2.0的资金驱动与技术内核
从2.4 到2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响 - ChinaUnix.net
双螺旋驱动下的商业模式
Linux下的LCD驱动分析
虚假广告 利益驱动下的“信口开河”
linux启动时对编译进内核驱动模块的加载 - wilson的日志 - 网易博客
内核直接读取硬盘固定扇区的代码 - linux 设备驱动 - highnjupt
RTC 实时时钟驱动 - Linux内核之我的天下 - CSDN博客3
【百度分享】基于内核模块的测试代码编写(一)
【百度分享】基于内核模块的测试代码编写(二)
【百度分享】基于内核模块的测试代码编写(三)
2.6下的内核模块编译-Linux -华夏名网资讯中心 虚拟主机,域名注册,双线虚拟主机,...
[收藏]Linux 2.6 下内核模块的Makefile,Linux技术文章,Linux系...
Linux2.6内核驱动移植2
ARM协处理器 - linux内核与驱动
Re: 关于Linux下高版本内核编译低版本内核的问题