linux初识centos (linux系统详细教程)

今天越来越多的嵌入式工程师岗位要求掌握Linux系统,于是我就从网上搜索了一下Linux的介绍,并进行了整理,供大家参考。

一、Linux与Windows比较

目前运行在 PC机上的操作系统主要有Microsoft的 MS-DOS、 Windows、 Windows NT、 IBM的 OS/2等。早期的 PC机用户普遍使用 MS-DOS,因为这种操作系统对机器的硬件配置要求不高,而随着计算机硬件技术的飞速发展,硬件设备价格越来越低,人们可以相对容易地提高计算机的硬件配置,于是开始使用Windows、Windows NT等具有图形界面的操作系统。 Linux是新近被人们所关注的 操作系统,它正在逐渐为 PC机的用户所接受。都是全球最受欢迎的OS操作系统。那么两者有什么区别呢?

1.1 Linux系统简介

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和78位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux是一种开源电脑操作系统内核,用C语言写成。总的来说,Linux指的是Linux发行版本,Linux发行版本很多,常见的有CentOS(红帽系列)、ubuntu等。Linux以高安全、高稳定著称。

1.2 Linux与Windows的比较

(1) Linux的性能是非常出色的,可以完全针对机器的配置有针对性的优化,而且Linux对于x86_64的支持领先Windows 不是一点半点。在相同平台上,优化过的Linux在性能方面确实远远超过Windows,所以国内的大部分企业服务器,使用的都是Linux平台。由于其优于windows的性能,让其成为市场的宠儿。

(2)软件与支持。

Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务;

Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的 Linux 开发者和自由软件社区提供支持。

(3)安全性

Windows 平台:三天两头打补丁安装系统安全更新,还是会中病毒木马;

Linux 平台:要说 Linux 没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比 Windows 平台要更加安全,使用 Linux 你也不用装某杀毒,某毒霸。

(4)使用习惯

Windows:普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上手容易入门简单;

Linux:兼具图形界面操作(需要使用带有桌面环境的发行版)和完全的命令行操作,可以只用键盘完成一切操作,新手入门较困难,需要一些学习和指导(这正是我们要做的事情),一旦熟练之后效率极高。

(5)可定制性

·Windows:这些年之前算是全封闭的,系统可定制性很差;

·Linux:你想怎么做就怎么做,Windows 能做到得它都能,Windows 做不到的,它也能。

(6)应用范畴

或许你之前不知道 Linux ,要知道,你之前在 Windows 使用百度,谷歌,上淘宝,聊 QQ 时,支撑这些软件和服务的,是后台成千上万的 Linux 服务器主机,它们时时刻刻都在进行着忙碌的数据处理和运算,可以说世界上大部分软件和服务都是运行在 Linux 之上的。

(7)开源

开源就是指对外部开放软件源代码。

1.3 为什么大部分开发者喜欢用Linux而不喜欢Windows下进行开发?

第一:闭源与开源

Windows下面的程序基本都是封闭源代码的,特别是10年前,在Windows下可以说找不到可用的开源的软件,现在的情况比以前好多了, 很多Linux下面开源的程序被移植到Windows下面来,但是Linux下面开源的程序增加的更多了。

在Windows下面开发, 因为开发者相对较少,并且开源项目少,不太容易找到可以参考的类似你要完成功能的开源项目。一切都得靠自己。但是在Linux下面就不一样了, 当你要开发一个新项目时, 可以想想有没有什么开源项目也完成了类似的功能, 可以*载下**到源代码来做一个参考, 对其中的算法, 架构设计等做一个详细的了解,然后自己开发的时候就会比较得心应手了,可以避免别人犯过的错误,少走很多弯路。

Linux有很多发行版(如Debian、Redhat等),而每一个发行版团队都会对Linux进行维护和软件的更新,更衍生了多个Linux发行版派系。由于Windows是闭源的,并且仅由微软公司所支持和维护,因此在个性化方面稍微欠缺。不单是开源系统,在人工智能和机器学习领域的众多开源软件,也都面向Linux开放,例如Caffe--深度学习框架; H20--分布式机器学习框架;MLlib--机器学习库;OpenNN--开放神经网络库等等,开源已然成为未来技术发展方向了。

第二:要学习的知识量不一样

学习window下的开发, 你需要学习很多的Windows API。最新查询到的截止到2009年9月,Windows总API数量为2258个, 并且Windows API 的参数多, 参数类型复杂,要记住这么多东西不是一件容易的事情。

Linux下的内核API, 总共算下来也才335个,而且这些内核的API只有编写驱动的时候才能用到, 开发应用程序基本用不到内核的API,开发应用程序的API基本都是C的API,而 Linux所有的C的API个数是279个, 也就是说你只需要掌握不到300个的API, 就可以顺利的在Linux下面开发应用程序了,

Linux下的内核API, 全部算下来也才335,但是这些内核的API只有编写驱动的时候才能用到, 开发应用程序基本用不到内核的API,开发应用程序的API基本都是C的API,而 Linux所有的C的API个数是279个, 也就是说你只需要掌握不到300个的API, 就可以顺利的在Linux下面开发应用程序了,

1.4 BS时代与CS时代对Linux使用的影响

1.CS = Client - Server = 客户端-服务器。例子: QQ,迅雷,快播,暴风影音,各种网络游戏等等。只要有和服务器通讯的都算。

2.BS = Browser - Server = 浏览器-服务器。例子:所有的网站都是BS。

1、客户端要求

C/S客户端的计算机电脑配置要求较高。

B/S客户端的计算机电脑配置要求较低。

2、软件安装

C/S每一个客户端都必须安装和配置专用的软件。

B/S最大的优点就是不用安装任何专门的软件,只要有一个浏览器就可以。

3、软件升级和维护

C/S每一个客户端都要进行升级和维护。

B/S客户端不必安装及维护。

B/S架构更多的时候是使用了HTTP协议、而C/S架构更多的时候使用的WinSocket协议(TCP、UDP)。

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,更适于BS架构编程。

二、Linux与单片机

由于Linux对硬件要求低,越来越多的嵌入式芯片自带Linux系统,普通的单片机不带操作系统,那么带操作系统和不带操作系统的单片机有什么区别呢?

一个AT89S51单片机4元钱一个,它的架构是8051架构,SST89E564RD也是8051架构的单片机,它的单价为35元钱。ARM9架构的单片机,如HI3510需要80元钱。51单片机通常被用来做一些比较简单的控制,比如采集信号、驱动一些开关。AT89S51的Flash只有4K,一个稍微复杂的程序就不止4K了。SST89E564RD是一种扩展的51单片机,它的Flash达到64KB,可以外接最多64KB的SRAM。在SST89E564RD上的程序可以写得更复杂一些,但是它对外的接口也比较少。STM32F103单片机采用CORTEX-M3架构,单价21元钱一个。CORTEX-M3系列的处理器,对外接口极其丰富,这使得它的应用面更广,但是限于它的Flash、内存还是比较小,一般不在上面运行操作系统,它算是一个性能非常突出的单片机。HI3510是海思半导体公司的一款用于监控设备的芯片,一般上面运行Linux系统,通过摄像头采集数据、编码,然后通过网络传输。另一端接收到数据之后,再解码。在上面运行的程序非常复杂,有漂亮的图片界面、触摸屏控制、数据库等等。对声音图像的编解码更是用到DSP核。S3C2440是一款通用的芯片,它采用ARM9架构,它与"高级单片机"STM32F103相比,多了存储控制器和NAND控制器──这使得可以外接更大的Flash、更大的内存;多了内存管理单元(MMU)──这使得它可以进行地址映身(虚拟地址、物理地址之间的映射)。可以在S3C2440上运行Linux系统,运行更大更复杂的程序。

基于不同的应用,处理器和其他外设的选择是要统一考虑的,如果要实现一个简单的U盘读写功能,那么可以选择带USB控制器的CORTEX-M3芯片,也可以选择8051外接一个USB控制器比如SL811,就看哪种方案成本更低。进行芯片选型时,必须基于整个系统来考虑。

用通俗的话来说,一个处理芯片不运行操作系统,我们就把它称为单片机,而单片机编程就是写裸板程序,这个程序直接在板子上运行;相对的,另一种程序就是基于操作系统的程序,说得简单点就是,这种程序可以通过统一的接口调用"别人写好的代码",在"别人的基础上"更快更方便地实现自己的功能。

基于操作系统的软件资源非常丰富,你要写一个Linux设备驱动时,首先在网上找找,如果有直接拿来用;其次是找到类似的,在它的基础上进行修改;如果实在没有,就要研究设备手册,从零写起。而不带操作系统的驱动开发,一开始就要深入了解设备手册,从零开始为它构造运行环境,实现各种函数以供应用程序使用。

举个例子,要驱动一块LCD,在单片机上的做法是:

① 首先要了解LCD的规格,弄清楚怎么设置各个寄存器,比如设置LCD的时钟、分辨率、象素;

② 划出一块内存给LCD使用;

③ 编写一个函数,实现在指定坐标描点。比如根据x、y坐标在这块内存里找到这个象素对应的小区域,填入数据。

基于操作系统时,我们首先是找到类似的驱动,弄清楚驱动结构,找到要修改的地方进行修改。这并不表示代码Linux的驱动程序就比单片机的驱动程序好写,怎么在几万个文件中找到要修改的代码,这也是需要艰苦的学习的。基于操作系统的驱动开发,既要懂得芯片的具体操作,也要理解操作系统的软件结构。

在开发应用程序时,带操作系统和不带操作系统的单片机有很大区别,主要是:

(1)不带操作系统的应用程序,可借用的软件资源很少;带操作系统的应用程序,网上各种开源的软件很多。比如要做一个*放播**器,在不带操作系统上实现会非常困难;如果是在Linux下,有现成的。

(2) 不带操作系统的应用程序,各个任务是串行执行的;带操作系统的应用程序,各个任务是并行执行的。

(3) 不带操作系统的应用程序,一旦发生程序错误,整个系统将崩溃,带操作系统的应用程序,即使发生了程序错误,操作系统本身并不会崩溃。

网上搜到1篇文章,文章介绍了Linux和单片机工作的一些区别,可能更实际一些,便于大家理解。

1、嵌入式(ARM+Linux):可对接工业机器人、物联网、高端3C产品设计,但要去补课,主要是补充信号处理方面的知识,可不追求精深,但要了解。工资水平根据选择企业和行业特点决定,相比3、4要好点。

2、嵌入式(FPGA、CPLD等集成电路设计):这条路基本上是走信号处理的道路,对数学、信号、模电理论等有很深的功底要求,一般能顺利工作的起点多为硕士,但若有兴趣喜欢做,本科能做好的也有。理论上,薪水是第一位,但工作难度也是第一位。

3、单片机:相关产品举例——电饭锅、豆浆机、智能化程度不高的家用电器之类的,同质化严重,能干的人也不少,竞争相对激烈,产品利润低,导致薪水以及未来薪水涨幅都不是太好。但比PLC强一点。这里的岗位主要是单片机裸机和RTOS(实时操作系统)设计。

4、PLC:悲催的PLC,最不推荐做的一个方向。搞PLC的一般都在各地的中小自动化公司或大公司的设备部,加班是常事,薪水不会太高,因为中专水平开始就可以抢你饭碗,技术附加值现在很低,跳槽也没啥好发展。

单片机开发相对于Linux嵌入式最大的劣势在于基层的打工岗位平均薪资偏低。单片机虽然待遇较低,但是就业机会更多,对大龄求职者相对友好。这点其实并不矛盾,做单片机各行各业的小公司特别多 (当然像格力,美的这种传统家电大厂也有,但是华为、商汤等新兴高科技大厂很少招单片机),业务多种多样,需要的人更多,但是一般小厂可能资金并不充裕,给不起人才高价,加上单片机开发门槛较低(不考虑产品稳定性,EMC等有工作经验自然会知道的概念,仅指学习使用单片机干活编程的培养门槛), 培养周期比较短(大二学生一个暑假的功夫),所以导致中低端能干活的人还是挺多,拉低平均薪资。但这就像富士康一样,招人多,但抱怨缺人,老板就是不想把待遇提上去,要控制成本,这是缺人但是待遇低之间一种永远存在的矛盾。但是对大龄求职者来说,由于单片机岗位实在是多,很多小厂真的很难以高的性价比招到优秀的人,在小厂也没有HR插手做人力资源规划,年龄梯队建设,反而在年龄上卡的不严,大龄求职者只要薪资不挑,也能找到一份工作,所以相对于做Linux的大厂,对年龄问题比较宽容一些。

三、 参考文献

1、CSDN博主「Barcelonagod」的原创文章;原文链接找不到了,见谅

2、CSDN博主「莫丶冉」的原创文章,原文链接https://blog.csdn.net/qq_42350107/article/details/82115632

3、

4、CSDN博主「chao199512」的原创文章,原文链接:

5、CSDN博主「chao199512」的原创文章,原文链接:https://blog.csdn.net/chao199512/article/details/79873866Linux与Windows