我们真正关心的是自身可以从这个生态圈中获得些什么?说得更直白一点就是,我们可以从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. [第十一篇]——Docker 仓库管理之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker 仓库管理 仓库(Repository)是集中存放镜像的地方.以下介绍一下 Docker Hub.当然不止 docker hub,只是远程的服务商不一样,操作都是一样的. Docker H ...

  2. Centos6.5时间服务器NTP搭建

    NTP时间服务器安装与配置 第1章 Server端的安装与配置 1.1 查看系统是否已经安装ntp服务组件 rpm -qa | grep "ntp" #<==查看是否已经安装 ...

  3. 为什么在匿名内部类中引用外部对象要加final修饰符

    当所在的方法的形参需要被内部类里面使用时,该形参必须为final. 为什么必须要为final呢? 首先我们知道在内部类编译成功后,它会产生一个class文件,该class文件与外部类并不是同一clas ...

  4. 第二十次CSP考试有感

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

  5. 【简单数据结构】链表--洛谷P1160

    题目描述 一个学校里老师要将班上NN个同学排成一列,同学被编号为1\sim N1∼N,他采取如下的方法: 先将11号同学安排进队列,这时队列中只有他一个人: 2-N2−N号同学依次入列,编号为i的同学 ...

  6. CDI Features inJavaEE 的上下文和依赖注入

    基本的CDI的功能: 类型安全:CDI使用Java类型来解析注入,而不是通过(字符串)名称注入对象.当类型不足时, 可以使用限定符 注释.这允许编译器轻松检测错误,并提供简单的重构. POJO:几乎每 ...

  7. 重学VUE——vue 常用指令有哪些?

    一.什么是指令? 在 vue 中,指令以 v- 开头,是一种特殊的自定义行间属性.指令属性的预期值是一个表达式,指令的职责就是:表达式的值改变时,相应地将某些行为应用到DOM上.只有v-for是一个类 ...

  8. CS:APP Chapter 3 程序的机器级表示-读书笔记

    3.1 程序的机器级表示 发展历史 Intel,AMD,ARM 等企业各有又是,CPU 从 8 位发展到 16 位,再到 32 位,近几年发展到 64 位,当下的 CPU 体系被称为 x86-64 体 ...

  9. Shell系列(8)- 变量与变量分类(1)

    变量命名规则 开头为字符或下划线,名字中间中能有字母.数字和下划线组成; 变量的长度不超过255个字符; 变量名在有效的范围内必须是唯一的; 如再次定义则会替换上一个变量的值 在Bash中,变量的默认 ...

  10. PolarDB PostgreSQL DDL同步原理

    概述 在共享存储一写多读的架构下,数据文件实际上只有一份.得益于多版本机制,不同节点的读写实际上并不会冲突.但是有一些数据操作不具有多版本机制,其中比较有代表性的就是文件操作.多版本机制仅限于文件内的 ...