Android之GPS分析
发布时间:2021-11-25 19:29:40 所属栏目:教程 来源:互联网
导读:TI平台使用SIRF GPS 1.底层驱动的实现 GPS厂商提供的库通过echo sysfs的方式控制gps的onoff和reset,这需要linux实现GPS的sysfs模型驱动,在driver文件夹中增加gps.c文件 (1)填充一个bin_attribute的结构体,驱动加载后就会在系统的/sys/module目录下创建s
|
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 filen"); 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...n"); set_power_on(); run_mode = RUN_MODE; break; case 4: printk(KERN_BUG "<SiRF> Chip stopped...n"); set_power_off(); run_mode = STOP_MODE; break; case 5: printk(KERN_BUG "<SiRF> Chip reset on high...n"); set_reset(1); break; case 6: printk(KERN_BUG "<SiRF> Chip reset on low...n"); set_reset(0); break; default: printk(KERN_BUG "<SiRF> Unknown operation %dn", op); break; } return count; } ![]() (编辑:东莞站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



