Linux入门-程序开发
Linux程序开发
linux程序总体上来说是分两部分的:
1. 底层驱动程序开发;
2.应用层应用程序开发;
驱动程序
一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识,至少需要看懂硬件原理图和芯片手册。硬件原理图告诉我们底层接口工作的逻辑,以及芯片工作的条件(电压、电流、时钟脉冲等);芯片手册是告诉我们如何去配置使用芯片,比较关键的是看懂寄存器配置,对于芯片的配置,就是去配置其各个寄存器,比如去配置一个AD音视频采集的芯片:就需要去配置音频采样率、采样点数、采样位数等等,视频需要也有相应的参数如码率、帧率、亮度、锐度、数据编码格式(BT656、BT1120等)等等,而这些参数,是与其寄存器一一对应的,就是找到其对应的寄存器,给寄存器写入需要的数值,即可配置为对应的模式。除此之外,还需要了解内核,比如内核的驱动框架,内核提供给驱动调用的接口,内核调度驱动的机制等等。驱动程序对开发人员要求通常比应用开发人员要高一些,需要掌握的知识多一些,所以通常待遇也会比应用开发人员要高一些。但是,驱动程序开发的需求量没有应用程序多,因为驱动一般完成后, 就不需要改动,而且一般驱动开发,都是在芯片厂商那里需要,做具体应用的公司一般驱动人员很少的。
应用程序
应用程序基本上就是通过常见的编程语言去开发具体业务的程序,这个编程语言就不再局限于C语言了,可以是C、C++、java、Python、lua、shell、还有web的前后端开发等。
应用层,顾名思义,就是应用,不同的行业有不同的业务,也就是不同的应用。比如:智能公交行业,需要做的是GPS定位,位置上报、根据位置自动报站并且平台端需要做基于GPS的位置信息来实现智能化调度车辆等。所以说,应用程序开发人员的需求量要远远大于驱动开发人员。做应用开发还有一个好处,就是可以熟悉行业的业务知识,这可能有利于你的职业发展,可以不把眼光局限在技术里面,而是通过技术去实现业务功能,也就是实现客户的需求,可以逐渐养成以市场为导向的思维,而不是只盯着技术,毕竟技术只是手段,是工具,最终我们是要解决客户或者市场的问题的。
做应用程序开发,入门的门槛就比较低了,刚毕业就可以做开发。但是好的应用开发工程师还是有很大区别的,这些区别在哪里那?我感觉主要体现在以下几个方面:
1. 对需求的分析
2. 应用程序的架构设计
3. 整体系统设计
需求分析
对于业务需求的分析,不同的人理解的程度不一样,新手往往会低估技术难度与工作量。
应用程序架构设计
一般情况下,不同行业或者的公司,都有自己的一套应用框架,一般都是基于业务逻辑的应用程序框架,这个也不是一下子设计出来的,而是根据公司的业务逐步完善,最终进化而来的。
整体系统设计
这一项可能只在是嵌入式系统中存在;这里说的系统就是指的整个设备的软件系统,包括uboot、内核、文件系统以及flash的分区设计;这里面有好多技巧,比如比较重要的一项:升级功能。
嵌入式系统,升级是要放在最前面考虑的事情,设备前期升级的频率可能会比较高的,一方面是由于刚上线软件存在bug,另一方面是需求的增加。如果系统前期设计不够合理,后期升级系统或者应用程序可能就会很麻烦,所以设备上线之前,升级要做的非常稳定,最好做到支持远程升级;另外在flash的分区设计上,最好做一个备份系统分区,这个就是万一主系统异常无法启动,可以选择通过备份系统启动,从而再对主系统进行更新修复。具体细节不再这里详细说了,以后专门介绍。
结束语
对于Linux应用程序开发,入门很简单,嵌入式linux应用,与linux的应用基本上没有太大差别,如果熟悉了C/C++语言,那么很容易上手,经历过几个完整项目,填过一些坑,才算是入行。
Linux入门-程序开发的更多相关文章
- linux应用程序开发-文件编程-系统调用方式
在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...
- 嵌入式Linux应用程序开发详解------(创建守护进程)
嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- Java入门程序开发
Java入门程序开发 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Java程序开发流程 Java程序开发流程如下: >.将Java代码编写到扩展名为".jav ...
- Vs2012于Linux应用程序开发(2):图案
1.1 代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的 ...
- linux后台程序开发常用工具
linux开发工具: 1.编辑工具:1)sourceInsight2)Notepad++3)UltraEdit4)Altova XMLSpy 2.linux服务器访问工具:1)FileZilla2)X ...
- 《嵌入式linux应用程序开发标准教程》笔记——8.进程间通信
, 8.1 概述 linux里使用较多的进程间通信方式: 管道,pipe和fifo,管道pipe没有实体文件,只能用于具有亲缘关系的进程间通信:有名管道 named pipe,也叫fifo,还允许无亲 ...
- 《嵌入式linux应用程序开发标准教程》笔记——9.多线程编程
线程是轻量级进程,创建线程的开销要比进程小得多,在大型程序中应用广泛. 9.1 线程概述 进程包含自己的代码.数据.堆栈.资源等等,创建和切换的开销比较大: 线程是轻量级的进程,调度的最小单元,同一个 ...
- 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发
进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...
随机推荐
- 爬虫python3:TypeError: cannot use a string pattern on a bytes-like object
import re from common_p3 import download def crawl_sitemap(url): sitemap = download(url) links = re. ...
- flask 源码专题(七):threading.local和高级
1.python之threading.local 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1 val.num,找到此线程自己的内存地址去取自己存储 num ...
- python 并发专题(一):并发基础相关概念,术语等
一.线程 1.概念 线程是程序执行流的最小执行单位,是行程中的实际运作单位. 进程是一个动态的过程,是一个活动的实体.简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执 ...
- redis(十九):Redis 架构模式,特点
单机版 特点:简单 问题: 1.内存容量有限 2.处理能力有限 3.无法高可用. 主从复制 Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的 ...
- git只操作某个文件夹
在我们的工作中,可能会有这样的情况发生:我只想提交某一个文件夹,而另外的文件夹我并不想提交. 遇到上述情况,我们再git中这样解决: 1.查看某个文件夹的状态(这里我用log文件夹做实验). 我们可以 ...
- 老司机带你玩转面试(4):Redis 高可用之哨兵模式
前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...
- SQLite数据库多平台应用及常见错误分析
SQLite是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的SQL数据库引擎.SQLite是世界上最广泛部署的数据库引擎之一.SQLite源代码开放,没有授权限制.正是因为其免费.轻巧. ...
- 字符编码笔记:ASCII,Unicode 和 UTF-8个人理解
一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位(字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作 ...
- Spring Security系列之极速入门与实践教程
@ 目录 1. Spring Security 2. 实验环境准备 3. 日志级别修改 4. 配置用户名/密码 5. 数据库方式校验 6. 不拦截静态资源 7. 自定义登录页面 8. Remember ...
- 7个获取访问者真实IP的方法,速学!!!
通常情况下,网站访问并不是简单地从用户的浏览器直达服务器,中间可能部署有CDN.WAF.高防.例如,采用这样的架构:“用户 > CDN/WAF/高防 > 源站服务器” .那么,在经过多层代 ...