首先肯定的一点是:不要一上来就看内核代码,基本上你会很快被挫败感打败。内核正在变得越来越庞大,学习曲线越来越陡峭,当你一无所知的时候冒然进入linux kernel,你会发现处处都是障碍,处处都是大坑,你根本走不下去。最好的方法是把对内核源代码的热情先放在心里,从基本功开始。
OpenHarmony OS 2.0 发布时,标准系统只支持 Hi3516DV300 一种硬件平台,而 Android、IOS 均提供了模拟器供开发人员使用。这也可以理解,毕竟华为长期以来都是设备供应商,专长是硬件,在软件开发方面缺少底蕴。鸿蒙应用开发提供了模拟器,但那是真机模拟器,需要接入到华为的开发平台才能使用。
对于GRUB来说,如果没有配置menu.lst,无论是Linux版本的GRUB,还是WINGRUB,都会有命令行可用,通过命令行是一样能把操作系统引导起来的;有些弟兄总以为menu.lst 配置错了, 或者在机器启动后出现grub>命令行模式就要重新安装系统,其实根本没有这个必要;只要学会GRUB的命令行的用法,根本没有必要重装系统;
Linux 的内核源代码可以从网上下载,解压缩后文件一般也都位于linux目录下。内核源代码有很多版本,可以从linux0.01内核入手,总共的代码1w行左右,最新版本 5.9.8总共代码超过700w行,非常庞大.
在计算机系统中,CPU的功能是执行程序,总结起来就是我们在教科书上学到的:取指、译码、执行。那么问题来了,如果没有程序要执行,CPU要怎么办?也许您会说,停掉就是了啊。确实,是要停掉,但何时停、怎么停,却要仔细斟酌,因为实际的软硬件环境是非常复杂的。
Linux 严格意义上说的是一个操作系统,我们称之为 “ 核心( kernel ) “ ,但我们一般用户,不能直接使用 kernel 。
本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好,推荐观看
本文主要介绍beaglebone的开发过程与启动方式。同时将一套嵌入式Linux开发环境搭建起来。以便于更好的掌握和理解beaglebone AI的使用。工欲善其事,必先利其器,搭建好完整的开发环境,后续的工作才能更好的开展起来。要想用好一款芯片,也需要很好的理解其启动方式。下面来实际的展示操作流程。
关于作者:王录华 (luhua.wang@oracle.com), 高级经理 - 系统架构和性能服务, Oracle
Torvalds 本人不太想看到typedef文化占上风,但是维护自己代码的人通常有最后的发言权。
系统的异常级别对于arm芯片来说非常的重要,对于操作系统层面上来说,理解芯片的体系架构,将很容易的进入状态,随心所欲的去玩转芯片,对于做应用来说,熟悉芯片的体系架构,可以解决非常棘手的问题,比如系统的安全还有就是实时性响应问题。比如我们的手机指纹加密数据,实际上是在安全模式下的,此时对于运行在非安全模式下的操作系统,其实是获取不到指纹的数据的,只是处理安全模式下发送过来的结果,类似的还有支付安全。
http://bbs.chinaunix.net/thread-2083672-1-1.html
本文旨在介绍下几种常见的调试方法gdb、crash、kgdb and kdb 以及dynamic debug. 关于在 Linux 内核上使用debuggers,Linus Torvalds 长期以来对它们不太喜欢。简短地解释这种态度是,依赖调试器可能鼓励用权宜之计而非深思熟虑来解决问题,这会导致代码质量恶化。详细解释可以参考https://lwn.net/2000/0914/a/lt-debugger.php3
提醒:本文已有自动构建的项目支持,请移步到:再续【从零使用qemu模拟器搭建arm运行环境】
QOS为Quality Of Service(服务质量)的简称,对PM QoS而言,表示Linux kernel电源管理相关的服务质量。那到底什么是服务质量呢?
less 命令支持 vim 的操作模式,可以使用 h/j/k/l 等键进行上下左右移动。
第一种方法纵向或者横向来读都可以,因为代码量不是很大。《linux内核完全剖析》《linux内核完全注释》是引导你横向阅读的书,《linux内核设计的艺术》是引导你纵向阅读的书。建议横向纵向结合着来,纵向跟着bochs调试工具来是必不可少的,当遇到问题时进入到相应的功能模块横向拓展一下。
微星笔记本(SMI)相对于常规的GPU服务器要便携很多,对于需要经常搬动的场景,确实很适用。但毕竟微星笔记本定位是玩游戏的,不是做linux服务器,所以尝试把它变成GPU服务器的过程遇到不少坑,这里记录下相关经验。
踏上 Linux 内核世界的探险将成为您职业生涯的一段迷人旅程。作为操作系统之心的 Linux 内核涵盖众多领域,如操作系统原理、硬件抽象以及驱动开发等。在这篇文章中,我们将一探 Linux 内核的奥秘,并为具备编程基础的技术人员提供一处学习起点。
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
最新 Linux 内核是 5.15 版本。现在常用 Linux 内核源码为4.14、4.19、4.9 等版本,其中 4.14 版本源码压缩包大概 90+M,解压后 700+M,合计 61350 个文件。如此众多的文件,用 source insight 或者 VSCode 查看都会比较卡,所以可以采用在线查看的方式。
Petalinux可以帮助工程师简化内核模块的创建工作。在petalinux工程目录下,使用命令“petalinux-create -t modules --name --enable”,能创建Linux内核模块,包括c源代码文件、Makefile、Yocto的bb文件。相关文件放在目录“project-spec/meta-user/recipes-modules”,目录结构如下。
Linux严格意义上来说是一个操作系统,我们称之为 “核心 (kernel)”,即Linux内核;但是由于我们一般人并不善于与 kernel 打交道,所以我们不直接使用 kernel,而是通过 kernel 的 “外壳” 程序,也就是所谓的 shell 来与 kernel 进行沟通;
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014688145/article/details/50575588
在前面的文章《Linux进程是如何创建出来的?》 和 《聊聊Linux中线程和进程的联系与区别》 中我们都讲过了,进程和线程在创建出来后会加入运行队列里面等待被调度。
国外的Qualys 研究团队在 sudo 发现了堆溢出漏洞,sudo是一种几乎无处不在的非常实用程序,可用于大型 Unix 类操作系统(类似与windows的UAC功能,但是功能更加强大,它还允许用户使用其他用户的安全权限运行程序,不仅限于管理员哟)。
前面我们了解到了0号进程是系统所有进程的先祖, 它的进程描述符init_task是内核静态创建的, 而它在进行初始化的时候, 通过kernel_thread的方式创建了两个内核线程,分别是kernel_init和kthreadd,其中kernel_init进程号为1
本 文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual FilesystemSwitch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux内核中 VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释Linux 下的 VFS文件系统机制,所以在叙述中更侧重于整个模块的主脉络,而不拘泥于细节,同时配有若干张插图,以帮助读者理解。
跟我一起来到故事开始的地方,深入 Linux 系统的启动流程,自己编译内核并制作根文件系统,并使用 QEMU 模拟启动。
前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。 不过,PFRA和常规的算法不同。比如说冒泡排序或者快速排序具有固定的时间复杂度和空间复杂度,代码怎么写都差不多。而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page
Linux kernel在自身初始化完成之后,需要能够找到并运行第一个用户程序(这个程序通常叫做“init”程序)。用户程序存在于文件系统之中,因此,内核必须找到并挂载一个文件系统才可以成功完成系统的引导过程。
前段时间有个刚开始学习 Arm Linux 的同学问我:对于还处于入门阶段的新手,有什么建议。并让我推荐一些好的书籍。
前言:本篇开始我们要对Linux进行更深入的学习了,让我们来进入新篇章:Linux的权限理解!
Rust for Linux 这个项目的目的就是为了将 Rust 引入 Linux,让 Rust 成为 C 语言之后的第二语言。但它最初的目的是:实验性地支持Rust来写内核驱动。
对于Linux爱好者,你是否也有这样的困扰,为了学习Linux而去购买昂贵的开发版,这大可不必,QEMU模拟器几乎可以满足你的需求,足够你去学习Linux,它能够模拟x86, arm, riscv等各种处理器架构,本文将向你呈现的不是QEMU/虚拟化的原理解读,而是如何搭建一个用于学习linux的QEMU环境,当然对于Linux内核的学习这已经足够了。
作为一名程序员,肯定不仅仅限于使用API文档,因为浮于表面是远远不够的。进阶学习的阶段,需要我们保持一颗好奇的心,深入阅读Android源码,学习优秀的代码风格和设计思想,知其然并且知其所以然。
在正式部署前,你可以先阅读前置准备,对部署过程中用到的docker、redis操作和配置有一个理解,以防在自己电脑上复现时出错。 我们将在一台windows10机器上运行多个docker容器,配置Redis主从集群。
这本书属于学习Linux内核原理必读推荐书目之一!对Linux内核的设计原理进行了细致的说明,也有具体实现部分的介绍,结合源码能很好的理解Linux内核;
内存虚拟化是一个很大的话题,最近安全部门发现了一个qemu内存虚拟化的安全漏洞,反馈给云平台让解决,感觉很棘手,引起了我对内存虚拟化的思考,想到什么问题就把思考记录下来。
最近在基于openwrt盒子实现一个业务引流的方案,涉及到很多linux系统NetFilter,、IP Tables and Conntrack的理解和简单使用。由于没有相关使用和开发经验查找了大量的资料,这里总结一下。 1、linux kernel doc文档查找链接--下面一tun/tap介绍为例: https://www.kernel.org/doc/Documentation/networking/tuntap.txt 或者下面网页方式: https://www.kernel.org/doc/html/latest/networking/tuntap.html 2、Linux NetFilter, IP Tables and Conntrack Diagrams关系图--这个还是非常不错的。 https://gist.github.com/nerdalert/a1687ae4da1cc44a437d
第二次写这类博客,之前还是求职期间写的面试之类的经历。下面是做高通安卓驱动的感言。 同一时候献给择职想做驱动的參考。
start_kernel是内核启动阶段的入口,通过单步调试,可以发现它是linux内核执行的第一个init,我们单步进入看看它做了哪些操作:
前阵计划在Thinkpad E490笔记本电脑上安装多系统(Windows、CentOS、Kali),用作技术研究。
Kernel (内核)是操作系统的核心,掌握所有硬件设备的控制权,也就是说,你所希望计算机帮你完成的各项工作,都需要通过内核的帮助才能完成,当然,如果我们想完成的某个功能是内核没有的,则内核不会操控计算机来帮你完成这项工作,如果我们想让内核去完成这个功能,那么我们就必须将该功能的模块添加到内核当中,这就类似于驱动程序,有了这样一个“驱动程序”的支持后,我们的硬件才能完成之前所不能完成的功能。
常用的基本指令已经讲解完毕啦:探索Linux世界:基本指令(文件查看、时间相关、grep、打包压缩及相关知识)
负载是查看 Linux 服务器运行状态时很常用的一个性能指标。在观察线上服务器运行状况的时候,我们也是经常把负载找出来看一看。在线上请求压力过大的时候,经常是也伴随着负载的飙高。
Rockchip 在江湖中简称 RK,是一家总部坐落于福建福州的 SOC 设计公司。
领取专属 10元无门槛券
手把手带您无忧上云