linux驱动开发学习路线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux驱动开发学习路线相关的知识,希望对你有一定的参考价值。
这篇文章是和大四学弟交流的文章,贴出来,和大家学习讨论
需要掌握的基本技能:
- C/C++/
- python
- shell
- makefile
- linux基本操作
以android手机为例,我通俗的介绍下市场上产品的软件结构。
手机--->
硬件:cpu(arm架构单片机)+各种传感器(显示屏、距离传感器、温度传感器、gms模块
gprs模块等等)。本质上手机就是一个单片机加上一堆传感器,单片机控制各个传感器与人进行负责的交互。(驱动工程师就是在linux底层让传感器可以工作,然后提供控制硬件的接口交给android层,android对硬件进行逻辑控制)
软件:少量的汇编+linux kernel核心层+linux kernel框架下的驱动层+framework c++层(提供接口给java层) + java android逻辑层 + android应用层。(驱动工程是基本上不会去动linux kernel核心层,是kernel大神linus等人才去改的,驱动工程师是基本上是要理解linux kernel架构,在kernel的框架下驱动各个传感器)
学习路线:
1.会linux基本操作(命令)
常用的如对文件的操作、对文件夹的操作、vim/vi的使用、对文件夹/文件、linux权限、基本的shell语法
此处的学习:快速->兄弟连linux视频教程 里面是基于centos讲解,建议实际使用ubuntu
慢速->鸟哥的linux私房菜 个人觉的这个是很有必要的,内功要扎实。
2.C的进一步学习
再次去学习C,此时尤其关心结构体、指针(尤其是函数指针,linux 架构是通过指针函数实现的)
再次学习C,建议在linux环境下进行,在命令终端下vim+gcc,进一步熟悉linux使用
3.makefile的学习
makefile 控制这linux整个底层的编译,工作前不需要了解多深,在“C的进一步学习”中,编写C程序试着用makefile控制编译结果即可
4.shell的学习
shell是自动化脚本,可以看成是命令的集合,在驱动开发中到处都有,工作前也不需要了解太深,在看兄弟连linux视频教程和鸟哥的linux私房菜中都会有,能看懂就行。
5.python的学习
python也是编译linux使用的脚本之一,工作前不需要看,用到再看也行。
上面五个是做linux驱动的必备条件,也就是基础,这些不会,即使你能看懂驱动程序也仅仅是个程序猿而已。
6.linux驱动的学习
首先要明白,linux驱动框架分为很多中,linux把传感器分为不同类型的设备,linux出现五大子系统,如input子系统,就把键盘、触摸屏、距离传感器、指纹识别模块这些划在input子系统下,所以这些传感器的驱动开发就要遵循input子系统的要求和系统接口。
所以在学习驱动之前要明白你以后要做的大概方向,然后针对性的去学习某个子系统。
在学习初期,可以买个开发板,自己给板子加个按键,写个按键驱动(千万别小看按键驱动,并不像单片机那样读1/0就行了!!!)。驱动就入门了。
书籍:linux设备驱动开发详解 ------------ 零基础 看不懂硬着头皮多看几遍就好了。其中的代码可以在开发板上试着实现。
linux设备驱动程序 ------------ 有寄出 上来就看这个不一定能看懂。
写在最后:
这周二和马栋聊天,在说嵌入式的事情,昨晚彭茂老弟问我关于linux驱动的相关学习,和他聊天才知道找到的是驱动开发的相关工作,感觉工作室的发展更进了一步,一般驱动开发的工作是研究生或者有多年单片机开发经验的人去做的。当初自己进入驱动这个行业走了不少弯路,也进入各个群、问多年经验的同事linux该怎么学,这里写出来与大家交流,上面仅仅是我过去两年的思考,如果有任何疑问可以随时与我沟通。
工作室10年就买了三星2440的arm开发板,在工作室放了六年了,因为门槛比较高,一直没有人去用她。看到工作室的进步,自己也特别的开心。
以上是关于linux驱动开发学习路线的主要内容,如果未能解决你的问题,请参考以下文章