您的位置首页>企业动态>

我们能从Linux系统上学到什么?谈谈linux的四个维度

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解我们能从Linux系统上学到什么?谈谈linux的四个维度问题。关键词:Linux系统和驱动

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解我们能从Linux系统上学到什么?谈谈linux的四个维度问题。

关键词:

Linux系统和驱动程序开发

Linux系统是软件发展史上的一个传奇。来自世界各地的个人、公司和团体成功地以一种松散但有效的方式创造了一个伟大的生态系统,以满足开放和自由的要求。就软件规模和稳定性而言,Linux首屈一指。当然,这里的linux更多的是一个生态,包括内核、驱动、库文件、gui、数据库和上层应用软件。linux产生的基因决定了它的应用只能局限在很小的范围内。当然,你可以说不服气有安卓,但我们要清楚,安卓其实是一个建立在linux上的虚拟机,严格来说和linux关系不大。没有谷歌的推动和移动终端联盟的支持,Linux系统本身只能在特定领域发挥特殊作用,而不是像windows一样成为每个人每天都要面对的系统软件。

当然,话虽如此,我们真正关心的是我们能从这个生态系统中获得什么。说白了,我们可以从linux系统中学到一些东西,它对我们个人的成长和发展有什么积极的因素。个人觉得可以通过以下四个维度和自己的兴趣来选择判断。

(1)精通学习linux、配置linux和使用Linux

2011年,有一本书非常受欢迎,长期排在畅销榜上。这本书是《鸟哥的linux私房菜》。这本书以centos为例,讲了很多内容,比如系统安装、常用配置、软件更新、特殊命令的使用、服务器配置等等。整本书的内容很厚,内容是一版又一版,可见大家对linux基础知识的渴望。另一方面,随着电子商务和视频网站的快速发展,一个叫做运维工程师的职业变得流行起来。由于行业的特殊性,一些互联网公司需要数百台服务器统一为客户服务,那么如何搭建网站、配置服务器平衡负载、进行远程控制、正确配置数据库、统一管理服务器集群,都是运维工程师需要关注的事情。从这个意义上来说,运维工程师的重要性是可以大体看到的。

(2)利用linux开发应用层软件

一般来说,用linux开发应用层软件和在windows上开发应用软件没有区别。也许,mfc、gdi、win32接口在windows上应用比较广泛,而在嵌入式系统上使用的接口则相当多样化。什么qt,minigui和gtk可以用来开发。当然上面提到的程序都是接口程序,很多公司的linux程序都没有接口,比如游戏公司的linux工程师。相比之下,他们更注重linux的稳定性,所以更多的服务器端程序是在linux上开发的。很多人有一个误区,认为操作系统一定要比应用软件高,其实不然。在我看来,office、webkit、samba、mplayer的代码都在百万行以上,结构相当复杂。说到应用开发,网上有几本书,分别是《linux程序设计》、《unix环境高级编程》、《unix网络编程》,对我们有很大的借鉴意义。确实有些书是基于unix系统的,但是基本的编程接口都差不多,对应的代码可以在linux上运行没有任何问题。

(3)使用linux开发驱动程序。

与其他os系统开发驱动程序一样,linux驱动程序开发也有自己的整个过程。为了真正驱动好,一般来说,你需要知道芯片的寄存器特性、电气原理图和总线标准。当然,你熟悉的信号测试、定时器、互斥工具、回调机制、位操作、中断机制、芯片设置、信号时序和地址分配,这些也是不可或缺的。更极端的是,如果自己创业的公司比较小,有时候驱动开发工程师需要自己测试信号、调试开机、焊接芯片,这些都是可以的。所以对于真正的芯片企业来说,无论是美资、日资还是台资企业,驱动开发工程师的收入都是非常可观的。尤其是现在,在安卓的帮助下,驾驶开发工程师的工资更高了。想在软件上有所突破的硬件工程师,或者想对系统本身有更多了解的软件工程师,都可以把这个作为自己长期发展的方向。这个题材的书很多,《linux driver development》无疑是最受欢迎的一本,但我想说的是,国内有一个朋友写的书挺好的,那就是宋宝华的《Linux设备驱动开发详解》,质量也挺好的。朋友有时间可以关注一下。

Linux驱动其实并不复杂。我们需要做的就是在统一的linux驱动框架下实现外设的统一管理。许多代码架构是现成的,所以我们只需要模仿、学习、测试和验证。更简单的代码是下面的段落,

加载模块为insmod hello.ko输入,卸载模块为rmmodhello.ko,在这个过程中,我们都可以看到相应的打印内容。当然,朋友们总是可以给它添加代码,一步一步调试,一步一步学习。只要坚持和总结,就能学好linux驱动代码。

顺便说一下,在这里写Makefile,

(4)linux内核代码的移植、修改和维护

linux内核代码被很多人认为是经典,但是linux内核代码非常长而且很难。一方面,linux代码有技能代码和汇编代码,而有些函数冗长,文件冗长,命名不规范。另一方面,linux代码分布合理,系统流程明显,相关资料也很多。关键是我们如何学习linux内核?你是在看书还是在读代码?你想读每一行还是跟着模块走?是要掌握主要原理,还是要看实现技巧?是先看高版本还是先熟悉低版本?接下来,我想谈谈我对自己经历的看法。

a)

熟悉的代码认真看,不熟悉的代码了解一下接口就可以,对于内存管理只要了解__get_free_page、kmalloc、vmalloc这几个函数就可以了;b)代码不要贪多求快,多思考多实践;c)忽视技巧,看中代码的处理流程和策略的权衡,多多思考为什么要这么设计;d)利用module特性查看代码的执行日志,代替函数堆栈的功能;e)了解linux性能的改进方法,了解为什么有软中断、rcu、slab和各种各样的延时函数;f)自己编写os,实现内存管理、信号量、消息队列、驱动开发、中断和线程调度,深入理解os的流程。以下课程可免费试听C语言、电子、PCB、STM32、Linux、FPGA、Python、安卓等。想学习的你和我联系预约就可以免费听课了宋工QQ3524659088 Tel/V17317951908

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。