精华内容
下载资源
问答
  • 内核开发是做什么的
    千次阅读
    2016-10-23 20:10:43


    http://bbs.chinaunix.net/thread-4192836-1-1.html


    我现在是一名大四学生,专业学的是软件工程,已经基本看完了《Linux 0.12内核完全剖析》这本书,但是这本书与现在内核差异比较大,现在也编译过2.4内核(毛德操先生的书中所用内核),但是毛德操先生的书也是比较厚,所以在开始研究之前先来请教下各位先辈。

    在今年校招时我也是一心想做内核,但是无奈各大企业这方面招的人太少,移动、前端、Java岗位那么多,内核岗位根本找不到,即使有,那也是研究生岗位。曾经兴致冲冲去投了360的Linux内核工程师,结果做的笔试题全是Windows内核,至今不明白咋回事。

    目前拒掉了一份深圳8000的offer,因为工作内容是机顶盒C/C++语言开发,想了想还是喜欢内核相关,又获得了一份与操作系统有关的offer,公司名就不说了,工资加上补贴有点低,也就5000吧,毕竟是二线城市,已经签了。我很想去红帽,可惜他不收应届生。现在在我看来,研究内核似乎并没有很大的出路,无非是为系统编程增加了点基础而已。我确实喜欢内核,但是在工资薪水面前还是有点不甘心,毕竟同学做前端的做移动的都那么高,所以我在想是不是应该向Linux系统编程发展一下,学学C++,学学服务器编程,毕竟生存乃是大事......

    希望各位大侠能够根据自己的职业经历给点指导,小弟感激不尽。

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    很多人都是这么迷茫,徘徊过来的。说说我自己的一些理解。

    最近常想计算机是什么东西,计算机其实就是一个解决问题的工具。计算机包括硬件,软件。对于许多固定的问题寻求一种解决方法,可以调整的点很多,可能会设计专用芯片,可能会在软件上进行设计。而操作系统就是一个为了方便解决问题提供的一种通用平台。归根结底,kernel 只是为了服务其他软件的一种基础软件。所以可想,为什么做应用的公司这么多,而做 kernel 的公司很少。
    kernel 的门槛很高。做 kernel 的工程师不像一个程序员,反而像一个学习系统架构的人。大部分人只是改改defconfig,dts文件,或者在某一个模块加几行代码。更多的时间是去弄懂一个子系统的工作原理。
    kernel很多特性都是出于用户的需求而增加的,即在一个应用中,有些东西在userspace不能做了,那么在kernel中增加相关的支持。所以我认为,一个Linux Kernel工程师首先就要会进行系统编程。例如,如果如果研究调度,至少需要明白 user space 进程需要哪些管理机制吧。我看了不少 kernel 的大牛都有一些其他运行在 user space 的软件作品。
    当然要写出优秀的软件,还是必须理解 kernel 的工作原理的。我有点倾向于把 kernel 当作和 算法 一样的课程,当作对自己提升功力的必修课,而不是专注在kernel上。到了对计算机理解到一定层次,想做什么就做什么。多注意平时的编程锻炼,多写代码。编程这事光看代码是不够的,之前也有说了,搞kernel是很少会有自己操刀的时候的,门槛太高,而且让一个新手来重构大牛的代码想想也是不可能。所以我认为在学习kernel 的同时,可以做一些user space的开源项目,不要把编程能力落下。还有一种可能就是,你进入了搞kernel 社区中feature的公司,有mentor手把手带你怎么搞kernel,例如先分派一些简单的改函数名字,移除废弃接口。如果有这些的机会那是最好的了。
    对于做kernel的公司,二线城市肯定是不行的。只有大城市才有好的机会,一部分是芯片公司,专注点有体系架构,性能功耗;有些是网络公司,做虚拟化,安全,文件系统之类的。至于芯片的下游公司做的大都是驱动集成。
    因为kernel是非常好的一个开源项目,里面问题很少。一般的公司都没有能力去改里面核心的东西。国内好像intel/ibm做的挺好的

    更多相关内容
  • 此文包含 Linux 系统的学习路径和书籍推荐。 我觉得学习 Linux 系统,内核驱动时,最开始只需要 ‘Know what, not know ...内核开发什么? 广义上讲,新增或修改上图中内核部分的所有子系统。 非 Linux 源码贡献者.

    此文包含 Linux 系统的学习路径和书籍推荐。

    我觉得学习 Linux 系统,内核驱动时,最开始只需要 ‘Know what, not know how ’。 不用去探究细节,只需要知道整体的框架,知道有哪些需要我们重视的内容即可。

    何为 Linux 内核开发?

    首先,初步认识下 Linux kernel

    在这里插入图片描述

    • Linux 内核的框架如上图。
    • 设备子系统负责和硬件打交道。
    • 大部分工作集中在设备子系统部分。

    内核开发是什么?

    • 广义上讲,新增或修改上图中内核部分的所有子系统。
    • 非 Linux 源码贡献者,一般来说只修改设备子系统部分。

    接下来,简单聊聊初学者需要重点关注的三个部分:设备树,字符设备,平台设备驱动。

    设备树(DTS)

    设备树相当于一份软件中描述硬件结构的配置框图。假设下图为硬件框图:
    在这里插入图片描述
    那么其软件描述的代码片段如下:

    / { // root node
        model = "Qualcomm Technologies, Inc. SDM xxx";
        compatible = "qcom,sdmxxx";
        cpus {
            ... 
            cpu@0 {
                ... 
            };
            cpu@1 {
                ... 
            };
        };
        usb@<address> {
            ... 
        };
        serial@<address> {
            ... 
        };
        gpio@<address> {
            ... 
        };
        intc: interrupt-controller@<address> {
            ... 
        };
        external-bus {
            ...
            i2c@0,0 {
                ... 
                xxx@<address> { // I2C Dev
                .... 
                };
            };
            flash@1,0 {
                ... 
            };
        };
    };
    

    字符设备驱动

    • 字符设备驱动是理解设备驱动的基础。
    • 大多数设备都可以归于字符设备。
      在这里插入图片描述

    kernel 开发需要什么样的知识储备?

    我觉得这部分可以当着 Linux 系统的学习路径了。

    C 语言

    良好的 C 语言能力是必要条件, Linux 官方推荐了如下书籍。

    • The C Programming Language
    • Practical C Programming
    • C: A Reference Manual

    不过我觉得结合如下书籍一步步学习会更适合学习:

    《啊哈 C 语言》入门书籍,号称马桶上看的 C 语言,通俗易懂。
    《The C Programming Language》的中文版 《C 程序设计语言》,英文版也是很好一个选择的,一书两用,技术和英语都学习了。我觉得这一本是学习 C 语言的朋友们,必读的一本。

    在这里插入图片描述
    3. 《C 专家编程》,这本书主要讲语法特性,告诉我们 C 语言是怎么设计出来的,看了这本书,我们可以更深刻的理解每一行代码。

    在这里插入图片描述
    4. 《C 缺陷与陷阱》,《C 专家编程 》的延续,针对性更强,告诉我们 C 语言这个工具的缺陷与陷阱,让我们使用 c 语言时更加游刃有余。
    在这里插入图片描述
    5.《数据结构与算法分析 : C语言描述》,入门数据结构与算法,也是一本经典书籍,比《算法导论》那边砖头厚的书友好得多。
    在这里插入图片描述

    GNU

    这个也可以归为 C 语言里面,内核由 GNU C 和 GNU toolchain 实现,所以如下两方面的知识是需要的。

    • GNU C 的编码规则
    • GNU 工具链的使用

    Linux 基本命令

    学习 Linux 前,我们需要先熟悉 Linux 的“命令行 + 文件”的使用模式,要想学好一个东西,开始肯定需要用好这个东西。《鸟哥的 Linux 私房菜》应该是最适合初学者的一本书了。
    在这里插入图片描述
    如果想深入的话,推荐 《Linux 系统管理技术手册》,这本书很厚,算是 Linux 运维必备的手册。
    在这里插入图片描述

    应用程序设计

    通过系统调用或者 glibc,学会自己进行程序设计。如果每个系统调用都深入地学习、看书看文档、做实验,这样坚持一段时间,啃下这些东西,就很接近操作系统的原理了,就能看到另一番风景,甚至在应用编程时会有一览宗山小的感觉。参考书籍首推《UNIX 环境高级编程》,有代码,有介绍,有原理,非常实用。
    在这里插入图片描述

    设备驱动相关知识

    设备驱动方面的知识看下《Linux 设备驱动程序》应该就差不多了, 国内宋宝华写的《Linux 设备驱动开发详解》也还可以。
    在这里插入图片描述

    内核原理

    学习内核原理的话,推荐《Linux 内核设计与实现》,《Linux 内核完全注释》,《深入理解 Linux 内核 》三本书,当然也可以只买《深入理解 Linux 内核 》, 本书言简意赅地讲述了主要的内核机制。
    在这里插入图片描述

    阅读源码

    一开始阅读代码不要纠结一城一池的得失,不要每一行都一定要搞清楚它是干嘛的,而要聚焦于核心逻辑和使用场景。

    《Linux 内核源代码情景分析》是一本很适合参考的书,这本书最大的优点是结合场景进行分析,看得见、摸得着,非常直观,唯一的缺点还是内核版本比较老
    在这里插入图片描述
    Linux内核学习资料 教学视频 点击获取
    在这里插入图片描述
    在这里插入图片描述

    Linux内核学习免费课程:https://ke.qq.com/course/3485817?flowToken=1036460

    实践

    实现一个设备驱动程序,重新实现一些系统调用,或者重新实现一个文件系统或其他子系统等等。这部分难度会比较大,需要自己搞清楚所有细节,但是只要熬出来了,进步的愉悦是难以言说的。

    总结

    其实这部分内容已经不仅仅是针对内核开发了,而是针对 Linux 系统。C 语言, Linux 命令行,应用程序设计,设备驱动,内核原理,阅读源码, 实践, 只要我们踏实地把这样七个步骤走完,基本就已经领先绝大多数人了(甚至可以说 98% 以上,我也还在路上_),工作中 Linux 系统相关的绝大多数问题也难不倒你了,接下来就是在实战中不停地被捶打,最后成为一代宗师。

    当然如果只是对内核和驱动感兴趣,应用程序设计部分可以不用花太多时间。

    C/C++Linux服务器开发/后台架构师免费学习课程:https://ke.qq.com/course/417774?flowToken=1031343

    展开全文
  • 操作系统开发--什么内核

    千次阅读 2018-03-29 20:40:48
    操作系统内核是你永远看不到的。它基本上允许任何其他程序执行。它处理硬件事件(称为中断)、软件事件(称为系统调用)和管理资源的访问。硬件事件处理(中断)会获取到你刚才按下的键,并将按键转化为对应的字符并...

    操作系统内核是你永远看不到的它基本上允许任何其他程序执行它处理硬件事件称为中断)、软件事件称为系统调用和管理资源的访问

    硬件事件处理中断会获取到你刚才按下的键并将按键转化为对应的字符并存在缓冲区中某些程序就可以在缓冲区里检索到该字符并判断出你按下的是哪个键

    软件事件处理系统调用是由用户级的程序触发的像打开文件启动程序等每一次的系统调用都需要判断传递的参数是否有效然后执行内部操作完成处理

    大多数的用户程序是不会直接发出系统调用的个别除外比如ASM),而是使用标准库标准库可以格式化内核需要的参数并产生一个系统调用:C语言中的函数fopen()最终是调用了内核函数这才能打开文件)。

       内核为了保存最后操作的状态通常定义了一些抽象的文件进程套接字目录等这也使得内核保存最后状态变的更高效容易


    如果此篇文章对您有所帮助,请多多支持哦!您的支持是我一直写下去的动力!


    展开全文
  • 作者: 刘火良 杨森 从0到1教你写μC/OS-III内核,详解各个内核组件如何使用。 由浅入深,结合野火STM32全系列开发板,提供完整源代码,极具可操作性。
  • 经典嵌入式黒皮巨著《嵌入式系统Linux内核开发实战指南(ARM平台)王洪辉著.pdf》。值得一读!
  • 开发工具Visual Studio 2012 winform控件webbrowser控件 内嵌火狐内核内核 已经明确引用于给出实例 方便各位使用 分为mini版本与复杂版本
  • [14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup...
  • 操作系统:操作系统内核什么

    千次阅读 2022-03-11 15:42:33
    文章目录前言一、内核什么?二、内核分类1.宏内核2.微内核3.混合内核4.外内核 前言 这篇记录笔者对操作系统内核学习和整理的感悟 一、内核什么? 要想弄懂操作系统内核什么,先来看一段定义 “内核”指的是...


    前言

    这篇记录笔者对操作系统内核学习和整理的感悟

    一、内核是什么?

    要想弄懂操作系统内核是什么,先来看一段定义

    “内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统一的接口,使程序设计更为简单。

    简单明了用一张图概括
    在这里插入图片描述

    简单来说,内核就是为操作系系统提供驱动、内存管理、网络、IO等功能的软件代码

    二、内核分类

    1.宏内核

    内核的功能都集中在一起,运行在内核进程中,模块之间的交互直接通过方法调用

    2.微内核

    微内核中,内核只提供最核心的功能,如任务调度、内存管理,其他模块都被移除内核,运行在不同进程,这样即使某一个模块出现问题,只要重启该进程即可;但是该种做法需要使用IPC作为进程间通信的方式,进程间的效率较低

    3.混合内核

    宏内核和微内核的结合体,混合内核就是集中了两者的特点,让微内核的一些核心模块运行在内核中,从而使得内核效率更高

    4.外内核

    外内核就是把硬件暴露给应用程序,应用程序可以直接访问硬件,外内核对系统提供保护

    展开全文
  • Linux内核开发-入门篇

    万次阅读 2019-01-09 19:17:18
    如何入门 Linux 内核 首先,让我们看看如何获取、构建并...在我们开始对 Linux 内核做什么之前,我们首先需要先获取它。根据你目的的不同,有两种方式可以做到这一点。如果你只是想更新一下你电脑上的 Linux 内...
  • vscode搭建linux内核开发环境

    千次阅读 2021-02-20 18:13:43
    而且没有原生linux版本,要是想在纯linux环境下进行linux驱动开发,就只能wine+Source insight,而wine版的不好用容易卡死而且cpu占用还高,我就想到用开源跨平台的vscode进行linux内核开发,体验能否和source ...
  • 什么内核

    万次阅读 多人点赞 2018-06-14 06:06:38
    内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。 我们将操作系统的代码分成2部分。内核所在的地址空间称作内核空间。而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理...
  • [野火®]《RT-Thread 内核实现与应用开发实战—基于STM32》 完整版
  • Linux 内核相关视频教程下载链接(70G左右的百度网盘资源)。
  • "还真不对,我们平时说的Linux其实是指Linux内核,而Linux操作系统真正的称呼为GNU/linux操作系统(GNU/linux是指 ,linux内核+GNU组织的软件)。在过去的2021年,Linux内核添加了大量令人兴奋地改进,并引入了新的...
  • 1.由于项目需求,需要更改内核版本并搭建内核开发环境。 当前内核版本 指定内核版本:3.10.0-327.el7.x86_64 2.下载指定内核rpm安装包 下载地址:...
  • 嵌入式系统Linux内核开发实战指南(ARM平台),想看就看吧
  • Linux内核开发_1_编译LInux内核

    千次阅读 多人点赞 2020-05-13 01:23:32
    Linux内核版本: cat /proc/version Linux version 4.15.0-20-generic (buildd@lgw01-amd64-039)\ (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 ...
  • Linux 内核开发

    千次阅读 2018-11-08 23:27:35
    Linux 内核开发 简介 如你所知,我从去年开始写了一系列关于 x86_64 架构汇编语言程序设计的博文。除了大学期间写过一些 Hello World 这样无实用价值的程序之外,我从来没写过哪怕一行的底层代码。那些程序也...
  • windows内核安全与驱动开发光盘

    热门讨论 2015-08-17 14:23:27
    2015年6月出版的《windows内核安全与驱动开发》一书光盘
  • Linux网络内核分析与开发

    热门讨论 2015-03-13 22:12:50
    2.6.8.1的内核讲解(2.6是现代Linux系统的经典)。这本书名气不是很大,远远比不...难度不大,属于基础向,但是最好对网络协议栈的理论知识有一定的认知,并且结合着理论看,才能了解“为什么”而不仅仅是“怎样”。
  • Linux的内核版本是怎么回事

    千次阅读 2021-05-13 14:09:08
    Linux的内核版本编号有点像如下的...Linux的内核版本奇数、偶数版本分类在2.6x版本以前,托瓦斯将内核的发展方向分为两类,并根据这两类内核的发展分别给予不同的内核编号,那就是:主、次版本为奇数:开发中版本如...
  • 什么是微内核,看这一篇就够了

    千次阅读 多人点赞 2021-07-08 10:25:24
    内核是将服务转移到进程上的一种内核模式。宏内核是一种传统的内核结构,它将进程管理,内存管理等各项服务功能都放到内核中去,通常用在通用式的内核上,如unix,linux等。 两个系统的内核是通过进程的创建FORK...
  • Linux 内核和 Windows 内核什么区别?

    万次阅读 多人点赞 2021-02-20 09:46:29
    对于服务器使用的操作系统基本上都是 Linux,而且内核源码也是开源的,任何人都可以下载,并增加自己的改动或功能,Linux 最大的魅力在于,全世界有非常多的技术大佬为它贡献代码。 这两个操作系统各有千秋,不分...
  • VxWorks内核、设备驱动与BSP开发详解

    热门讨论 2011-07-22 21:26:04
    VxWorks内核、设备驱动与BSP开发详解 分为两份
  • 使用VSCode进行linux内核代码阅读和开发

    千次阅读 多人点赞 2021-06-14 19:18:40
    使用VSCode进行linux内核代码阅读和开发现状新的方法安装与配置1.安装VSCode2.安装Remote - SSH插件3.添加远程主机4.安装clangd5.在远程服务器安装bear6.配置clangd7.触发clangd工作效果遇到的问题总结参考链接 现状...
  • 本人是一名C#开发者,而作为C#开发者,客户端应用中最头痛的一件事就是没有一个好的UI解决方案, WinFrom嘛,效率虽然还不错,但是一些特殊的效果,完全应付不来,比如透明控件。比FPS太低有时候界面闪动得厉害。...
  • 鸿蒙系统的微内核什么

    万次阅读 多人点赞 2019-08-27 23:15:50
    ​最近华为高调发布了鸿蒙操作系统(Harmony OS),基于微内核的全场景分布式系统,可以按需扩展,低延时,实现更广泛的系统安全。按照发布会的PPT来看,鸿蒙OS有三层架构,第一层是微内核,第二层是基础服务,第三层...
  • 嵌入式系统Linux内核开发实战指南 ARM平台 王洪辉 2009_12176663.part2.rar 完
  • 什么内核

    千次阅读 2018-04-06 12:15:40
    内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。我们将操作系统的代码分成2部分。内核所在的地址空间称作内核空间。而在内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 479,397
精华内容 191,758
热门标签
关键字:

内核开发是做什么的