综合能力训练:在树莓派上动手写一个小OS(2):实验16-1:输出welcome benos
本文节选自《奔跑吧linux内核 入门篇》第二版第16.2.1章和笨叔一起玩树莓派,动手写BenOS!实验16-1:输出“Welcome BenOS!”1.实验目的1)了解和熟悉ARM64汇编。2)了解和熟悉如何使用QEMU和GDB调试裸机程序。2.实验要求1)编写一个裸机程序并在QEMU模拟器中运行,输出“Welcome BenOS!”字符串。2)在树莓派上运行编译好的裸机程序。3.实验详解由于
进程调度案例分析与常见疑惑1:为何不能调度?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第9.3.5章现在JD有半价抢购活动,如果您觉得本文还可以,千万不要错过哟!https://item.jd.com/13051268.html1. 问题引入假设Linux内核只有3个内核线程(见图9.15),0号线程创建了内核线程1和内核线程2,它们永远不会退出。当系统时钟中断到来时,时钟中断处理函数会检查是否有进程需要调
综合能力训练:在树莓派上动手写一个小OS(1):实验前准备
本文节选自《奔跑吧linux内核 入门篇》第二版第16章学习操作系统最有效且最具有挑战性的训练是从零开始动手写一个小OS(操作系统)。目前很多国内外知名大学的“操作系统”课程中的实验与动手写一个小OS相关,比如麻省理工学院的操作系统课程采用xv6系统来做实验。xv6是在x86处理器上重新实现的UNIX第6版系统,用于教学目的。清华大学的操作系统课程也采用类似的思路,他们基于xv6的设计思想,通过实
进程调度案例分析与常见疑惑2:为啥fork之后有两个返回值?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第7.3.6章在用户空间可以使用fork()接口函数来创建一个用户进程,或者使用clone()接口函数来创建一个用户线程,它们在内核空间都是调用_do_fork()函数来实现的。读者常常会对_do_fork()函数的返回感到疑惑,例如以下两个问题。1. 以fork()接口函数为例,为什么会有两次返回?其中父进程的返回值是子
关于vim看linux 内核源代码时的代码补全
有小伙伴昨天问笨叔,我按照入门篇第二版第2.5章的内容来配置vim,使用vim看linux 内核源代码的时候,代码补全咋没有出来呢? 大家可以尝试下面的方法来补救一下:1)安装python-is-python3。YCM默认使用python3$ s
一个有趣的文件系统实验
本文节选自《实验指导手册》第二版第14.1章,下载《实验指导手册》:登陆“奔跑吧linux社区”微信公众号,输入“奔跑吧2”获取下载地址。有趣的文件系统实验入门篇第二版第14章是新增的一章,讲文件系统相关的入门知识。实验14-1非常有趣,群里有小伙伴问笨叔,这个实验怎么做啊?这个实验是这样的:使用dd命令创建磁盘文件file.img并格式化为ext2文件系统,然后通过mout命令挂载到Linux主
内存管理实战案例分析1:缺页异常和文件系统引发的宕机
微信公众号:[奔跑吧linux社区]本文节选自《奔跑吧linux内核》第二版卷1第6.3章1.问题描述阿里工程师在Linux 5.0内核开发期间报告了一个宕机现象,https://lore.kernel.org/linux-ext4/1540858969-75803-1-git-send-email-bo.liu@linux.alibaba.com/从内核日志信息来看,有两个线程发生了死锁的情况。
ARM64的函数调用标准和栈布局
欢迎订阅奔跑吧linux社区微信公众号本文节选自《奔跑吧Linux内核》第二版卷1第1.6章函数调用标准(Procedure Call Standard,PCS)用来描述父/子函数是如何编译、链接的,特别是父函数和子函数之间调用关系的约定,如栈的布局、参数的传递等。每个处理器架构都有不同的函数调用标准,本章重点介绍ARM64的函数调用标准。ARM公司有一份描述ARM64架构函数调用的标准和规范文档
进程调度案例分析:为何不能调度?
微信公众号:奔跑吧linux社区本文节选自《奔跑吧linux内核》第二版卷1第9.3.5章现在JD有半价抢购活动,如果您觉得本文还可以,千万不要错过哟!https://item.jd.com/13051268.html1. 问题引入假设Linux内核只有3个内核线程(见图9.15),0号线程创建了内核线程1和内核线程2,它们永远不会退出。当系统时钟中断到来时,时钟中断处理函数会检查是否有进程需要调
一道骚面试题目
前几天有一个小伙伴和笨叔抱怨,最近去某个互联网大厂面试,遇到一道骚题目,题目是这样的:在arm64 SMP系统里,执行如下代码片段,a和b的初始值都为0.CPU0先执行了a=1和b=1,然后CPU1执行while的判断语句,最后执行assert()语句,请问,有没有可能assert会失败?如何fix?这位小伙伴和面试官说,有可能是CPU0执行了乱序,比如CPU乱序或者编译器乱序导致的。面试官说,这
笨叔:ARM64体系结构与编程之cache必修课(上)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系
笨叔:ARM64体系结构与编程之cache必修课(中)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系
笨叔:ARM64体系结构与编程之cache必修课(下)
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系
arm64的mov指令,简单而不简单
第三季视频课程ARM64体系结构与编程之cache基础知识(1)为什么系统软件人员要深入了解cache?在一个系统中,cache无处不在,对于一个系统编程人员来说,你无法躲藏。下图是一个经典的ARM64系统的架构图,由Corte-A72和Cortex-53组成了大小核架构,每个CPU核心都有L1 cache,每个cluster里共享一个L2 cache,另外还有Mali GPU和DMA外设。对于系
第15课-ARM64内存管理MMU
第三季的第15节课开始和大家介绍ARM64内存管理MMU的相关知识。这节课的主要内容包括: 本科操作系统课程中和内存管理相关的基本知识ARMv8中内存管理的相关知识点Linux内核页表建立的代码7个相关的MMU的实验
如何让树莓派4上固件的debug日志输出到串口?
第三季奔跑吧旗舰篇视频课程: arm64体系结构与编程 2020年10月1号重磅上线笨叔带队,以练带学,几十个实验,等您来撸!树莓派4上的FW我们玩过树莓派的小伙伴都知道,树莓派4上有几个固件,我们是需要把这些固件拷贝到MicroSD卡里的,这些固件包括如下几个文件。bootcode.bin:引导程序。树莓派复位上电时,CPU处于复位状态,由GPU来负责
大陷阱:我可以把adrp指令换成ldr伪指令吗?
arm64里的adrp和ldr伪指令的区别,这是个大坑和陷阱。在linux内核的汇编启动代码里,下面的指令能否把adrp改成ldr,为什么呢?上面是linux 5.0内核的启动汇编代码,小明同学试着把上面的第一处修改了,重新编译内核,发现能跑。然后修改第二处,重新编译内核,发现不能跑了,这是为啥呢?小明:为啥enable mmu之后可以,enable mmu之前不行么?笨叔…笨叔:建议你先做第三季
使用JLINK仿真器调试树莓派4
学习armv8,怎么能没有开发板呢?有的小伙伴说,我可以用QEMU啊?笨叔要很负责任的说,QEMU不能100%地模拟armv8的硬件行为,有不少地方QEMU模拟不出来的,所以还是需要一个真实的硬件板子。例如下面的2个例子, QEMU能跑,但是在树莓派上跑却跑飞了。所以,使用真实的物理板子是有必要的。其中树莓派4就是一个优秀的代表,4核cortext-A72的IP核心,高端上档次。而且价格超级便宜,
[首发][Ubuntu]VSCode搭建Linux Kernel单步调试IDE环境
编者荐语:推荐使用vscode来单步调试奔跑吧内核,在按F5单步之前,请先设置断点,例如在start_kernel函数设置断点,直接在源代码左侧点击左键即可。以下文章来源于弹指码通 ,作者弹指神通弹指码通.自博客平台:jackeyt.cn 原创技术分享,涵盖AI、端到端、边缘计算、ARM、嵌入式Linux、OpenCV、嵌入式端AI模型剪枝、量化继上一篇介绍纯Win10下 VS
Linux内核内存管理总结
微信公众号:奔跑吧linux社区加奔跑吧微信群请先加微信:runninglinuxkernel欢迎订阅奔跑吧配套旗舰篇视频节目:https://weidian.com/?userid=1352872851这篇对《奔跑吧Linux内核》第一版的内存管理 做了很棒的笔记和总结。《奔跑吧Linux内核》第一版各大书店有售。这篇文章作者是:Arnold Lu@南京原文:https://www.cnblog