微软交流社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 89|回复: 0

嵌入式驱动程序设计的小门路,业界大牛总结

[复制链接]

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-11-27 20:45:42 | 显示全部楼层 |阅读模式
在深入学习了嵌入式之后,很多人想要更好点提升自己的技术,让自己的未来发展更好,能在这条路持久发展下去,关于嵌入式驱动程序设计的门路,这里有一些业界大牛整理的干货,小编整理了一下,希望可以帮到大家!
嵌入式驱动开发这个可以硬件工程师来做,也可以软件工程师来做,主要还是取决于设备。目前驱动开发,除非是简单的设备驱动,实际上很多时候都是移植,所以更多的是需要掌握目标平台的硬件和系统特性。所以至少得掌握一些操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM/MIPS/PowerPC架构。具有单片机、某种或多种32位嵌入式处理器的移植开发能力,熟悉bootloader过程,具有扎实的硬件知识,理解硬件原理图,能独立完成相关硬件驱动调试,能够根据芯片手册编写软件驱动程序。如果涉及到网络设备,或许还要掌握很多高层的网络协议的原理。个人感觉这一块虽然大部分不是很难,但却是极为重要的。当然如果要在这一层次提供对上层的多线程支持,某些驱动也是很难写的。
嵌入式驱动程序行业的薪水5年以上工作经验的,40K以上;应届硕士,一线城市 20K~30K,二线城市15K~25K,一般14~16薪本科毕业10K左右,工作2~3年,15K~25K左右。相信深入这行的对于薪水也是很有了解的。
嵌入式驱动程序设计,这个就是需要动手了,翻翻参考数据手册,微控制器在过去的几年里变得越来越复杂。以前想要完全了解一个微控制器需要掌握由一个大约包含500页组成的单一数据手册。而如今,一个32位微控制器通常包含由部分的数据手册、整个微控制器系列的资料表、每个外设数以百计的资料以及所有的勘误表组成的数据手册。 开发人员如果想要完全掌握这部分的内容需要了解几千页的文件。开发人员在一开始就要对每个数据手册中包含的信息进行收集和排序。通常它们中的每一个都需要被访问以使外设启动和运行。 关键信息被分散(或隐藏)在每种类型的数据手册中。反复翻看数据手册之后,我在数据手册中一个完全不相关的注脚里发现了PWM外设上电时会处于故障状态,需要将一个隐藏在寄存器中的标志位清零。在驱动程序实现的开始,确认外设可能出现的故障并查看其他看似无关的寄存器错误。谨防外设故障
这里有干货看过来!


基础部分
1. linux基本操作:
只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。
需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,mv,mkdir等,最关键是gcc命令要会用;一些简单的shell脚本;Makefile的编写。
2. c语言:
不会写代码,就建议不要学Linux,否则职业后期全是瓶颈。学习C语言一定要学习Linux下C编程。
3. 数据结构:
数据结构很重要,但是在这个上面花太多时间,也是没必要的。个人建议只要掌握几个基本的排序和查找算法即可,没必要把所有算法都研究一遍。能掌握常见的算法比如:冒泡排序、直接插入排序、快速排序、二叉树等。链表操作,创建、增删改查。
4. 基础阶段项目:
基础阶段,个人强烈建议一定要做一个综合性项目,从0开始写。用链表实现一个简单的《电话本管理软件》,包括增、删、改、查、排序等操作,把所有的知识点融会贯通起来。
进阶部分-Linux编程
1. 文件IO:
掌握posix的一套api,open、read、write、lseek,close等。熟练写出文件拷贝的功能模块输出。理解缓冲的概念。
2. 进程线程:
掌握常用的函数fork、exec族函数、pthread 等api;进程创建、回收,一个.c源文件变成可执行程序的过程;crontab、at命令;进程间通信:信号量、消息队列、共享内存、管道、信号;线程创建,同步互斥,互斥锁;守护进程;库的概念,什么是动态库和静态库,如何自己制作动态库和静态库。
3. 网络编程:
TCP/IP协议分层以及每一层的功能;不要看OSI,只要知道即可;socket api的使用,tcp、udp;套接字属性的设置;C/S架构;多进程、多线程服务器模型;抓包工具使用;常见的网络协议分析:ping、 tftp、 ftp 等;进阶阶段知识点很重要,即使以后你不做linux c开发,有了这些基础,你再去学java、c++你的视野一定会不一样。
4. 进阶项目
该阶段可以选择综合项目《多线程聊天室》,实现公聊、私聊、注册登录,互相发送文件等功能。
高阶部分
该阶段学习需要开发板配合,建议新手先把之前内容打扎实,再进入这个阶段学习。开发板的选择,最重要的是资料!没有资料的板子不要买!
1. ARM:
arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表,伪指令、C语言和汇编代码的互相调用、内联汇编;常见的外设的裸机驱动开发,led、key、adc、pwm、rtc、看门狗、i2c、spi等。这个阶段的内容,对于了解整个计算机软件的工作原理非常重要,Linux内核的很多机制都要依赖汇编指令,尤其ARM工作模式、寻址、异常,中断,异常向量表这些概念。
2. 系统移植:
uboot移植、rootfs制作、内核剪裁移植,usb、网卡驱动移植,uboot、linux启动流程,自己添加uboot命令。这一阶段的内容对于嵌入式工程师来说,在做实际项目的时候,会经常用到,各个厂家的移植步骤会有所差异,但原理基本相同,熟练掌握这些操作,非常必要。
3. Linux驱动:
字符设备架构、inode、cdev、file_operations、file之间关系;platform总线、设备树;同步互斥机制,自旋锁、信号量、互斥体,原子操作;中断、中断底半部;等待队列,poll的实现;常见设备的驱动的编写,key,led,gpio,adc、pwm、i2c、mpu6050;网络设备:网卡驱动分析、netfilter使用;usb架构。驱动的学习,主要在于多捋架构,多了解计算机的实现原理,每天抱着内核看。
终极
能学到这个份上,后面如何发展,已经不需要再多费唇舌了,可以继续学习安卓、QT,也可以深挖物联网、算法,或者钻研linux内核优化内核等,每个领域独当一面,收入都不会低。
嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
点击这里找小助理0元领取:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|微软交流社区

GMT+8, 2025-1-22 09:43 , Processed in 0.077435 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表