学习Linux设备驱动程序入门 (linux设备驱动程序入门)

随着计算机技术的不断发展,操作系统的选择越来越多样化。Linux作为一款自由和开源的操作系统,日益受到更多人的喜爱。而作为Linux系统的核心,设备驱动程序的编写也变得越来越重要。那么,,该从何处开始呢?

1.了解Linux系统

在学习Linux设备驱动程序之前,首先需要了解Linux系统的基本概念和组成部分。特别是内核的概念,因为设备驱动程序就是内核中的一部分。同时,还需要熟悉Linux的文件系统、进程和进程间通信等概念。

2.了解设备驱动程序的基本原理

设备驱动程序是Linux系统中的一种特殊的驱动程序,它是计算机系统与硬件设备之间的桥梁。设备驱动程序主要负责为硬件提供接口,使得操作系统能够与硬件设备进行通信。因此,了解设备驱动程序的基本原理是至关重要的。

3.学习Linux内核编程

学习Linux设备驱动程序之前,必须要了解Linux内核编程的基础知识。该知识包括如何编译内核,并了解内核中的文件、数据结构、宏和函数等。此外,还需要学习如何调试内核代码,这对于设备驱动程序的编写非常重要。

4.学习Linux设备驱动程序的编写

在学习完必要的基础知识之后,就可以开始学习Linux设备驱动程序的编写了。编写设备驱动程序需要掌握C语言编程技术和Linux内核编程技术。通常情况下,设备驱动程序的编写需要熟悉设备驱动程序注册、设备文件的创建、设备驱动程序的主要函数等。

5.了解常用的Linux设备驱动程序

在学习Linux设备驱动程序的过程中,了解常用的设备驱动程序是非常有益的。常见的设备驱动程序包括字符设备驱动程序、块设备驱动程序、网络设备驱动程序等。通过了解这些设备驱动程序,可以更好地掌握设备驱动程序的编写技巧。

6.调试和测试设备驱动程序

设备驱动程序的编写完成之后,必须进行调试和测试。在调试和测试设备驱动程序的过程中,需要使用一些工具和技术。例如,可以使用printk()函数输出日志信息,使用gdb调试器进行调试,使用strace命令跟踪设备驱动程序的系统调用等。

需要了解Linux系统、设备驱动程序的基本原理、Linux内核编程等基础知识。同时,还需要学习正规的编码方法和调试技巧。经常与其他开发者交流、寻找其他资料和方法也是十分必要的。掌握了这些基础知识,我们就可以更好地编写自己的设备驱动程序,在Linux系统中发挥自己的技术水平。

相关问题拓展阅读:

我准备考程序员要学什么?

1、Java

Java编程语言(第三版)—Java四大名著—-James Gosling(Java之父)

Java编程思想(第2版)—-Java四大名著—-Bruce Eckel

Java编程思想(第3版)—-Java四大名著–Bruce Eckel

JAVA 2核心技术 卷I:基础知识(原书第7版)—Java四大名著—–Cay Horstmann

JAVA 2核心御氏技术 卷II:高级特性(原书第7版)—-Java四大名著—–Cay Horstmann

Effective Java中文版——Java四大名著Joshua Bloch

精通Struts:基于MVC的Java Web设计与开发—孙卫琴

精通Hibernate:Java对象持久化技术详解—孙卫琴

Tomcat与Java Web开发技术详解孙卫琴

Java与模式–阎宏

2、c#

C#程序设计Charles Petzold“windows编程泰山北斗”—C#语言“倚天屠龙双剑”

C# Primer中文版Stanley B.Lippman—C#语言“倚天屠龙双剑”

.NET框架程序设计(修订版)Jeffrey Richter“windows编程泰山北斗”—.NET平台四大天王

c#Windows程序设计Charles Petzold“windows编程泰山北斗”——.NET平台四大天王

.NET程序设计技术内幕Jeff Prosise—.NET平台四大天王

.NET本质论–第1卷:公共语言运行库(中文版)Chris Sells—.NET平伍拆碧台四大天王

3、C++

C++程序设计语言(特别版)—c++八大金刚—-Bjarne Stroustrup“C++之父”

C++ Primer (第3版)中文版—-c++八大金刚—Stanley B.Lippman

C++ Primer (第4版)中文版—-c++八大金刚—Stanley B.Lippman

C++标准程序库—自修教程与参考手册–c++八大金刚–Nicolai M.Josuttis

C++语言的设计和演化—–c++八大金刚—-Bjarne Stroustrup“C++之父”

深度探索C++对象模型—c++八腔举大金刚—-Stanley B.Lippman

Essential C++中文版—c++八大金刚—Stanley B.Lippman

Effective C++中文版 2nd Edition—–c++八大金刚——Scott Meyers

More Effective C++中文版—-c++八大金刚——Scott Meyers

C++编程思想(第2版) 第1卷:标准C++导引Bruce Eckel

C++编程思想(第2版)第2卷:实用编程技术Bruce Eckel

C++程序设计谭浩强

C++ 程序设计教程(第2版)钱能

C++ Primer Plus(第五版)中文版—Stephen Prata

广博如四库全书The c++ programming language、c++ Primer 深奥如山重水复Inside the c++ object model 程序库大全The c++ standard libray 工程经验之积累Effective c++、More Effective c++、Exceptional c++

c++八大金刚: 1、Essentital c++—lippman—C++之父,旁枝暂略,主攻核心,轻薄短小,初学者

2、The c++ programming language—-C++之父,技术权威,用词深峻,思想深远,c++百科全书代表,圣经。 3、c++ Primer—-lippman—纵横书市十数年,c++更佳教本,c++百科全书代表。 4、Inside the c++ object model—–lippman—-揭示c++底层,非常好,非常难。 5、Effective c++—–通过50个编程实例,展示专家经验,行文有趣,深处浅出。 6、More Effective c++----通过35个编程实例,展示专家经验,行文有趣,深处浅出。 7、The c++ standard libray---c++标准库的百科全书。 8、设计模式:可复用面向对象软件的基础------good!

4、c

C程序设计语言(第2版·新版)—C语言“倚天屠龙双剑”—Brian W.Kernighan“C语言之父”

C Primer Plus中文版(第五版)C语言“倚天屠龙双剑”—Stephen Prata

C程序设计(第三版)谭浩强

C语言大全(第四版)HERBERT SCHILDT

C语言接口与实现:创建可重用软件的技术DAVID R.HANSON

C语言参考手册(原书第5版)Samuel P.Harbison

C程序设计教程—–H.M.Deitel/P.J.Deitel

C陷阱与缺陷Andrew Koenig

5、VB

Visual Basic .NET技术内幕—–VB编程三剑客Francesco Balena“vb首席大师”

Windows程序设计-Visual Basic.NET语言描述–VB编程三剑客—–Charles Petzold“windows编程泰山北斗”—

.NET框架程序设计:Visual Basic.NET语言描述–VB编程三剑客–Jeffrey Richter“windows编程泰山北斗”—,Francesco Balena“vb首席大师”

Visual Basic 6编程技术大全Francesco Balena“vb首席大师”

Visual Basic.NET 从入门到精通Petroutsos,E.

高级VISUAL BASIC编程MATTHEW CURLAND

6、Delphi

Inside VCL(深入核心——VCL架构剖析)李维

Delphi 7高效数据库程序设计李维

面向对象开发实践之路(Delphi版)李维

7、VC

Windows 程序设计(第5版)—–Charles Petzold“windows编程泰山北斗”—

Windows核心编程Jeffrey Richter“windows编程泰山北斗”—

Windows高级编程指南Jeffrey Richter“windows编程泰山北斗”—

深入浅出MFC(第二版)—–“MFC四大天王”侯捷

MFC Windows程序设计(第2版)—MFC四大天王”Jeff Prosise

Visual C++ 技术内幕(第4版)–MFC四大天王”David Kruglinski

深入解析MFCMFC四大天王”George Shepherd

Visual C++.NET 技术内幕(第6版)-MFC四大天王”David Kruglinski

8、VF

Visual Foxpro程序设计参考手册—–张洪举

专家门诊——Visual FoxPro开发答疑160问—–张洪举

Visual FoxPro 6.0/9.0解决方案与范例大全—–张洪举

Visual FoxPro软件开发模式与应用案例—–张洪举

9、黑客

应用密码学(协议算法与C源程序Bruce Schneier

网络信息安全的真相Bruce Schneier

黑客大曝光:网络安全机密与解决方案(第5版)STUART MCCLURE

软件加密技术内幕看雪学院

加密与解密——软件保护技术与完全解决方案看雪学院

加密与解密(第二版)段钢

10、汇编

Intel微处理器结构、编程与接口(第六版)Barry B. Brey

80*86、奔腾机汇编语言程序设计Barry B. Brey

Windows环境下32位汇编语言程序设计(第2版)罗云彬

IBM-PC汇编语言程序设计(第2版) 本书是国内优秀教材沈美明 温冬婵

IBM PC汇编语言程序设计(第五版) 这本书籍是国外优秀教材PETER ABEL著,沈美明 温冬蝉译

11、驱动开发

Windows WDM设备驱动程序开发指南Chris Cant

Windows 2023/XP WDM设备驱动程序开发(第2版)武安河

WINDOWS 2023/XP WDM设备驱动程序开发—- 武安河

12、网络

计算机网络第四版中文版—-网络编程三剑客Andrew S.Tanenbaum

TCP/IP详解3卷本——Richard Stevens—-网络编程三剑客

UNIX网络编程2卷本——Richard Stevens—-网络编程三剑客

用TCP/IP进行网际互联Douglas E. Comer

高级TCP/IP编程—–Jon C. Snader

C++网络编程Douglas Schmidt

UNIX环境高级编程(第2版)——Richard Stevens

13、算法

计算机程序设计艺术Donald.E.Knuth算法“倚天屠龙”双剑

算法导论—Thomas H. Cormen算法“倚天屠龙”双剑

离散数学及其应用Kenneth H.Rosen

具体数学—计算机科学基础Donald.E.Knuth

14、图形编程 Windows 图形编程–FENG YUAN –图形编程界的Charles Petzold之书

15、数据结构

数据结构 C++语言描述》58.00(Data Structures C++) William Ford,William Topp 刘卫东 沈官林

数据结构算法与应用-C++语言描述》49.00Sartej Sahni 汪诗林 孙晓东等机械工业出版社

16、软件工程

设计模式–可复用面向对象软件的基础

重构—改善既有代码的设计

17、操作系统

深入理解计算机系统(修订版)RANDAL E.BRYANT

18、Unix

UNIX 网络编程 卷I 套接字联网API(英文版第三版 UNIX 编程艺术 UNIX环境高级编程(英文影印第2版—–UNIX编程“圣经 UNIX环境高级编程(英文影印版)(第2版) 99-UNIX环境高级编程(第2版) UNIX环境高级编程(第2版)—UNIX编程“圣经 UNIX网络编程 第1卷:套接口API(第3版) UNIX网络编程卷2:进程间通信(第2版)(英文影印版) UNIX 网络编程(第二版)第2卷:进程间通信 UNIX编程环境 UNIX 网络编程 卷I 套接字联网API(英文版第三版 UNIX系统编程 UNIX环境高级编程 UNIX环境高级编程(英文影印版 88-LINUX内核分析及编程 UNIX 网络编程 卷I 套接字联网API(英文版第三版) UNIX网络编程 第1卷:套接口API(第3版) UNIX 网络编程(第二版)第2卷:进程间通信 UNIX网络编程卷2:进程间通信(第2版)(英文影印版) UNIX 网络编程(第2版)第1卷:套接口API和X/Open 传输接口API UNIX网络编程(卷1):连网的APLS:套接字与XTI(第二版)(英文影印版) UNIX环境高级编程 UNIX 环境高级编程(英文版) UNIX环境高级编程(第2版) Unix技术手册

19、Linux

Linux内核设计与实现 Linux内核完全注释 LINUX内核分析及编程 GNU/Linux 编程指南(第二版) Linux设备驱动程序(第三版)嵌入式设计及Linux驱动开发指南——基于ARM 9处理器 Linux设备驱动程序 第三版(英文影印版) Linux内核设计与实现(第2版) Linux内核设计与实现(英文影印版)(第2版) linux技术手册

20、游戏编程

Windows游戏编程大师技巧(第二版游戏之旅–我的编程感悟 OpenGL超级宝典:第三版 OpenGL编程指南(第四版) Java 游戏高级编程 J2ME手机游戏编程入门 游戏之旅——我的编程感悟游戏开发中的人工智能(英文影印版) 3D游戏:卷2 动画与高级实时渲染技术面向对象的游戏开发 Java 游戏高级编程 3D游戏编程大师技巧游戏编程精粹面向对象的游戏开发 3D游戏 卷1:实时渲染与软件技术 3D游戏:卷2 动画与高级实时渲染技… J2ME手机游戏编程入门 Direct3D游戏编程入门教程(第二版…

21、移动开发

Windows Mobile手机应用开发 SYMBIAN OS C++手机应用开发 68-Windows Mobile手机应用开发–傅曦 齐宇 徐骏 48-SYMBIAN OS C++手机应用开发 (第2卷)—-RICHARD HARRISON著,周良忠 王伯欣译 68-SYMBIAN OS C++手机应用开发-RICHARD HARRISON著,周良忠译 Windows CE.net内核定制及应用程序开发周毓林 宁杨 陆贵强 付林林 嵌入式系统Windows CE 开发技巧与实例–傅曦 Palm OS编程实践—绝版

22、单片机

单片机轻松入门——周坚(平凡老师)

单片机典型模块设计实例导航求是科技

例说–张义和 陈敌北

KEIL CX51 V7.0单片机高级语言编程与ΜVISION2应用实践—–徐爱钧

单片机应用程序设计技术(修订版)——周航慈

8051单片机实践与应用—吴金戎

MCS-51系列单片机实用接口技术李华

23、串并口通讯

Visual C++/Turbo C串口通信编程实践—-龚建伟

VISUAL BASIC与RS-232串行通信控制(最新版)范逸之

24、电子

无线电识图与电路故障分析轻松入门(第二版)——胡斌

无线电元器件检测与修理技术轻松入门(第二版)——胡斌

图表细说电子技术识图—–胡斌

图表细说电子元器件—–胡斌

图表细说元器件及实用电路—–胡斌

嵌入式需要学什么?嵌入式需要学哪些课程和内容?

重点也就是单片机[包括arm这类比较强大的]和FPGA了

专业基础课就一大堆了,像楼喊败弊上说的那些,其实还有更多。。。

不过如果像fpga这类东西学精了,可以自己设计处理器,然后开发专用的系统,再做编译枯告器,做配套的数据库。。。。

不过一般似乎没人这么玩,太累郑族了。。。

1.1 有哪些设备使用单片机或Linux

所有的电子产品,所用技术都可以认为要么是单片机,要么是Linux;GUI方面主要是QT/Android,它们都是运行于Linux之上的。我们说的单片机不使用操作系统,但是使用单片机设备肯定远远超过Linux。很多人也是先学悄弯习单片机,从单片机进入电子工程师行业,日常生活中,有哪些产品使用单片机、Linux呢?下面举一些例子:

我们设计一个产品时,是使用单片机还是Linux,取决于成本:硬件成本、软件成本、维护成本、升级成本。而不应该根据个人偏好来选择:我喜欢单片机,所以就排斥使用Linux;我喜欢Linux,就排斥使用单片机。为了有更多的选择,我们需要既懂单片机,又懂Linux。

1.2 在硬件操作上单片机和Linux是类似的

以点灯为例,

无论是单片机还是Linux,我们要做的事情都一样:

看原理图,确定引脚是哪一个,确定它输出什么电平才可以

看芯片手册,确定要怎么操作寄存器

写程序

但是,怎么编写程序,单片机和Linux有很大不同。

1.3 在单片机中点灯、使用LCD

使用单片机开发程序时,我们一上来就写一个main函数,下面是一些简化的代码:

请点击输入图片描述

LED程序里面的init_led、led_on、led_off函数是你一个人写的,爱取什么名就取什么名,爱怎么写就怎么写。

LCD程序里的函数也是你写的,完全是自由发挥。

很多单片机项目不是很复杂,2、3个坦隐人从上到下统统搞定,里面的函数大多时间是直接去读写寄存器。

很多单片机项目严重依赖于硬件,换一个芯片后怎么办?重写一套代码呗。

在单片机程序里,没有应用程序、驱动程序的概念,很可能一个人包揽了硬件设计、模块调试(或称之为驱动)、功能开发(或称之为应用)的全部活。

1.4 在Linux中点灯、使用LCD

在Linux中,不允许应用开发人员直接去操作硬件,比如你想点个灯,不好意思,你无法直接访问寄存器;你需要通过驱动程序来访问寄存器。

为什么?有几大原因:

Linux系统中运行着众多程序,必须保证质量差的程序无法破坏系统:假设你写的程序比较烂,那我不能让你去随便访问寄存器,把系统搞崩溃了怎么办?你本意是去点灯,但是你看错了寄存器,你把电源关了怎么办?所以这些操作硬件的活,还是交给信得过的人来做吧:交给驱动工程师,他既懂硬件又懂软件。

保证程序的可移植性:编写应用程序时,大家都使用统一的函数,以后换一个芯片时,应用程序不用变;只需要根据这个接口提供驱动程序就可以了。

团队协作:使用Linux系统的项目一般比较大,术业有专攻,一个人不太可能从上到下都全部掌握。比如做人脸识别项目,有擅长做图像处理的,他可不管你要用多少种摄像头,有图像给他就可以。而多种摄像头的硬件操作方法各有不同,这些交给驱动程序工程师。

所以,在Linux中应用程序和驱动程序是分开的。

以LED、LCD程序为例,简化的代码如下

请点击输入图片描述

也许你已经大概猜出来了,应用程序怎么调用驱动程序?通过标准的接口:

open:打开驱动程序。

read/write:读、写数据。

ioctl:传入各种参数,获得各种参数。

mmap:内存映射,比如映射之后,应用程序可以直接读写LCD的显存。

你看!从这些接口里,我们根本看不到寄存器的操作。底层的程序驱动会根据这些调用,去设置寄存器、操作硬件。

所以,我高大上的让运厅应用工程师,干嘛苦哈哈地去看原理图、看在片手册、读写寄存器,搞不好还要去调试硬件BUG。这些脏活、累活就交给驱动工程师吧。客户的需求千变万化,我996时间都不够用了。

我上懂软件、下懂硬件的驱动工程师,肯定不能把这么重要的活交给你去做了,把我的系统搞崩溃了怎么办。

开玩笑、开玩笑、开玩笑的,有应用工程师、驱动工程师的优劣之分,大家都是为了做出产品。现在有一个趋势,一个任务从上到下你都需要懂,这就是所谓的全栈工程师。

还是以LED为例,应用程序和驱动程序的协作如下图所示:

在Linux中,“一切皆文件”,要访问某个硬件,也是要打开文件、读写文件。应用程序要根据标准的文件接口:open/read/write/ioctl/mmap等来访问驱动程序。

既然如此,怎么写驱动程序呢?最简单的方法就是:APP要调用open来打开驱动程序,那驱动‘程序里就提供一个_open函数来初始化硬件;APP要调用write来写数据,驱动程序里就提供一个_write函数来接收数据并操作硬件。

用_open、_write来构成一个驱动程序,这就是驱动框架。

怎么实现这些_open、_write函数?我们要做的事情跟单片机是类似的,一样要去看电路图、看芯片手册,然后在这些函数里读写寄存器:这称为硬件操作。

所以,Linux驱动程序= 驱动框架 + 硬件操作。

有单片机基础的人,对硬件操作比较熟悉了,把重点放在驱动框架上就可以。

高能预警:驱动框架可不简单,对于LED来说是简单,但是还有更复杂的驱动程序,它要考虑“通用”,这很要命。

第2章 嵌入式Linux快速入门

这几天在群里跟学员聊天,有一位学员的学习方法很好:先观其广,再究其深。有时候要“不求甚解”,很多时候保持疑问先学下去,这些疑问就自然解决了。

比如课程中涉及汇编知识,如果你要彻底弄清楚,你需要去学习《ARM架构与编程》;当你学完这本书,你的同学搞不好已经可以上手工作了。

2.1 短期的目标是什么

我们先把学习目标定下来:快速了解嵌入式Linux开发的流程,知道要学什么,具备跟从业者交流的能力。

2.2 一个嵌入式Linux系统的组成

请点击输入图片描述

请点击输入图片描述

下面我们用类比和逻辑推导出嵌入式Linux系统的组成,没错,“推导”。

从上图可以知道:

组成:嵌入式Linux系统= bootloader + linux内核 + 根文件系统(里面含有APP)。

bootloader:它的目的是启动内核,去哪等读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。所以,可以认为 booloader = 裸机,它就是一个复杂的单片机程序。

Linux内核:Linux内核的最主要目的是去启动APP,APP保存在哪里?保存在“根文件系统”里。“根文件系统”又保存在哪里?在Flash、SD卡等设备里,甚至可能在网络上。所以Linux内核要有这些Flash、SD卡里设备的驱动能力。

不仅如此,Linux内核还有进程调度能力、内存管理等功能。

所以:Linux内核 = 驱动 + 进程调度 + 内存管理等。

2.3 要学习bootloader吗

Bootloader有很多种,常用的叫u-boot。

在实际工作中,对于u-boot基本上是修修改改,甚至不改。但是u-boot本身是很复杂的,比如为了便于调试,它支持网络功能;有些内核是保存在FAT32分区里,于是它要能解析FAT32分区,读FAT32分区的文件。

花那么多精力去学习u-boot,但是工作中基本用不到,这对初学者很不友善。

所以,对于初学者,我建议:理解u-boot的作用、会使用u-boot的命令,这就可以了。

如果你的工作就是修改、完善bootloader,那么再去研究它吧。

2.4 要学习Linux内核、要学习驱动程序吗

之前我们说过Linux内核 = 驱动 + 进程调度 + 内存管理等,如果要学习Linux内核,从驱动程序入手是一个好办法。

但是人人都要学习Linux内核、人人都要学习Linux驱动吗?显然不是。

作为初学者,懂几个简单的驱动程序,有利于工作交流;理解中断、进程、线程的概念,无论是对驱动开发、应用程序开发,都是很有好处的。

所以对于初学者,建议前期只学习这几个驱动:LED、按键、中断。

LED驱动程序:这是最简单的驱动程序。

按键驱动程序:它也比较简单,从它引入“中断”。

中断:从“中断”它可以引入:休眠-唤醒、进程/线程、POLL机制、异步通知等概念。这些概念无论是对驱动开发,还是对应用开发,都很重要。

所以,对于初学者,我建议必须学习这几个驱动:LED、按键、中断。

入门之后,如果你想从事内核开发、驱动开发,那么可以去钻研几个驱动程序(输入系统、I2C总线、SPI总线等),掌握若干个大型驱动程序后,你对内核的套路就有所了解了,再去研究其他部分(比如进程管理、文件系统)时你会发现套路是如此通用。

摄像头(VL42)、声卡ALSA驱动是Linux中比较复杂的2类驱动,它们是很难的,如果工作与此相关再去研究。

2.5,要学习Linux应用程序吗?先学一些基础技能

要学,即使以后你只想研究内核,一些基本的应用开发编写能力也是需要的:

基本设备的访问,比如LCD、输入设备

进程、线程、进程通信、线程同步与互斥

休眠-唤醒、POLL机制、信号

网络编程

①②③部分的知识,跟驱动有密切的关系,它们是相辅相承的。

掌握了基本驱动开发能力、基本应用开发能力之后,在工作中你就可以跟别人友好沟通了,不至于一脸懵逼。

2.6,应用程序是怎么启动的?要了解一下根文件系统

你辛辛苦苦写出了应用程序,怎么把它放到板子上,让它开机就自动启动?

你写的程序,它依赖于哪些库,这些库放到板子上哪个目录?

怎么做一个可升级的系统?即使升级中途断电了,也要保证程序至少还可以运行老的版本?

这些都需要我们了解一下根文件系统。

先了解一下init进程:它要读取配置文件,根据配置文件启动各个APP。

了解了init进程,你就了解了根文件系统的组成,就可以随心所欲裁剪系统,为你的项目制作出最精简的系统。

第3章 学习方法

3.1 先不要打破砂锅问到底

嵌入式涉及的东西太多太杂了,如果心里没有主线,碰到什么都要去研究个透彻,最终反而忘记自己要学什么了。

嵌入式涉及硬件知识、软件知识,软件里涉及汇编、ARM架构、C语言、Makefile、Shell;又分为bootloader、内核、驱动、基本的APP、GUI。

比如我们会用到Makefile,了解它的基本规则,会用我们提供的Makefile就可以。

不需要深入研究那些make函数,因为在工作中都有现成的Makefile给你使用,不需要自己去编写一套Makefile。何必花上好几天去深入研究它呢?

比如我们会用到bootloader,难道又要花上几个月来深入研究u-boot吗?工作中基本不需要改u-boot,会用那几个命令就可以。

甚至有些学员先去买本shell的书来学习shell命令,何必?我们在视频中用到什么命令,你不懂时再去百度一下这些命令就可以了。

不要脱离初学者的主线:应用基础、驱动基础。有了这2个基础后,你想深入研究某部分时,再去花时间吧。

3.2 思路要清晰,不怕抄代码

视频里的代码,请你一定要自己去写一次、写多次。为什么我现在写驱动那么熟?我2023年在华清远见上课时,

每次上课我都要给学生写一次那些驱动,十几次下来闭着眼睛都知道内核的套路了。

记不住那些函数?我也记不住,我都是去参考同类的驱动程序,这又不是闭卷考试。

但是要理清楚思路,你写这个程序要完成什么功能、怎么实现这些功能?这个要弄清楚。

有了思路后再写代码,不知道怎么写?没关系,看看视频,看看示例,然后关闭视频看看能否自己写出来。

3.3 对自己的方向很了解,我只能带你到这里了

我的专长是操作系统,是快速地带领大家掌握一些项目开发的基础知识。

如果你决定深入研究某方面时,我并不能带你多久。你要去看源码,去看这方面的专业书籍。

比如想深入钻研内核的内存管理时,它有页表映射(你需要阅读ARM架构的手册)、SLAB分配器、vmalloc/malloc实现、mmap实现、缺页中断、父进程子进程之间的页面管理等等,内容非常多。有时候连书籍都没有,你需要直接啃代码。

当你想从事某个行业时,就需要深入研究行业相关的知识。

比如CAN总线,它可以写成一本书:CAN协议、CAN报文、Socket CAN、车身网络拓扑结构,CAN应用报文,CAN网络管理报文,CAN诊断报文。

想做物联网网关,需要深入研究MQTT,MQTT协议相对简单,但是MQTT英文原版协议有130多页,中文版有近100页,是一本小书了。

每个行业都有自己的业务逻辑,在掌握基本的编程能力之一,你需要结合具体的业务去深入学习。

嵌入式系统是计算机软件和硬件的综合体,岗位包括:ESE(嵌入式软件工程师);ADE(嵌入式应用开发工程师);FWE(嵌入式底层开发工程师);FEC(嵌入式固件开发工程师),我有嵌入式视频课可以发给你自学。

课程内容主要斗简包括:

①C,Java核心编程:c语言核心编程,Java核心编程;

②Linux核心操作与算法:Linux系统使用,Linux-c编程核心技术,精品数据结构,Linux-c编程精髓;

③核心操作与算法:Linux系统编程,Linux网络编程核心技术,UI编程,Java核心编程,安卓核心技术;

④ARM+Linux底层开发:数字电路,ARM编程核心,Linux系统开发,嵌入式Linux驱动开发;

⑤大型项目实践:每期安排各类型真实的项目,详细可以找我要轿清资料。

课堂实拍

你可以考闭销前察对比一下南京课工场、北大青鸟、中博软件学院等开设有嵌入式开发专业的学校。记得找我要嵌入式开发视频课,祝学有所成!望采纳!

入门嵌入式工程师

此阶段主要是前期的入门过程,主要针对入行没多久的新人。其实成功没有捷径,所以打好基础才是关键。嵌入式开发要学什么主要包含以下4个方面的内容:

1.电路知识 首先你要学习电路、模电、数电,认识电阻、电容、三极管,基础器件要知道,放大电路、集成运放、时序电路基本电路能看懂,不然看电路图一定是云里雾里,也就无法进行后续的工作。硬件产品的设计实现,包括器件选型、原理图和PCB设计、电路调试,都需要过硬的电路基础。

2.C语言

C语言是嵌入式开发中最重要的编程语言,要对这门语言有深入的理解,毕竟不仅仅要会写程序,看懂他人程序也很重要。最基本的数据段伍类型、数组、指针、结构体,链表、文件操作等都要会,掌握基本语法和语句,不然你要能区分指针数组与数组指针吗?

3.单片机 单片机入门相对简单,通过单片机的学习可以熟悉单片机的硬件结构,包括I/O口、AD转换、通信(串口、并口、I2C、CAN、USB、以太网、ZigBee技术等)、显示(LED、LCD等)、控制(PWM等控制技术)、数据处理(图形、图像、语音、视频等的处理或识别)等,学好单片机可以为采用嵌入式系统奠定良好的基础。

4Linux基础

Linux的源码和架构都是开放的,在嵌入式系统中应用尤为广泛,学习Linux对于系统的开发会有很大的帮助。详细了解Linux下的目录结构、基本命令、编辑器VI、编译器GCC、调试器GDB和 Make 项目管理工具,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建。

中级嵌入式工程师

经过之一个阶段的学习,你已经可以进行嵌入式开发工作了,但是要进阶依旧还有很多知识要学,而这个阶段也将是之一个分水岭,使得优秀的嵌入式工程师得以脱颖而出。此阶段虽然只有三项,但涉及的知识非常广,要想学好需要花费大量的精力。

1.Linux编程

系统编程可以直接跟内核及核心系统程序库对话,深入了解Linux内核。掌握Linux系统编程主要提升对Linux应用开发的理解和代码调试的能力。由于网络应用开发越来越广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,可以全面了解Linux网络应用程序开发。

2数据结构与算法 数据结构及算法在嵌入式底层驱动、通信协议及各种引擎开发中得到了广泛的应用,语言编译要使用栈、散列表以及语法树;操作系统中用队列、存储管理表及目录树等;数据库系统运用线型表、多链表及索引表进行数据管理等等,对其掌握的好坏直接影响程序的效率、简洁及健壮性。

3.QT、DSP、FPGA

Linux没有自己界面,学习QT编程可以创建艺术级的图形用户界面所需的所有功能,从而更好的实现人机交互控制。而如今用户对于图形图像的要求也越来越高,这就需要DSP、FPGA技术来设计开发更好的嵌入式视觉系统。

高级嵌入式工程师

学习了前两个阶段的知识,你已经可以胜任大部分嵌入式工作了,但是距离大咖仍有一定的差距,其实已经到了第二个分水岭。这部分更多涉及系统层面,没有全方位的知识将会很难下手。

1操作系统平台开发 除了Linux外,嵌入式操作系统还有ARM、WINCE、uC/OS II、Vxworks、uClinux等,不同的系统有着不同的使用环境,你需要学习掌握系统的各个模块,为底层平台搭建做好准备。熟悉各个操作系统的特点以及系统的内核移植,确保操作系统能在某个微处理器或微控制器上运行。随着手机智能硬件的快速兴起,Android操作系统开发也越来越重要。

2驱动开发 驱动程序设计是嵌入式Linux开发工作中非常重要的一部分。不仅要熟悉Linux的内核机制、驱动程序与用户级应岩燃纤用程序的接口,掌握系统对设备的并发操作。还要具备ARM硬件接口的基础知识,熟悉ARM Cortex处理器各资源、掌握Linux设备驱动原理框架,以及工程中常见Linux高级字符设备、块设备、网络设备、USB设备的驱动开发。

以上嵌入式工程师需要学什么,分为三个阶段来讲解,其实还有一条捷径,就是参加华清远见的嵌入式培训,华清远粗仿见的嵌入式培训是行业内各大公司都认可的培训。

当你到达这里的时候,可以说你已经是一个人生赢家了,而真正的学习过程如同一场漫长的修行,在这个过程中,必定有各种各样的困难。当然了,嵌入式工作中更多的需要实践以及经验的积累,相信守得云开见月明,你也可成为一名优秀的嵌入式工程师。

linux设备驱动程序入门的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux设备驱动程序入门,学习Linux设备驱动程序入门,我准备考程序员要学什么?,嵌入式需要学什么?嵌入式需要学哪些课程和内容?的信息别忘了在本站进行查找喔。


数据运维技术 » 学习Linux设备驱动程序入门 (linux设备驱动程序入门)