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开发板,在工作室放了六年了,因为门槛比较高,一直没有人去用她。看到工作室的进步,自己也特别的开心。

时间: 2024-12-17 21:47:42

linux驱动开发学习路线的相关文章

Linux驱动开发学习的一些必要步骤

1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现. 在ioctl里完成从用户空间向内核空间传递结构体的实现. 6. 写一bl

Linux系统开发学习路线

一:嵌入式c语言 C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识.包括:基本数据类型.数组.指针.结构体.链表.文件操作.队列.栈等. 二:Linux基础 Linux操作系统的概念.安装方法,详细了解Linux下的目录结构.基本命令.编辑器VI ,编译器GCC,调试器GDB和 Make 项目管理工具, Shell Makefile脚本编写等知识,嵌入式开发环境的搭建. 三:Linux系统编程 重点学习标准IO库,Linux多任务编程中的多进

linux驱动开发学习三:异步操作

前面的队列以及锁都是基于阻塞是的操作.要实现同步,还可以通过信号也就是异步的方式来进行.例如在往文件的写入字符后,发送一个信号.捕捉到信号后执行动作.这样就不会造成阻塞,之前的阻塞性IO和POLL,是调用函数进去检查,条件不满足是造成阻塞. 应用层启动异步通知机制就三个步骤: 1 调用signal函数,让指定的信号SIGIO与处理函数sig_handle对应 2 指定一个进程作为文件的”属主(filp-owner)”, 这样内核才知道信号要发给哪个进程 3 在设备文件中添加FASYNC标志,驱动

Linux设备驱动开发学习(1):前言

虽然网络上已经有很多Linux设备驱动开发学习的文章和博客,更是有很多经典的Linux设备驱动开 发的书籍,写这些博文似乎意义不大,但把自己的学习过程.学习心得记录下来,一方面有着强化巩固的 意义,另一方面也是把所学知识转化为自己所得的必要途径之一,这是我写这些的博客的原始动力.

Hasen的linux设备驱动开发学习之旅--异步通知

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:异步通知 * Date:2014-11-05 */ 一.异步通知的概念和作用 阻塞和非阻塞访问.poll()函数提供了较好地解决设备访问的机制,但是如果有了异步通知整套机制就更 加完整了. 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这 一点非常类似于硬件上"中断"的概

Hasen的linux设备驱动开发学习之旅--时钟

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date:2014-11-15 */ 一.内核定时器 1.内核定时器编程 软件意义上的定时器最终依赖硬件定时器来是实现,内核在时钟中断发生后执行检测各定时器是否到期, 到期后的定时器处理函数将作为软中断在底半部执行.实质上,时钟中断处理程序会唤起TIMER_SOFTIRQ 软中断,运行当前处理器上到期的所有定时器. Linu

Hasen的linux设备驱动开发学习之旅--异步I/O

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:异步I/O * Date:2014-11-11 */ linux中最常用的输入/输出(I/O)模型是同步I/O.在这个模型中,请求发出后,应用就会阻塞,知道请求满足 为止.但是在某些情况下,I/O请求可能需要与其他的进程进行交叠.可移植操作系统接口(POSIX)异步I/O(AIO) 应用程序接口(API)就提供了这种功能. AIO基本

Hasen的linux设备驱动开发学习之旅--中断

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:中断 * Date:2014-11-13 */ 一.中断和定时器 所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停执行当前的程序, 转而去处理突发事件,处理完毕后CPU又返回原程序被中断的位置并继续执行. 下图是中断的分类 嵌入式系统以及X86 PC中大多包含可编程中断控制器(PIC),许多MCU内部就

Hasen的linux设备驱动开发学习之旅--linux设备驱动中的并发与竞态

/** * Author:hasen * 参考 :<linux设备驱动开发详解> * 简介:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:linux设备驱动中的并发与竞态 * Date:2014-11-04 */ 1.并发与竞态 并发(concurrency)指的是多个执行单元同时.并行被执行,而并发的执行单元对共享资源(软件上的全 局变量,静态变量等)的访问则很容易导致竞态(race conditions). 主要的竞态发生在以下几种情况: (1)对称多处理(SMP)