易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Android之GPS研究
TI平台使用SIRF GPS
1.底层驱动的实现
GPS厂商提供的库通过echo sysfs的方式控制gps的onoff和reset,这需要linux实现GPS的sysfs模型驱动,在driver文件夹中增加gps.c文件
(1)填充一个bin_attribute的结构体,驱动加载后就会在系统的/sys/module目录下创建sirf文件
static struct bin_attribute sirf_mode_attr = {
.attr = {
.name = "sirf",
.owner = THIS_MODULE,
.mode = S_IRUGO | S_IWUGO,
},
.size = 0,
.read = readcmd,
.write = writecmd,
};
(2)probe函数
static int __init gps_probe(struct platform_device *pdev)
{
int ret;
ret = sysfs_create_bin_file(&(module_kset->kobj), &sirf_mode_attr);
if (ret) {
printk(KERN_ERR "<SiRF> Failed to create sys file ");
return -ENOMEM;
}
return 0;
}
(3)remove函数
static int __init gps_remove(struct platform_device *pdev)
{
sysfs_remove_bin_file(&(module_kset->kobj), &sirf_mode_attr);
return 0;
}
(4)平台驱动的注册
static struct platform_driver gps_driver = {
.probe = gps_probe,
.remove = gps_remove,
.driver = {
.name = "gps",
},
};
static int __init gps_init(void)
{
return platform_driver_register(&gps_driver);
}
static void __exit gps_exit(void)
{
platform_driver_unregister(&gps_driver);
}
late_initcall(gps_init);
module_exit(gps_exit);
(5)write和read函数(read暂时为空,没有用到)
static ssize_t readcmd(struct kobject *kobj,
struct bin_attribute *attr,
char *buf, loff_t off, size_t count)
{
}
static ssize_t writecmd(struct kobject *kobj,
struct bin_attribute *attr,
char *buf, loff_t off, size_t count)
{
char *tail;
int op;
op = simple_strtol(buf, &tail, 10);
switch(op) {
case 1:
case 2:
break;
case 3:
printk(KERN_BUG "<SiRF> Chip running... ");
set_power_on();
run_mode = RUN_MODE;
break;
case 4:
printk(KERN_BUG "<SiRF> Chip stopped... ");
set_power_off();
run_mode = STOP_MODE;
break;
case 5:
printk(KERN_BUG "<SiRF> Chip reset on high... ");
set_reset(1);
break;
case 6:
printk(KERN_BUG "<SiRF> Chip reset on low... ");
set_reset(0);
break;
default:
printk(KERN_BUG "<SiRF> Unknown operation %d ", op);
break;
}
return count;
}
现在通过echo number > /sys/module/sirf就能控制GPS的power on/off和reset。
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图