学习Linux 内核能找到工作吗

我的学习经历:自学Linux去中兴上班
我的学习经历:自学Linux去中兴上班
  作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。   在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。   C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。   学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。   回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。   如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式   Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话,也是要花时间去了解那些类、控件的。   如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。   在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?   我只能说凭兴趣,并且驱动和应用并不是截然分开的。   1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。   想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂。   2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为就是业务纯熟。   比如在通信行业、IPTV行业、手机行业,你了解行业的需求。所以,当领导的人,多是做应用的。   3. 做驱动,其实我不想称为&做驱动&,而是想称为&做底层系统&,做好了这是通杀各行业。我工作几年,   做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。   当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。   做底层的发展方向,个人认为是技术专家。   4. 其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。   有了业务经验,你再了解一下底层,很快就可以组成一个团队。   回到怎么学的问题上。嵌入式Linux底层系统包含哪些东西?不要急,举一个例子你就知道了。   1. 电脑一开机,那些界面是谁显示的?是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。   类似的,这个BIOS对应于嵌入式Linux里的bootloader。这个bootloader要去Flash上读入Linux内核,并启动它。   2. 启动windows的目的是什么?当然是上网聊天什么的了。这些上网、聊天工具在哪?   在C盘、D盘上。所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统。   3. windows能识别出C盘、D盘,那么肯定能读写硬盘才行。这涉及的东西称为驱动程序。当然不仅仅是硬盘,还有网卡、USB等等。   嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。   先说到这里吧,嵌入式LINUX里含有bootloader,内核, 驱动程序、根文件系统这4大块。   一、bootloader:   它就是一个稍微复杂的裸板程序。但是要把这裸板程序看懂写好一点都不容易。Windows下好用的工具弱化了我们的编程能力。   很多人一玩嵌入式就用ADS、KEIL。你能回答这几个问题吗?   1. 一上电,CPU从哪里取指令执行?   答:一般从Flash上指令。   2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?   答:全局变量应该在内存里   3. 那么谁把全局变量放到内存里去?   答:长期用ADS、KEIL的朋友,你能回答吗?这需要"重定位"。在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。   你可曾去阅读过?   4. 内存那么大,我怎么知道把"原来存在Flash上的内容"读到内存的"哪个地址去"?关注微信公众号【yjbys_com】,及时收取企业面试通知。,m.yjbys.com   答:这个地址用"链接脚本"决定,在ADS里有scatter文件,KEIL里也有类似的文件。但是,你去研究过吗?   5. 你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊?   答:是的,要能操作Flash。当然不仅仅是这些,还有设置时钟让系统运行得更快等等。   先自问自答到这里吧,bootloader这一个裸板程序,其实有3部分要点:   1. 对硬件的操作   2. 对ARM体系处理器的了解   3. 程序的基本概念:重定位、栈、代码段数据段BSS段什么的。   对硬件的操作,需要看原理图、芯片手册。这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂; 不求能看懂模拟电路,但是要能看懂数字电路。这方面的能力我是在学校里学到的,微机原理、数字电路这2本书(书名忘了)就足够了。但是我怀疑你有无耐心把这2本书看完。我不知道现在有没有更快捷的书。想速成的话,就先放掉这块吧,不懂就来EDN发贴问吧。   另外,芯片手册是肯定要读的,别去找中文的,就看英文的。开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后,读任何芯片手册都很容易。   对ARM体系处理器的了解, 看杜春蕾的吧,里面讲有汇编指令,有异常模式、MMU等。也就这3块内容需要你了解。   程序的基本概念,王道当然是去看编译原理了。可惜,这类书绝对是天书级别的。   对于bootloader,我学习时是先看了,然后自己写程序把各个硬件的实验都做了一遍,比如GPIO、时钟、   SDRAM、UART、NAND。把它们都弄清楚了,组台在一起就很容易看懂u-boot了。   总结一下,看懂硬件原理图、看芯片手册,这需要你自己去找资料。剩下的,就按和第1期视频的章节目录去学习吧。   二、内核:   想速成的人,先跨过内核的学习,直接学习怎么写驱动。   想成为高手,内核必须深刻了解。注意,我说的是了解,我没奢望去写出一个内核。   要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。   推荐两本书:   1. 通读,请看薄的那本(浮燥的社会讲求速度, 呵),   2. 选读, 想了解哪一块就读哪一节   三、驱动:   驱动包含两部分:硬件本身的操作、驱动程序的框架。   又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。   说到驱动框架,有一些书介绍一下。LDD3,即,老外写的那本,里面介绍了不少概念,值得一读。但是,它的作用也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念,入门后就扔掉了。   驱动方面比较全的介绍,应该是宋宝华的了,老实说我只看过目录,有不少人说好,这里推荐一下。   要想深入了解某一块,绝对是超5星级推荐。你别指望把它读完,1800多页,上下两册呢。我是某一块不清楚时,就去翻一下它。任何一部分,这书都可以讲上2、3百页,非常详细。并且是以某个目标来带你分析内核源码。它以linux 2.4为例,   但是原理相通,同样适用于其它版本的linux。   还有没有其他介绍?呵呵,当然有了,韦东山Linux视频第2期。里对驱动讲得不多,不够深入。   于是我录制了这期视频。不仅仅教你怎么写怎么改驱动,还教你为什么这样写这样改驱动。   每一个驱动都是现场编写:   1. 用绘图板画图讲解──相当于学校里老师在黑板上画图讲解,很直观马上打开微信搜索[yjbys_com],关注应届毕业生网官方公众号,校园招聘微信号|xiaoyuan_zhaopin   绝对不是对着PPT念。   2. 用source insight当场写程序,从第1行开始写,每一课都是这样。我讲了20多个驱动,就写了20多个程序。   3. 写完就编译、测试。手机m版应届毕业生网 m_y j b y s_com,最全的名企校招、招聘会、宣讲会信息,校园招聘微信号|xiaoyuan_zhaopin   4. 很全面,字符设备驱动、块设备、网卡驱动3大类齐全,硬件介绍、驱动框架分析、测试3大类齐全。   培训机构里教的内容,远不及这期视频丰富。我在多个培训机构讲过课,从没看到哪个老师敢每一课都当场讲解当场编写代码当场测试,除我之外!也没看到哪个培训机构讲完这些内容──因为时间不够,讲完起码要一个月,但是这部分基本只有2周授课时间。   把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧。有问题就先"痛苦地思考",思考的过程中你会把很多不相关的知识串联起来,最终贯通。   四、根文件系统:   大家有没有想过这2个问题:   1. 对于Linux做出来的产品,有些用作监控、有些做手机、有些做平板。那么内核启动后,挂载根文件系统后,应该启动哪一个应用程序呢?   答:内核不知道也不管应该启动哪一个用户程序。它只启动init这一个应用程序,它对应/sbin/init。   显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等)   这个问题提示我们,文件系统的内容是有一些约定的,比如要有/sbin/init,要有配置文件   2. 你写的hello,world程序,有没有想过里面用到的printf是谁实现的?   答:这个函数不是你实现的,是库函数实现的。它运行时,得找到库。   这个问题提示我们,文件系统里还要有库。   简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。   当然,也可以看里构建根文件系统那章。   说一下我的学习经历吧。   1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。PCB的设计   是在实验室里自学的,只设计过2层板,现在忘记得差不多了。但是保留了看原理图、看芯片手册的能力。   2. 选修了软件学位,对软件设计挺感兴趣,但是也只是学了C语言、数据库而已。凭着兴趣做了不少竞赛题。没能力去   参加竞赛,但是把C语言练得很扎实。   3. 在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序   4. 在第2家公司,用51单片机做车载电话,开始走上纯软件的道路。   5. 开始感到单片机的不足,辞职半年闭门学Linux,从red hat怎么操作开始。步骤就是先看,   再自己写裸板程序操作硬件,接着到分析u-boot。同时看,对LINUX框架有所了解。   在写裸板时,建议各位加强对中断的理解,内核就是用中断来完成各种功能的。   6. 分析完u-boot,就开始进行简单的驱动编程了,这时候,能力还很弱。   7. 开始去中兴上班,工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题),能力得到煅炼。
本文已影响人
行业名企导航
推荐名企讨论区
推荐热门话题1123人阅读
Linux内核(16)
1.有。国内确实有好些公司要涉及内核的。当然跟公司从事的领域不同,技术要求也会不同。
2.学内核,好些时候不是靠什么聪明才智,要靠的是坚强的毅力。各种基础要求也要高些,比如数据结构,微机原理,组成原理等。当然如果毅力足够坚定,基础不是问题,可以学。
3.搞这行,月薪应该相对高些。高多少就得看自己的水平了。
4.不要听那些牛人怎么吹,学内核要全面精通,对于学生来说是很不现实的。要抓住内核的一方面,比如内存管理,进程调度,文件系统,网络协议栈等。一般要抓住一到两方面,找工作时就会容易些。
5.我就找工作时的体会,目前国内招文件系统跟网络协议的相对多点,进程调度跟内存管理的要少些。
6.不一定学内核以后就一定从事内核方面的工作,但是你对这些知识的理解会对很有帮助。在操作系统的技术上,其实很多东西是共同的,只要你懂这个,很容易适应一些其它的一些新领域,比如虚拟化。所以一些公司做的不是内核开发,也会要求你懂这个,为的就是这个。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:102396次
积分:1267
积分:1267
排名:千里之外
原创:18篇
转载:86篇
(1)(2)(2)(1)(5)(37)(23)(33)学习 Linux 内核能找到工作吗?
我很讨厌MFC甚至界面的东西,请问如果直接学习LINUX内核方面的技术在国内能找到相应的工作吗?请各位知道的说说看。
“学习内核”太泛了,内核上的技术涉及众多CS子领域,而且也包含设备驱动程序等的应用开发,所以方向的选择,工作的选择对日后从事的工作是否有趣还是有很大影响的。应用的方向有(不限于):1. 设备驱动程序开发;2. 系统(主要是内核)裁剪;3. 嵌入式应用。这方面会进一些做嵌入式的公司(很可能是外包),设备公司和安全公司。研究的方向有(不限于):1. 虚拟化;2. 网络协议栈;3. 存储;存储厂商、大型互联网公司的平台和基础系统研发部门都有类似的工作。另外,多学无害。很多互联网相关的后端开发/维护,都是越了解内核代码越有用的,比如(不限于):1. 系统内核调优;2. 开发高并发/高负载后端服务;3. 高可用代理和各类负载均衡方案;4. 各种云服务;5. 分布式/P2P应用。
能, intel, IBM, TAB, ucloud, redhat, 等等等等, 都或多或少招人。
有啊, 我手里好几个这种linux kernel相关的岗位等着卖人进去呢, 啥时候你学成了来找我就是了, 我负责推荐. 当你修复了三个内核bug的时候就能卖个好价钱了. 我当年也学了点儿kernel相关的东西, 好在及时悬崖勒马.
Kernel 算是高级技术,系统程序员具有无比的优越感。但是回到现实,技术市场对于底层的需求并不多,相对应用层需求来说,系统程序员显得太高端了,虽然他们处理应用层问题同样优秀。所以若非热爱,涉猎即可,不要关注过多。
考了高考就能上大学么
在达到某个临界点之前,你找不到工作
有一点你一定要相信,不管学什么,学好了就一定能找到工作。
卧槽被邀请了我觉得 Linux kernel 这事,不仅要知其然,还要知其所以然。比如你知道 procfs 里都有啥,甚至能因地制宜把参数调的一级棒,我感觉看上去更像一个 sysadmin 做的事情。procfs 里为啥要有这些东西?参数改了之后为什么会产生影响?这些事情要搞清楚,其实跟 Linux 本身并没有太大关系,你换成 Windows 也是同样的道理。我认为不管是操作系统还是手机应用,很多难点都来自于搞清楚用户的需求。手机应用面对的需求一般是大众经常接触、易于理解的,而操作系统面对的需求是源自计算机领域本身的。所以对于“不学 MFC、直接去学 Linux 内核”,我觉得微微不合理。依我看,应该系统地把计算机科学的专业课学好,有空就积极实践,其他问题自然迎刃而解。搞 Linux 其实并没有比搞其他程序更复杂。我上学的时候也没有特意去钻研过 kernel 里是怎么回事。基础打好,理论搞清楚,后面一看就懂了。
如果决定学习了,可以像我一样看看这个,锻炼自己的动手能力。
可以一个哥们作嵌入式安全的就是跟这个相关的你需要针对不同的设备编译出不同的LINUX来用PS现在C/C++除了MFC 还有很多东西
已有帐号?
无法登录?
社交帐号登录新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
稍有积蓄, 积分 344, 距离下一级还需 156 积分
论坛徽章:0
你这水平已经相当不错了。
学历和工作经验是个硬伤,去top的外企机会不大。
可以先去小公司里磨炼,我觉得去startup的公司很适合你,能够快速把你的知识应用起来,而且有可能就发财了。
白手起家, 积分 30, 距离下一级还需 170 积分
论坛徽章:0
1:可以先到用到内核的公司工作,岗位可以是基础的C/C++。进去了就很容易转成内核了。只要你工作努力。公司推荐TCL。火狐和安卓系统。用在手机上的。
2:工资你要的太低。没人敢用你。你给我们做软件的丢脸了。一线城市之间。你这是刚开始。熟练技术了在10000以上。
3:内核熟练的在15000以上。要5到10年的成长期才能玩透。25000以上的内核岗位也有。刚开始做内核。你4000也可以干。
当初TCL问我去不去惠州做火狐或者安卓。说我工资开始会比较低。比较我没做过内核。我果断坚持心中的价位,所以没要我。毕竟内核自己学也行。我更在乎钱。所以做了linux C/C++.
4:技术要有方向性。坚持做内核。我为你加油。这行不看文凭。看能力。
5:你年纪还小。我90年的。你还是先去上个大学。学软件专业。可以细化到嵌入式linux专业方向。读了大学。你的路会更加宽。关键是会让你走得更高,飞得更远。
白手起家, 积分 176, 距离下一级还需 24 积分
论坛徽章:1
真巧,我曾经也学过as3,就是flash的那种脚本语言,没什么用,当时是在杭州,浪费了很多时间,二线城市工作机会非常少,没钱怎么养活自己呀。
如果你对java感兴趣还是搞java吧,因为很容易上手,内核的话二线城市都没多少工作机会,要搞内核,就来一线城市吧。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信