大家好,今天小编关注到一个比较有意思的话题,就是关于linux内核该如何学习的问题,于是小编就整理了4个相关介绍Linux内核该如何学习的解答,让我们一起看看吧。
- 如何学习android上的linux kernel,从哪学起,怎么样循序渐进地看不同的部分?
- 我想学习x86下的linux内核,该怎么起步?
- Linux内核是如何创建线程的,它与windows有哪些不同?
- 可以从哪些方面学习Linux?
如何学习android上的linux kernel,从哪学起,怎么样循序渐进地看不同的部分?
不清楚楼主从事哪方面的工作,一般做Android系统剪裁或者驱动开发, 需要学习内核部分。
1. 研究一下linux内核 0.1版
此版是学习linux系统原理的经典,只有几百K。
通过此版的研究(虽然功能单一),你能对操作系统有进一步的理解。
2. 研究Android内核
从加电power on启动流程分析 入手,然后到init进程,然后到binder,匿名内存共享等学习。
一步一个脚印,做好笔记,提升肯定会很快。
▲这里本人推荐一本关于学习人工智能机器人存操作程序步骤的书籍,你可以循序渐进的学习。本书由工程师撰写,介绍机器学习中需要的主要数学知识,以及机器学习算法的和应用场景,为机器学习初学者制定了如何夯实基础的方案。本书以机器学习的算法为主线,深入剖析算法的概念和数学原理,以通俗形象的语言进行介绍,让读者无需了解太多前置数学知识,就能看懂数学公式的表达意思,从而深度掌握机器学习的思想和原理。主要内容包括:首先介绍机器学习基本概念及工具,然后从概念、原理、python实现、应用场景几个方面,详细剖析机器学习中主要的算法,如线性回归算法、逻辑回归算法、KNN、木素贝叶斯、决策分类、支持向量机分类、K-means聚类、神经网络分类、集成学习等。
▲这是一本介绍机器学习的书,按常理来说,我应该首先介绍学习机器学习的重要性。可是,有必要吗?我记得约五年前,机器学习还是一个很有科幻色彩的术语,而现在技术学习圈几乎整版都换成了机器学习的各种模型,国内很多大学已经开始设立人工智能,机器学习当仁不让地成为核心课程。据说相关学者已经将该知识编制成课本,即将走入中学课堂。机器学习的火热,连带着让长年不温不火的Python语言也借机异军突起,甚至掀起一阵Python语言的学习热潮。机器学习已经成为“技术宅”的一种技能,因此,实在没必要再占篇幅介绍它的重要性。但是,学习机器学习的路途是坎坷和颠簸的,不缺的就是让你半途而废的借口。机器学习的成就是站在巨人的肩膀上取得的,因此,当你终于下定决*习机器学习时,很多人给你开出一串长长的学习清单:机器学习涉及大量向量和矩阵运算,所以线性代数是肯定要学的;机器学习的很多模型算法都以统计知识作为背。
我想学习x86下的linux内核,该怎么起步?
如何学习内核及编程,我觉得可以从内核的引导启动开始:
1.不防从引导程序(bootloader)开始,可以选择u-boot,熟悉u-boot启动代码,比如初始化内存、启动的汇编代码是如何跳转至C程序的、bootloader引导Linux有哪些要求(基于CPU架构不同而不同,比如ARM引导Linux可参考《Booting ARM Linux》)、启动后是如何传递参数给Linux内核的、;
2.bootloader将内核映像载入物理内存后,压缩的内核映像是如何自解压、head.S[_a***_]中对MMU操作、单/多核是如何跑起来的、start_kernel;***w.内核引导启动这个过程建议结合一些操作系统的理论知识一起熟悉,比如MMU页表的建立,若不熟悉对应CPU架构下的MMU,即使懂汇编但代码看起来可能比较吃力。
熟悉内核的引导过程,个人觉得将大学时学的操作系统理论知识与实践相结合起来了,好多上学时模糊的概念一下清晰了许多。
接下来再来说下内核编程:
1.make menuconfig等配置内核,构建及更新内核;
2.熟悉内核Makefile文件;
3.从Hello World开始学习模块编程,熟悉file_operations尝试编程简单的驱动;
4.掌握(熟悉使用、区别)内核提供竞争方面的API,spinlock/semaphore/rw_semaphore/completion/rw_lock/mutex,以及RCU等;
5.内核态下动态内存API,get_free_pages/kmalloc/vmalloc等(关于内存管理这块可暂时先了解接口的使用,后续有精力再去熟悉Linux内存管理,里面太多东西太复杂了,呵呵,我也是略知皮毛);
Linux内核是如何创建线程的,它与windows有哪些不同?
首先关于内核心进程创建,涉及到底层的东西,个人认为没必要太深入,了解他是怎么实现的就可了,如果确实要深入理解,那就得去看源码了。
1.Linux 进程创建:Linux继承了UNIX的进程创建方式,用的是fork API函数,什么是fork呢,就是先clone然后在分支,父子进程各干各的。
2.Windows
进程创建:Windows没有fork,但是有CreateProcess这个API函数,用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。可以从哪些方面学习Linux?
Linux的学习方向大致分为3个,可以做运维工程师,可以做嵌入式开发工程师,再就是在linux下开发项目。
运维工程师主要就是指linux服务器维护,像服务器规划、调优、系统监控、日志分析、数据备份等,这种通常就需要有web开发的经验了,会开发才知道服务器上需要跑什么软件、需要监控哪些运行指标、哪些数据需要备份。
嵌入式开发就是开发linux上一些驱动之类的,C语言、数据结构算法、linux基础、内核之类的都是要学的。
在linux下开发项目就比较简单了,把linux当成其他语言的开发环境而已,主要是学语言,如java,python,大数据等等。
要想回答学习Linux后主要从事哪些方面工作的问题,主要还是要看目前linux的应用领域。就目前的现状来看,linux主要的应用领域还是在服务器和嵌入式方面。目前我所了解的国内学习Linux的主要从事如下几个方面的工作:
一个是嵌入式开发;
一个是后台开发;
另一个是网站服务器运维;
而单纯的从事linux内核开发的,目前国内相对比较少一些,在基础软件设施研发方面目前咱们国家还处在相对薄弱的阶段。
至于学习linux可以从哪些方面入手,这个问题可以找本市面上比较主流的书籍,翻开目录,就能看到linux主要学习哪些方面的知识了。这里以《鸟哥的linux私房菜为例》,我们看目录就可以看出linux的学习主要包括如下几个方面:
2.学习linux系统的安装;
3.学习文件和目录管理相关的命令;
linux系统的学习,分为几大块。首先你需要了解的是linux的历史,它发展到现在经过了几代系统,每代系统各有什么特点。第二就要从系统本身入手,选择你要学习的系统版本,然后开始学习系统的安装,系统内部的文件***管理器,这其中又包含linux的文件权限和目录两大功能。接下来就是进阶了,linux的重点,也就是linux的shell编程,比如搭建一个环境,linux的父子进程是怎么运行的,与windows的进程有什么区别。因为linux图形界面用的较少,所以你必须掌握命令行语句。同时linux的一大优势,linux用于服务器的搭建,学会如何用linux架设服务器也是非常重要的。最后是我的一点私人建议:linux可以像QQ一样建立单对单通信,使用socket编程,这也是非常重要的。还有linux的tftp服务,建立与windows系统的文件传输,这个将会让你体会到linux的优势。
到此,以上就是小编对于linux内核该如何学习的问题就介绍到这了,希望介绍关于linux内核该如何学习的4点解答对大家有用。