详解嵌入式Linux工程师的成长经历
2018-03-23 00:00
316 查看
从事嵌入式研发行业十年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到一些问题,这种发现问题并解决问题的过程就是进步。下面是嵌入式Linux开发工程师的成长过程,希望对大家能有所启发。
Linux开发工程师01
首先成长为一名Linux开发工程师,这是最基本的目标,他应该具备如下的素质:
(1)了解Linux基本概念和基本操作(历史,文化,起源)(命令行,配置,操作,开发模式)(2)会使用Linux平台下的编辑器vi(默认安装,占内存小,方便向嵌入式移植)(3)会使用Linux平台下的编译器GCC(相应的十几个命令行参数)(4)会使用Linux平台下的管理工具Make(与Makefile相配合,尤其用于大项目中多平台移植的情况下)(5)会使用Linux平台下的调试器GDB(可以了解底层硬件,及汇编指令)
嵌入式工程师02
他更关心的是将来在哪一目标机上运行,不关心操作系统,进行的更多与编程相关的工作:
(1)合格的C程序的程序员(理解基本的控制结构:循环、分支、数组、指针)(2)基本的编程思想(编程实践中总结算法)(3)程序的编译和链接(4)可执行文件内部(段、起始地址、如何加载执行)(5)目标机处理器体系结构(6)知道处理器的外设即System on Chip(内部存储结构及外设驱动)(7)汇编语言及指令(主要是用在加载过程中)
系统工程师04
系统工程师夹在驱动工程师及应用工程师这两个层次之间,他要对系统有一个整体的概念,系统主要是指操作系统,往往理论有余而实践不足:
(1)进程管理与调度(知道进程间的切换与调度,多任务)(2)内存管理(建立MMU页表,知道从虚地址到物理地址的映射)(3)驱动管理(管理设备,编写设备驱动,加载设备驱动)(4)文件系统(制作文件系统,文件系统的读写,甚至驱动有时也被当成文件系统来管理)(5)网络协议知识(协议实现作为上层应用与底层驱动之间的衔接)(6)图形系统知识(支持多窗口及管理窗口,包括窗口切换,窗口移动和覆盖)
嵌入式Linux系统工程师05
(1)嵌入式Linux基本概念(2)交叉编译(3)Linux内核开发和调试工具(4)启动代码移植(修改Uboot,Vivi等)(5)内核交叉编译(Linux不支持芯片时要芯片级的移植,支持芯片时要板级的移植)(6)根文件系统制作(7)设备驱动程序开发
下面针对一个简单的"hello world"程序来区分一下以上所讲的工程师之间的区别:
#include<stdio.h>
int main(void)
{
printf("hello world!\n");
}
初级程序员看到的是:
a、头文件
b、主函数main
c、子函数printf
d、函数调用
e、入口参数
f、参数返回
高级程序员看到的是:
a、头文件---预处理过程
b、主函数main---程序入口
c、子函数printf---标准库函数
d、函数调用---跳转指令
e、入口参数---栈空间的参数传递
f、函数返回---返回指令
嵌入式程序员看到的是:
a、头文件---预处理过程---宏展开/条件编译
b、主函数main---程序入口---启动代码
c、子函数printf---标准库函数---链接过程
d、函数调用---跳转指令---PC寄存器
e、入口参数---栈空间的参数传递---寻址方式
f、函数返回---返回指令---LR寄存器
嵌入式程序员还能看到的是:
可执行文件的内部组织结构
代码段
指令格式和类型
地址无关代码
数据段
RWdata读写数据段
ROdata只读数据段
BSS未初始化数据段
系统工程师看到的是:
子函数printf---标准库函数---链接过程
动态链接(Dynamic Linking)(需要系统的支持)
静态链接(Static Linking)(嵌入式系统常采用静态链接,以适应不同系统)
标准C库
系统调用(System Call)
软件中断(Software Interrupt)
Linux系统工程师看到的是:
可执行文件的加载过程(不用了解系统调用这一级)
Shell进程--fork系统调用---exec系统调用
进程状态(就绪、运行、阻塞)
进程调度和调度算法
进程的上下文切换
嵌入式Linux系统工程师看到的是:
用户空间和系统空间(分别运行用户模式和管理模式)
ARM---用户模式和管理模式(执行权限不同)
SWI---软中断指令(系统调用就是由用户空间向系统空间切换)
MMU---虚地址和实地址(不同进程如何实现自己独立的地址空间)
BUS---地址总线、数据总线和控制总线(程序如何获得数据,系统如何取指)
SOC---片上系统(整个嵌入式系统如何运行)
1.图文并茂,了解ARM体系结构与编程模型2.所有操作系统的内核几乎都是用C语言写的,原因何在?3.IC行业薪资排序:软件架构师、算法工程师、FPGA工程师、嵌入式开发。。。4.招不到电子工程师,这锅谁来背?5.三年数电五年模电,硬件工程师到底该如何发展?6.人工智能与人类智慧的较量
免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。
相关文章推荐
- 2016.3 嵌入式linux求职经历记录
- 嵌入式成长轨迹26 【Linux应用编程强化】【中嵌第二阶段】【Linux网络应用】
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】中断服务下半部之tasklet详解
- 详解Linux运维工程师高级篇(大数据安全方向) 推荐
- 详解linux运维工程师入门级必备技能
- 嵌入式成长轨迹15 【嵌入式环境及基础】【中嵌第一阶段(Linux系统基础)】【设备管理】
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- 嵌入式成长轨迹20 【Linux应用编程强化】【Linux下的C编程 下】【进程间通信】
- 嵌入式Linux之我行--内核I2C子系统详解
- 嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解(四)
- 嵌入式成长轨迹32【嵌入式学习阶段】【ARM环境调试】【Linux Ubuntu其它环境调试】
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路 – 运维派
- 嵌入式成长轨迹27 【Linux应用编程强化】【中嵌第二阶段】【进程管理】
- 嵌入式 Linux上的free命令详解
- 嵌入式成长轨迹4【嵌入式环境及基础】【嵌入式Linux软件开发入门】【Shell简介】
- 简单明了!嵌入式Linux启动过程详解
- 嵌入式 Linux中lspci详解
- 详解Linux运维工程师打怪升级篇
- 嵌入式 linux下cdev详解
- 嵌入式Linux应用程序开发详解