我们真正关心的是自身可以从这个生态圈中获得些什么?说得更直白一点就是,我们可以从linux系统上面学到点什么,它对我们个人的成长和发展有哪些积极的因素。个人觉得,完全可以通过下面四个维度并结合自己的兴趣进行选择和判断。

  (1)熟练学习linux、配置linux和使用Linux

  2011年有一本书特别火,长期位列在热销排行榜上,这本书就是《鸟哥的linux私房菜》。这本书以centos为例,讲了很多的内容,比如说系统安装、常见配置、软件更新、特殊命令的用法、服务器的配置等等。整本书的内容很厚,而且内容是一版再版,可见大家对linux的基础知识是非常渴求的。另外一方面,现在随着电商和视频网站的迅速发展,一种称为运维工程师的职业开始热门起来。由于行业的特殊性,某些互联网公司需要成百上千的服务器统一对客户进行服务,那么怎么样搭建网站、配置服务器均衡负载、进行远程控制、正确配置数据库和统一管理服务器集群,这些都是运维工程师需要关注的事情。从这个意义上来说,运维工程师的重要性可见一般了。

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

  通俗意义上来说,利用linux开发应用层的软件和windows上面开发应用软件没有什么不同。可能,在windows上面使用得比较多的就是mfc、gdi、win32这些接口,而在嵌入式上面使用的就比较多种多样了,什么qt、minigui、gtk都是可以用来进行开发的。当然,上面说的都是界面程序,很多公司的linux程序是没有界面的,比如说游戏公司的linux工程师。相比较而言,他们看中的更多的是linux的稳定性,所以在linux上开发的更多的都是服务器端程序。很多人都有一个误解,认为操作系统就一定比应用软件高级,其实不然。在我看来,office、webkit、samba、mplayer这些软件的代码都是在百万行以上,本身的结构也是相当复杂的。说到应用开发,网上有几本书,分别是《linux程序设计》、《unix环境高级编程》、《unix网络编程》,对我们都很有借鉴意义。诚然有些书是基于unix系统的,但是基本的编程接口都是差不多的,相应的代码在linux跑绝对没问题。

  (3)利用linux开发驱动

  和其他os系统开发驱动的工作一样,linux驱动开发也有自己的一整套流程。要想真正地做好驱动,一般来说你需要知道芯片的寄存器特性、电气原理图、总线标准,当然熟悉信号测试,通晓定时器、互斥工具、回调机制、位运算、中断机制、芯片设置、信号时序、地址分配,这些也是少不了的。更极端一点,如果本身创业的公司比较小,驱动开发工程师有的时候还需要自己测试信号、调试boot、焊接芯片,这些都是可能的。所以说,对于真正的芯片企业来说,无论是美资、日资、台资企业来说,驱动开发工程师的收入都是非常可观的。特别是现在有了android的推波助澜,驱动开发工程师的薪酬更是水涨船高。希望在软件上有所突破的硬件工程师或者是希望对系统本身进行更多了解的软件工程师,都可以将此作为自己长期发展的一个方向。关于这方面的书很多,《linux driver development》无疑是人气最旺的一本,但是我想说的是有一本国内朋友写的书也相当不错,那就是宋宝华的《Linux设备驱动开发详解》,质量也相当不错,朋友们有时间也可以关注一下。

  linux驱动其实并不复杂,我们要做的就是在linux统一的驱动框架下实现对外设的统一管理。很多的代码架构都是现成的,所以我们只要做好模仿、学习、测试和验证就可以了。比较简单的代码就是下面的这一段话,

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

  这里顺便把Makefile也写一下,

  (4)linux kernel代码移植、修改和维护

  linux kernel代码相信是被很多人奉为经典的,但是linux kernel的代码很长也很难。一方面,linux代码存在技巧代码、汇编代码,同时部分函数冗长、文件冗长、命名不规范,另外一方面linux的代码分布合理、系统流程明显、相关资料众多。关键是我们自己怎么从linux kernel中学到东西?是看书呢,还是看代码呢?是每一行都看呢,还是按照模块看呢?是掌握主要原理呢,还是看实现技巧呢?是看高版本呢,还是先熟悉低版本呢?下面,我想就自己的经历谈谈自己的看法,

  a)熟悉的代码认真看,不熟悉的代码了解一下接口就可以,对于内存管理只要了解__get_free_page、kmalloc、vmalloc这几个函数就可以了;

  b)代码不要贪多求快,多思考多实践;

  c)忽视技巧,看中代码的处理流程和策略的权衡,多多思考为什么要这么设计;

  d)利用module特性查看代码的执行日志,代替函数堆栈的功能;

  e)了解linux性能的改进方法,了解为什么有软中断、rcu、slab和各种各样的延时函数;

  f)自己编写os,实现内存管理、信号量、消息队列、驱动开发、中断和线程调度,深入理解os的流程。

  最后依然为大家分享相关的学习资料供大家参考学习用

  九天学会linuxC语言

  http://www.makeru.com.cn/course/1861.html?s=45051

  linux基础

  http://www.makeru.com.cn/course/details/2058?s=45051

  Linux网络经典案例

  http://www.makeru.com.cn/live/3485_1630.html?s=45051

  shell脚本

  http://www.makeru.com.cn/live/3485_1489.html?s=45051

从四个方向分析我们可以从linux学到什么的更多相关文章

  1. ActiveMQ、RabbitMQ、RocketMQ、Kafka四种消息中间件分析介绍

    ActiveMQ.RabbitMQ.RocketMQ.Kafka四种消息中间件分析介绍 我们从四种消息中间件的介绍到基本使用,以及高可用,消息重复性,消息丢失,消息顺序性能方面进行分析介绍! 一.消息 ...

  2. Android四个多线程分析:MessageQueue实现

    Android四个多线程分析:MessageQueue的实现 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线 ...

  3. JS用斜率判断鼠标进入DIV四个方向的方法 判断鼠标移入方向

    本文要介绍的是一种鼠标从一个元素移入移出时,获取鼠标移动方向的思路.这个方法可以帮助你判断鼠标在移入移出时,是从上下左右的哪个方向发生的.这个思路,是我自己琢磨出来,利用了一点曾经高中学过的数学知识, ...

  4. Android自定义组件——四个方向滑动的菜单实现

    今天无意中实现了一个四个方向滑动的菜单,感觉挺好玩,滑动起来很顺手,既然已经做出来了就贴出来让大家也玩弄一下. 一.效果演示 (说明:目前没有安装Android模拟器,制作的动态图片太卡了,就贴一下静 ...

  5. Linux及安全实践四——ELF文件格式分析

    Linux及安全实践四——ELF文件格式分析 一.ELF文件格式概述 1. ELF:是一种对象文件的格式,用于定义不同类型的对象文件中都放了什么东西.以及都以什么样的格式去放这些东西. 二.分析一个E ...

  6. 51nod 1572 宝岛地图 (预处理四个方向的最大步数优化时间,时间复杂度O(n*m+k))

    题目: 这题如果没有时间限制的话暴力可以解,暴力的话时间复杂度大概是O(k*n),1s的话非常悬. 所以我们需要换个思路,我们对每个点预处理四个方向最多能走的步数,这个预处理时间复杂度是O(n*m). ...

  7. Android自定义组件系列【15】——四个方向滑动的菜单实现

    今天无意中实现了一个四个方向滑动的菜单,感觉挺好玩,滑动起来很顺手,既然已经做出来了就贴出来让大家也玩弄一下. 一.效果演示 (说明:目前没有安装Android模拟器,制作的动态图片太卡了,就贴一下静 ...

  8. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  9. TCP/IP三次握手四次挥手分析

    流程图 全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 服务器独有的:(1)LISTEN (2 ...

随机推荐

  1. linux 档案权限篇之一

    一:预备知识 1.在linux中,任何一个档案都具有.所有者.用户组.其他用户这三种身份的个别权限. 1.所有者:即档案拥有者,由于Linux是多人多任务的系统,因此可能常常会有很多人同时使用这部主机 ...

  2. python库--pandas--部分实例

    >>> pd.pivot( index=np.array(['one', 'one', 'one', 'two', 'two', 'two']), columns=np.array( ...

  3. 第二十次CSP考试有感

    这是第二次参加csp考试了,大二上学期参加了第17次csp,160分.刚刚下午结束了第20次csp,200分. 这次比赛规则和以往不同,以前可以携带纸质书籍和usb,提交上去的答案不能实时出成绩.现在 ...

  4. Jmeter系列(30)- 性能指标(3) | 性能指标峰值

    性能指标峰值 简述 彻底理解了性能指标(1)(2)的内容,这一篇随笔其实就不用看了,而且大家也能猜到这一篇内容是啥:二八原则 性能指标不要硬性的往那些性能指标上去靠,要根据业务来,熟悉业务,明白了解你 ...

  5. JDBC-2(CRUD)

    3.PreparedStatement实现CRUD 3.1 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和SQL语句,接受数据库服务器返回的结果.(一个数据库连接就是也给Socket连接) ...

  6. python学习笔记(五)-文件操作2

    一.文件修改 现有文件file.txt,内容如下:二十四节气歌春雨惊春清谷天,夏满芒夏暑相连.秋处露秋寒霜降,冬雪雪冬小大寒.上半年逢六廿一,下半年逢八廿三.每月两节日期定,最多相差一二天.要求:将文 ...

  7. django 如何在HMTL中使用媒体media_url

    django 如何在HMTL中使用媒体media_url中指定的路径 第一种: 一. setting.py里,一般图片或者文件上传路径都是是以下设置, MEDIA_URL = '/media/'    ...

  8. 版本管理 - Git 使用入门

    Git 是一个分布式的版本管理系统,而 SVN 是一个集中式管理系统. 版本控制 Git与SVN的对比 对比 SVN Git 工作方式 集中式 分布式 文件管理 增量式 系统快照 权限控制 对团队中参 ...

  9. centos7 kubeadm 搭建k8s

    Centos 7 搭建 kubernetes 集群环境 一.介绍 本次是centos7 搭建kubernetes1.15.9 通过kubeadm 的形式搭建 二.准备 > centos 7 (镜 ...

  10. "错误: 找不到或无法加载主类"解决办法

    前言:记上次一个找了个把小时的问题(很烦这些配置) 原因: 从svn下checkOut的项目 在application的配置的输出class路径为main,而class文件路径是在项目名的根路径下,所 ...