【学Linux必读】Linux编程学习方法

linux 编程怎么入门

最好的 linux 学习突破口是 linux 系统编程,没有之一!

有人说是裸机,看看招聘信息就知道,没有任何招聘信息在任何一点提到裸机程序。

那么裸机程序是给那些用户使用的?裸机程序不是给学习单片机或者 stm32 程序员准备的,是给只有上位机变成经验的纯软件工程师准备的。

大家可以看一下网上的招聘信息,部分会要求对硬件有一定的了解,例如 gpio,i2c,uart,485 等,这些需要程序员用到示波器,万用表之类的工具,需要用到一些最简单的硬件应用的知识。对于专业是软件工程的程序员,一直从事软件开发,那么会有一点点对硬件理解上的帮助。

假如你的专业是自动化,计算机,电子,电气工程,通信工程,物理专业等等,学习这东西完全是在浪费时间,学习过大学物理,模电,数电等相关课程,完全没必要去使用裸机,单片机编程就是裸机编程。特别强调的一点,学习过单片机的用户,假如到了操作系统,还在想着利用裸机入门是永远学不会 linux 编程的!

少数的单片机老师,在给大家介绍单片机学习的时候,会传递类似这样的信息“学习了单片机,带操作系统的编程也是一样的”等等。

其实完全不一样!带有任何一个操作系统之后,操作系统本身会带很多功能,提供了很多接口。在初期,学习的重点就是学习使用这些自带的功能,熟悉这些接口。

还有一点给大家说明一下,linux 程序员什么时候会接触到最底层。

例如 linux 的网络编程,最底层的网络部分已经有全世界最优秀的程序员完成,花费了几十年时间,而且目前仍然在维护升级中,这个是世界性的任务,作为初学者,在很长时间的一段时间内都是直接拿来使用。

那么学习到了什么程度会做这些开发呢?如果大家英文不错,可以看一下国外做 linux 最底层开发的招聘要求,一般是 8 年或者 10 年以上的经验,这个几乎是硬性规定。

所以大家老老实实的一步一步的来,不要想太多没用的东西。

 

什么是 Linux 系统编程

任何一个操作系统编程都需要对系统本身有一定的了解。

前面最基础的实验中,介绍了搭建 linux 环境,linux 命令行,gcc 编译,各种开发工具等等,都是必须掌握和熟悉使用的。

它们都是工具,俗话说“磨刀不误砍柴工”,跟着手册走通一遍,以后新的环境就没有什么问题了。

Linux 系统编程,最主要的是介绍 linux 的一些编程思想以及 linux 中相关的 API 用法。

Linux 最核心的思想是“一切皆文件”!包括:

在其它操作系统中就是以文件形式出现的例如文本,音频,视频等等;

Linux 下的目录,是以文件形式出现的;

linux 驱动的接口等等。

Linux 中 API 包括:

各种文件的操作等等

进程的 API(作为操作系统,学习多任务是必须的)

Linux 的内部通信,进程间通信等

网络通信(常规的 socket,udp,tcp 等等)

Linux 的时间(linux 有一套自己的时间接口)

另外如果对 C 不是很熟悉,还需要学习 C 自带的一些函数,在做技术支持的过程中,发现这个问题很严重,一些例程中直接调用的一些 C 库函数,经常有用户来问。

还有结构体知识,数据结构非常重要,如果对 C 中的数据结构不是很熟悉,也是需要夯实C 的基础。

 

关于 linux 驱动

关于 linux 驱动,这里先简单介绍一下。

学习 linux 最好的方式就是阅读源码,这句话本身没有错。但是对于新手就是容易产生一个误导,很多新手会以为是从 linux 启动的程序开始阅读,这样理解就大错特错了! 大家可以这样理解,Linux 本身可以类比为地球,一直转着,你不要管是谁推动了第一下,你要做的就是在上面盖房子,linux 驱动相当于房子的地基!阅读 linux 源码,其实是去看地基。 “地基”分为三大类,字符设备,块设备,网络设备。块设备和网络设备是属于摩天高楼,有固定的人去做,大部分程序员不需要去写,大部分字符设备必须自己会修改会写。

大家可以看一下 linux 驱动工程师的招聘要求,要求高一点,肯定会要求 BSP 开发,也就是板级开发,这个过程就是说的 linux 移植。板级开发需要对英文熟练,掌握 gcc 的编译,调试修改 BUG 等,主要内容是将系统在板子上跑起来,调试通网络和摄像头等等驱动,这个过程一般是需要两年或者三年以上经验,而且也不需要自己去写块设备和网络设备,只是去移植。

迅为另外的一本 Linux 驱动实验手册会详细介绍字符设备的开发,以及网络设备开发的关键点。作为初学者,不要着急去弄驱动,这都是有一个过程,基础不牢固,基本的概念没弄明白,直接学习驱动会事倍功半,反而得不偿失。

 

学习 linux 的时间

前面介绍过,linux 程序员有不同的要求,不可能一口吃个胖子。

单片机只需要 15 天,甚至更短的时间,就可以找到相关的工作。作者当年毕业后,就是学习了一个星期,然后就找工作,面试,通过,接着从事了一段时间的嵌入式单片机开发。

无论是什么样 linux 编程相关的工作岗位,都是可以终身从事的职业。做应用,做驱动,做可视化开发等,都需要长期终身的学习。

假如从来没有接触过操作系统编程的知识,平均每天两小时,坚持一年时间,就基本可以从单片机编程到 linux 编程了;如果接触过其它操作系统编程,那就会非常快,三个月左右就可以了。如果有了操作系统编程的基础之后,加上基础比较好(主要是阅读英文文档的能力和编程能力),转到 linux 驱动开发会非常快。 如果要做到熟练 BSP 开发,培养周期一般就是三年左右了。以迅为电子的工程师为例,板级开发的工程师,从事程序员工作都是 5-15 年左右。 如果更高级的底层开发,前面介绍过最基本要求是 8 年以上 linux 编程经验,而且要求英文口语过关,交流没障碍。

 

 

转自迅为:http://www.topeetboard.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值