Fork me on GitHub
摘要: kernel本身就是个multithread concurrent的系统。在没有适当条件保证下,存取共享资源很容易发生race condition.共享资源包括周边IO及共享内存中的数据结构等。可通过适当的synchronization机制提供critical section来保证资源的存取。个人认 阅读全文
posted @ 2022-01-23 16:49 BabyMelvin 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1.内存屏障 内存屏障的作用:内存屏障主要解决的问题是编译器的优化和CPU的乱序执行 基本的内存屏障有4种: 1.写屏障 2.数据依赖屏障(常与写屏障成对出现) 3.读屏障 4.通用内存屏障 1.1 代码优化 编译器会对c语言进行代码优化,生成的汇编语言可能和c语言执行顺序不一样。在需要严格按照c语 阅读全文
posted @ 2022-01-23 16:35 BabyMelvin 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 1. asm格式 GNU的C编译器使用asm关键字:asm段格式如下: asm ("assembly code"); 一些汇编器使用制表符字符缩进指令以便区分和标签。GNU编译器不需要这样做,单为保持一致使用这样方式。 asm("mov $1, %eax\n\tmov $0, %ebx\n\tint 阅读全文
posted @ 2021-11-14 19:58 BabyMelvin 阅读(513) 评论(0) 推荐(0) 编辑
摘要: ARM汇编语言源程序语句:一般由指令,伪操作,宏指令和伪指令组成. ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令. 目前常用的ARM编译环境有2种: ARMASM: ARM公司的IDE中使用了CodeWarrior的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM 阅读全文
posted @ 2021-11-14 17:16 BabyMelvin 阅读(845) 评论(2) 推荐(1) 编辑
摘要: 1.从 System.map 文件中直接得到地址 内核镜像的 System.map 文件存储了内核符号表的信息, 可以通过此文件获取到具体的信息 查看内核函数的地址 grep perf_trace_do_sys_open /boot/System.map-4.4.0-72-generic 查看地址对 阅读全文
posted @ 2021-10-24 22:16 BabyMelvin 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 1. printk输出函数 多年工程经验看,printk()最简单有效的调试方法。 printk默认的配置实在配置文件中CONFIG_MESSAGE_LOGLEVEL_DEFAULT 4 通常高于这个值才会输出到控制台或者串口。可以通过如下几种方式修改: 可以手动修改内核为: <arch/arm64 阅读全文
posted @ 2021-10-24 21:39 BabyMelvin 阅读(864) 评论(0) 推荐(0) 编辑
摘要: 介绍 kernel有很多的同步和异步机制,做简单整理,力求能够熟练使用。 1.同步机制 并发:多个执行单元同时被执行 竞态:并发的执行单元对共享资源(硬件资源和软件上的全局变量等)的访问导致竞争状态。 并发与竞态。 假设有2个进程试图同时向一个设备的相同位置写入数据,就会造成数据混乱。处理并发常用的 阅读全文
posted @ 2021-10-24 21:26 BabyMelvin 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 1.内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,多线程化是必要的。 内核线程就是内核的分身,一个分身可以处理一件特定事情。Linux内核使用内核线程来将内核分成几个功能模块,像kswapd、kfl 阅读全文
posted @ 2021-10-24 21:23 BabyMelvin 阅读(642) 评论(0) 推荐(1) 编辑
摘要: Linux各种栈 进程栈、 线程栈、 内核栈、 中断栈 1.栈是什么?栈有什么作用? 首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 阅读全文
posted @ 2021-10-24 20:24 BabyMelvin 阅读(188) 评论(0) 推荐(1) 编辑
摘要: ARM linux启动流程 对于不同体系结构的处理器来说Linux的启动过程也有所不同。以S3C2410 ARM处理器为例,详细分析了系统上电后 bootloader的执行流程及 ARM Linux的启动过程。 1.引言 一个嵌入式 Linux 系统从软件角度看可以分为四个部分: 引导加载程序(bo 阅读全文
posted @ 2021-10-24 10:35 BabyMelvin 阅读(973) 评论(0) 推荐(0) 编辑