免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 61104 | 回复: 41
打印 上一主题 下一主题

Linux设备驱动开发转Android驱动开发,您准备好了么?(获奖名单已公布-2014-5-22) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-23 16:45 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4139467-1-1.html

Android底层是基于Linux内核的,因此要基于Android开发智能手机或终端,就少不了Linux内核与底层驱动的开发。据了解,这方面的开发人员目前还很缺乏,其中一个重要的原因就是Linux是一个与Windows一样复杂的软件系统,要理解它,本身不是一件容易的事。但是从另外一个角度来看,对于驱动开发来说,设备模型的理解是根本,毫不夸张得说,理解了设备模型,再去看那些五花八门的驱动程序,你会发现自己站在了另一个高度。

本期话题:
1、您的Linux驱动开发的经验之谈
2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?

活动时间:
2014年4月22日-5月12日

本期嘉宾:
《Android驱动开发权威指南》图书作者:杨柳,社区ID为hongduna
嵌入式开发版斑竹:daniel_kohler

活动奖品:
最佳讨论奖:奖励《Android驱动开发权威指南》一本,共6名

奖品信息:
Android驱动开发权威指南   席卷全球的硬件创业科技浪潮专题

作者: 杨柳   
出版社:机械工业出版社
ISBN:9787111451822
上架时间:2014-3-21
出版日期:2014 年3月
开本:16开
页码:320

活动要求:
1、 要言之有物,不能低于20个字。
2、 本次话题主要关注Linux和Android设备驱动开发的讨论,其他问题可能不做重点

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
2 [报告]
发表于 2014-04-23 18:35 |只看该作者
路过,支持.............

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
3 [报告]
发表于 2014-04-23 20:55 |只看该作者
个人理解linux设备驱动主要就是熟悉linux内核api,多看相关的设备驱动,然后模仿学习。
设备驱动涉及到内核这个大“进程”,所以对里面的共享访问,互斥,多cpu要能理解。
android没有接触过。。不熟悉

论坛徽章:
0
4 [报告]
发表于 2014-04-24 08:49 |只看该作者
支持, 还没学过andriod,linux的驱动倒是研究过。

论坛徽章:
0
5 [报告]
发表于 2014-04-24 13:55 |只看该作者
1、您的Linux驱动开发的经验之谈
粗略看完《linux device driver》the third editon、宋宝华《linux设备驱动开发详解》、宋宝华《精通linux设备驱动程序开发》。觉的设备模型是重点,理清设备模型,就会发现驱动均有其规律可遵循。然后就是实际工作中主要用到磁盘的盘符驱动。
2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
android内核本身就是linux内核发展来,android也有自有的一些驱动类型,但是有linux驱动基础,就不难理解android驱动。

希望能申请到这本书籍啊,

论坛徽章:
7
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2014-04-24 20:05 |只看该作者
1、您的Linux驱动开发的经验之谈
    做Linux驱动,我个人觉得首先得了解,熟悉驱动模型,总线,进程调度等相关内容,这个是硬伤,理论知识丰富了,进而学习linux 里面牛人的写的驱动。
这样就比较容易了。
2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
    Linux驱动开发和Android驱动开发,我觉得本质都是一样的。而且相似度非常高。
如果要转为Android驱动,我觉得可以先了解下Linux驱动与Android驱动的不同,而且转后上手还是非常快的。

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
7 [报告]
发表于 2014-04-24 21:11 |只看该作者
本帖最后由 T-Bagwell 于 2014-04-24 21:13 编辑

1、您的Linux驱动开发的经验之谈
Linux驱动开发,其实吧东西并不是特别多,主要就是了解设备模型,驱动模型,以及能看懂datasheet,看懂原理图,基本可以上手
一般是先上电,在根据datasheet去设置时钟,中断等,相关的操作在IC手册中都已经有很好的描述了
Linux已经将框架都写好了,照着原有的框架套用就可以了。

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
传统的Linux驱动开发和Android驱动开发,其实Linux部分我感觉没啥区别,现在好多android下的优势的东西都已经可以在pc上用了,例如PM之类的。
Android驱动开发在Linux部分差别不大,但是在HAL部分可能就稍显明显了,例如camera驱动开发,一般是在HAL和Driver之间,有一个vendor部分,vendor部分其实可以理解为pc下面直接操作/dev/下面的设备节点的东西,camera部分的isp3a方面的操作一般是在这里面操作。其实好多关键的东西都在这里面;
有些硬件平台有点差别,例如异构的平台,有modem部分系统和Linux部分系统,好多纯粹的硬件操作都是在modem系统部分操作了,Linux只是通过rpc从对应的内存空间取数据就可以了。

总结,Android设备驱动开发与传统Linux设备驱动开发,差别不大,很好上手,做过了就知道了

论坛徽章:
0
8 [报告]
发表于 2014-04-24 21:44 |只看该作者
版主是正解。Android实际上是Linux OS上的一个衍生品。其驱动与Linux驱动有许多相通之处。从源头看看,导致Android驱动与PC上Linux驱动相异的主要有2个:一是Android是嵌入式系统,与PC 台式机系统不同;二是Android OS在Linux内核之上遵循Apache License。其中源头二就使得Android OS在Linux内核之上,引入了HAL 层,以支持各设备驱动厂商与开发者的商业利益。而源头一则使得在Android系统中,只会选择会用到的设备驱动程序,而不像电脑pc中会有过多的冗余,因为Android作为一个便携式移动终端,其上运行的设备,在出厂前基本固定死,而不用像PC那样要支持太多的设备扩展性。

另外正如T-BagWell所述,Androd的由于运用场景不一样,可能更多地会偏重于GPS、GSensor等便携式的感应器,这些对于PC Linux是不适合的。当然,对于一个底层驱动的工程师来讲,本质区别不大,但在向上层提供服务的实时性上应有更多考量。

同时,Android作为一个实时性OS,还定制了一些独有的驱动,比如Binder等,以实现轻量级的进程间通信,以支撑C/S应用架构的快速响应。这些都是Android系统引以为豪的。

同时, Android驱动也是门实践性很强的技术,有了Linux驱动开发经验肯定会方便许多;有机会大家可以也动手开发下Android类的驱动,并着手为自己所编写的驱动编写相应的服务,相信大家一定会感触更多。学过COM的甚至可能体会到分布式计算思想也融入其中,深入些的可能也就会体会到Android的架构之美和Google的野望^_^

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34双子座
日期:2014-03-02 00:11:39fulanqi
日期:2016-06-17 17:54:25
9 [报告]
发表于 2014-04-24 22:39 |只看该作者
1、您的Linux驱动开发的经验之谈
明确基本概念:系统调用——应用程序OS内核之间的接口;设备驱动——OS内核和底层硬件之间的接口。
设备驱动封装了硬件的细节,应用程序可以像操作普通文件那样操作硬件设备。设备驱动要完成如下功能:
1)设备的初始化和关闭
2)从内核向设备文件双向传输数据
3)检测和处理设备可能出现的错误
Linux系统有三类设备文件类型:字符设备、块设备和网络设备。字符设备跟硬件I/O相关;块设备会操作系统内存;网络设备跟通信相关。这在设备文件的文件属性中注明。
每个文件都有两个设备号:一是主设备号,它标识驱动程序;二是从设备号,它标识同一设备驱动程序的不同硬件设备。
Linux设备驱动开发和传统应用程序的开发有很大不同,以至于两者的经验无法相互借用。
Linux设备驱动开发工作于内核态。
Linux设备驱动开发必备的技能有:良好的C语言功底;熟悉硬件;熟悉Linux内核源码;精通多任务设计。
通常使用GNU C来开发驱动程序。
Linux设备驱动开发要注意,程序是没有内存保护机制的,而且内核栈非常小。

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
Android是Linux OS的衍生版,两者有很多共通之处。两者的区别在于:
1)Android引入了一个硬件抽象层HAL
HAL是Linux内核驱动程序的封装,向上提供接口,屏蔽了底层的实现细节。
HAL运行于用户空间,而内核驱动程序运行于内核空间。
内核驱动层指提供简单的硬件访问逻辑,复杂的功能都放在HAL了。
2)Android应用是Java程序,它通过JNI访问C程序提供的硬件访问服务。
基本上来说,Android驱动开发有如下的步骤:
一是在Android内核源码中编写硬件驱动程序;
二是在Android系统中填写C语言可执行程序,它用于访问硬件驱动程序;
三是在Android的HAL添加接口模块访问硬件驱动程序;
四是在Android系统中编写JNI方法,为应用程序框架层提供Java访问硬件的接口;
五是为Android系统的应用程序框架层添加硬件服务接口;
六是用Java开发Android应用程序,调用JNI访问硬件服务,验证接口是否OK。
3)Linux内核驱动是开源的,Android驱动是闭源的。

Linux驱动开发转向Android驱动开发是很容易的,原理相通,Android驱动开发显得复杂了一点,但没有质的差异。而且Android驱动的闭源给广大驱动开发程序员带来了更多的就业机会。

论坛徽章:
0
10 [报告]
发表于 2014-04-25 18:16 |只看该作者
1、您的Linux驱动开发的经验之谈
     就Linux驱动开发而言,大家通常讲只要了解设备模型就能比较好的理解设备驱动。话虽如此,但是如果仅仅是这样,要想开发驱动程序可能也不太现实。个人觉得更多的内核机制是必不可少的。比如内存管理、线程管理、文件系统。 而其他一些小机制也必须掌握, 中断、链表、队列、定时器……等等。毕竟做驱动开发,不是说往系统里面注册了这个设备就完事了,更重要的是要完成设备所做的工作。
     在开发的过程中,多看别人的驱动程序是必不可少的,也是学习的捷径;
     所谓磨刀不误砍柴功,花点时间学习调试的方法和相关的工具也是有必要的。
     检验驱动完善与否的唯一途径就是测试, 所以,一个优秀的开发人员,必定是一个优秀的测试工程师。

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
     Linux驱动 主要是针对Linux操作系统,兼容性是其一个比较重要的评价标准;而且Linux 版本如此众多,Linux系统厂商也很多,就主流的 ubuntu、redhat、fedroa等也都有各自的差异,所以能开发一款通用性高的驱动程序也是Linux驱动开发工程师面临的难题;    而Android的驱动程序虽然基于LINux内核,但是内核版本通常固定,而且主要针对某一固定终端设备,所以只要在该终端上没有问题就可以了, 也正因为如此,android 驱动开发工程师需要开发的驱动会比较多,而不像PC linux 驱动那样,专注于某一个设备的驱动。
     关于如何转换,我觉得必要的硬件知识是需要的;另外就是要善于利用网络资源。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP