“Linux内核主要由进程调度(SCHED),内存管理 (MM),虚拟文件 系统 (VFS),网络 接 口(NET)和进程间通信(IPC)构成。进程调度控制系统中多个进程对CPU的访问,使得多个进程在CPU中微观串行,宏观并行。内存管理主要控制多个 进程安全地共享主内存区域,当CPU提供MMU单元的时候,linux内存管理为每个进程提供虚拟内存到物理内存的转换。虚拟文件系统屏蔽底层各种硬件的 具体细节,为所有设备提供统一的接口。”
要转向内核开发,嵌入式开发人员需要掌握以下知识:
- 1. C语言编程:C语言是内核开发的主要编程语言,需要熟练掌握其语法和编程技巧。
- 2. 操作系统原理:需要了解操作系统的基本原理,包括进程管理、内存管理、文件系统等。
- 3. Linux内核:需要深入了解Linux内核的架构、模块、驱动程序等。
- 4. 设备驱动开发:需要掌握设备驱动的开发流程和技术,包括字符设备、块设备、网络设备等。
- 5. 调试技能:需要掌握调试技能,包括使用调试工具、分析内核崩溃等。
- 6. 硬件知识:需要了解硬件的基本原理和操作,包括处理器、内存、外设等。
- 7. 开源社区:需要了解开源社区的文化和开发流程,以便更好地参与内核开发。
内核开发行业的现状:
- 看一个岗位是不是青春饭很简单,就看你的经验有没有用,未来有没有人愿意出钱买这部分经验。
- 医生为什么越老越值钱,因为人体结构一成不变,得到的经验永远不过时。
- IT行业内使用的集群架构想一成不变本来就很难,但可以肯定得是,越往低层(网络、系统)变得可能性越小,上层应用五花八门,更新换代非常快。而且国内现在很多公司做的工作低端偏多,一个/几个有经验的,带一帮年轻没经验的,搞太多有经验的工资开销太大了。
- 我是做系统运维的,主搞linux,身边养老的同事非常多,40岁左右的不少。目前企业服务器的系统选择基本就是linux和windows,aix系统等小型机系统也属于unix衍生系统,光是搞明白linux的使用和维护,我觉得10年内吃碗饭就没问题的,但是必须配合上主流平台、主流云、主流应用的运维知识。
- 在国内环境下,我认为搞linux内核开发跟java开发比,还是偏经验饭一些,但是对技术要求还是挺高的,除了C/C++语言开发,了解内核、看内核源代码,分析系统疑难杂症、kvm虚拟化、内核存储、IO、网络栈这些也都要学习,反正不断学习是免不了啦,这些都掌握了估计你会很抢手的。好的内核开发的工作对经验要求都挺高,题主没经验怎么获得经验也是个问题。
- openshift结合docker的CICD、devops开发现在都很火爆。ibm收购红帽以后linux势头挺猛的,openshift现在市场占有份额非常大,redhat的课程题主可以都做了解,java开发想在同行业内转行难度还是相对小一些。
还不熟悉的朋友,这里可以先领取一份Linux内核驱动开发新手学习资料包(入坑不亏):
这里给大家推荐零声教育全网独家的【Linux内核源码分析与项目实战】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析计算机底层原理,20项目案例,2W+行手写代码,全面解析6个内核技术方向:
课程目标:3-5个月帮助学员掌握内核底层必备技术
全方面系统全面的讲解底层原理开发技术:
学习路线主要从
- 进程管理专题
- 内存管理专题
- 网络协议栈专题
- 设备驱动专题
- 内核组件专题
- 文件系统专题
- 内核项目实战专题
- 等等。。。
(篇幅有限,就不一一展示了,扫码备注AAA详细了解)
适合于
- Linux 内核优化、内存管理 ,内核开发岗位、定制化自己OS
- 深入系统内核研究、网络安全逆向分析
- 提升自己能力,为了更好做应用层开发提供核心依据
- 跳槽面试大厂(腾讯、华为、中兴、中微、中芯等等)
- 从事业务开发多年,对底层原理理解不够深入的在职工程师
- 从事嵌入式方向开发,想转入内核开发的在职工程师
- 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
- 从事非开发岗位(算法岗,运维岗,测试岗),想转内核开发岗位的在职工程师
内核难点与学习方法:
- 1、知识点多,关系错综复杂。
- 2、每一个知识点的难度都很难。
- 3、代码量很大,内核有几百万行。
- 4、操作系统相关的知识。
- 5、程序结构上的很多规范要求
自学的弊端:网上资料繁杂,知识零碎,看过之后容易很快就忘掉,遇到问题只能自己钻研,有些很简单的问题不知不觉就浪费了很多时间,除非你是定力耐心毅力非常强的人,不然学习起来会没有方向感,盲目的看书枯燥乏味耗时比较长,会导致没有学习积极性失去信心与坚持下去的决心等等。总的来说自学不能说完全不行,只是适合少数人,自学的难度比报班系统学习一定是困难很多很多倍,多付出很多很多倍的。
反之报班学习的优势在于:
节约时间,知识串联:视频学习老师会提取知识点讲解出来比看书快了很多倍,并且理解起来比枯燥乏味的读书更有意思,尤其计算机相关的理论知识更是繁琐复杂交错依附,报班会让你更加系统的学习,知道前因后果来龙去脉,老师会把知识串联起来交给你,配套的资料发给你,而不是独立零散的知识点学习,对于提升来说,是高效且快速的。
老师答疑:遇到不懂得问题,老师会在自己看到的第一时间给到解答,24小时的答疑服务,会大大节约了你的学习时间。老师在知识体系,课程内容上,简历书写,面试指导,谈薪技巧等等方面都有着丰富的经验,课程内容也是由简到难,源码分析勾画重点,不做无用功,会提供配套的学习资料,图文并茂,讲解上通俗易懂,技术慢慢深入串联,学员通过和老师的沟通交流从而轻松学习,来达到自己想要达到的目标。
时间自由学习高效:很多在职的开发人员除了日常上班大部分时间还要加班,对于提升自己都是挤时间,没有完整的学习时间,这样其实给自学增添了很大的难度,跟着视频学习每日定好进度下班以后有固定的学习时间学习内容,或者周末抽几个小时整时间学习,有方向感且高效。
要说报班学习的弊端,那我只能想到一个,就是会有金钱上的一个付出,但是技术学会了是会跟随你一辈子的,现在的付出可能就是以后你一个月的涨薪部分,这个账怎么算都不会亏。投资自己 是风险最低 收益最高的,在大环境中安于现状才是井底之蛙,不断学习提升自己才是程序员最需要做的,提升工作竞争力,让自己在现在的公司被需要!
现如今各行各业内卷都很严重,不要说行业不行,而是大家越来越专业,这个是行业发展的必然性,优胜劣汰适者生存,时代在改变,不提高自己的核心竞争力就要出局。
最后:
给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!
给那些1-3年的安于现状的伙伴一句话:
不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。
给那些担心35岁的伙伴一句话:
决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!