嵌入式驱动工程师,这样学!
扫描二维码
随时随地手机看文章
一、基础
1. linux基本操作:
需要掌握的知识如下:- 环境的搭建:ubuntu、vmware安装
- Linux目录结构;
- 文件类型;
- 基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,mv,mkdir等,最关键是gcc命令要会用;
- 一些简单的shell脚本;
- Makefile的编写。
2. c语言:
所谓编程不学C语言,便称码农也枉然。学Linux,不学编程,建议就不要学了,否则职业后期全是瓶颈。那些和你说学Linux不需要懂编程的都是再耍LM。学习C语言一定要学习Linux下C编程,C语言网上视频也很多,知识点不一一介绍了。但是有一点,就是一定要记住,一般的程序员从入门到绝对的精通大概需要2年时间,要想随心所欲写出超高质量的代码,时间因人而异,还要看个人造化。实际上并不需要每个人都成为大师,能成为一个快快乐乐的小码农,不也是见开心的事吗?3. 数据结构:
数据结构很重要,但是在这个上面花太多时间,也是没必要的。想进大厂的除外,自己拼命去刷题吧。对于嵌入式方向来说,个人建议只要掌握几个基本的排序和查找算法即可,没必要把所有算法都研究一遍。- 能掌握常见的算法比如:冒泡排序、直接插入排序、快速排序、二叉树等。
- 链表:双向链表,增删改查。
4. 基础阶段项目
基础阶段,个人强烈建议一定要做一个综合性项目,一定要从0开始写。建议项目《电话本管理软件》该项目包含的知识点、功能点:- 包含简单的菜单功能
- 链表:包括增、删、改、查、排序等操作的双向链表。
- 结构体、数组、指针、二级指针,字符串操作
- 排序
- 用户登录
- 用户电话号码信息的添加、删除、修改
二、进阶
进阶阶段知识点很重要,学完这个阶段的内容,我们就可以用各种库函数 系统调用来自己实现Linux命令:ls、cd、stat、pwd、ifconfig,甚至自己实现一些网络协议:tftp、ftp、http。即使以后不做linux c开发,有了这些基础,你再去学java、c 你的视野一定会不一样,Linux下系统编程是真正基于一个胸痛来编程的。为什么我们要学Linux,就是因为他的开放性,有无数的大牛在给Linux添砖加瓦,所有代码都可以看到,而我们根本不用担心版权问题!1. 文件IO
- 掌握Linux文件IO的一套系统调用API:open、read、write、lseek,close等。
- 熟练写出文件拷贝等功能模块。
- 理解I/O、缓冲的概念。
2. 进程线程
- 进程与线程的概念
- 掌握常用的函数fork、exec族函数等api;
- 进程创建、回收,一个.c源文件变成可执行程序的过程;
- 常用的进程相关命令:ps、top、crontab、at;
- 进程间通信:信号量、消息队列、共享内存、管道、信号;
- 守护进程;
- 线程创建、同步互斥,互斥锁;
- 库的概念,什么是动态库和静态库,如何自己制作动态库和静态库。
3. 网络编程
- TCP/IP协议分层以及每一层的功能;不要看OSI,只要知道即可;
- socket api的使用,
- tcp、udp;C/S架构如何创建;
- 套接字属性的设置;
- C/S架构;
- 多进程、多线程网络服务器模型;
- 任意一款抓包工具使用;
- 常见的网络协议分析:ping、 tftp、 ftp、http、telnet 等。
4. 进阶项目
该阶段可以选择综合项目《多线程聊天室》,实现公聊、私聊、注册登录,互相发送文件等功能。三、高阶
该阶段学习需要开发板配合,建议新手先把之前内容打扎实,再进入这个阶段学习。开发板的选择,最重要的是资料!资料!资料!资料!资料!资料!资料!资料!资料不全的板子不要买!1. ARM
- arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表,
- 伪指令、C语言和汇编代码的互相调用、内联汇编;
- 学会查看常见电路图,了解数据线、信号线、地址线、中断线,常见外设电路图
- 学会查看各种芯片的用户手册
- *常见的外设的裸机驱动开发,led、key、adc、pwm、rtc、看门狗、i2c、spi、网卡、flash、USB等
2. 系统移植
- uboot移植、uboot参数设置
- rootfs制作、内核剪裁移植,
- usb、网卡驱动移植,
- uboot、linux启动流程,
- 自己添加uboot命令
3. Linux驱动
- 字符设备架构、inode、cdev、file_operations、file之间关系;
- platform总线、设备树;
- 内存管理;
- 同步互斥机制,自旋锁、信号量、互斥体,原子操作;
- Linux进程管理
- 块设备
- 中断、中断底半部;
- 等待队列,poll的实现;
- 常见设备的驱动的编写和代码分析;
- 网络设备:网卡驱动分析、netfilter使用、网络协议栈架构;
- USB、TTY、SPI、IIC、PCIE等架构。
四、终极
我想如果能学到这个份上,后面如何发展,已经不需要一口君再多费唇舌了,可以继续学习安卓、QT,也可以深挖物联网、算法,AI、VR、大数据或者钻研Linux内核优化内核等,每个领域独当一面,收入都不会低。也衷心祝愿各位还能坚持到这个阶段的,头发依然保持茂密!最后给大家一个建议,学习编程没有任何捷径可以走,需要花费几年的时间才能有所成,所以我们要提早做好规划,找好大方向,制定好短期、长期的计划,然后按照计划,一点点的实施。END
来源:一口Linux,作者:土豆居士版权归原作者所有,如有侵权,请联系删除。
▍