摘要: ARM32位系统的内存布局图 32位操作系统的内存布局很经典,很多书籍都是以32位系统为例子去讲解的。32位的系统可访问的地址空间为4GB,用户空间为1GB ~ 3GB,内核空间为3GB ~ 4GB。 为什么要划分为用户空间和内核空间呢? 一般处理器会把运行模式分为好几个,比如x86分为rang0 阅读全文
posted @ 2024-06-10 13:17 学习,积累,成长 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 页表的一些术语 现在Linux内核中支持四级页表的映射,我们先看下内核中关于页表的一些术语: 全局目录项,PGD(Page Global Directory) 上级目录项,PUD(Page Upper Directory) 中间目录项,PMD(Page Middle Directory) 页表项,( 阅读全文
posted @ 2024-06-10 13:05 学习,积累,成长 阅读(354) 评论(0) 推荐(1) 编辑
摘要: 快速范围判断 经常要批量判断某些值在不在范围内,如果 int 检测是 [0, N) 的话: if (x >= 0 && x < N) ... 众所周知,现代 CPU 优化,减分支是重要手段,上述两次判断可以简写为: if (((unsigned int)x) < N) ... 减少判断次数。如果 i 阅读全文
posted @ 2024-06-10 12:58 学习,积累,成长 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 调试是每个程序员都逃不过的宿命! 程序调试是一件非常考验耐心的事情,因为调试过程中经常会需要反复的修改源码,重新编译、重新部署、重新运行,这个过程通常是非常枯燥和繁琐的。尤其对于大型项目,光是编译可能需要几十分钟,甚至几个小时,部署过程则可能更为复杂漫长! 那么,有没有一种更高效的调试手段,可以避免 阅读全文
posted @ 2024-06-10 12:57 学习,积累,成长 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 环境: 处理器架构:arm64 内核源码:linux-6.6.29 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 本文主要介绍内核开发中常用的模块传参手段,通过模块参数传递可以通过用户态来获取内核的一些信息,也可以通过用户态写入一些值来控制内核相关行为。一般内核开 阅读全文
posted @ 2024-06-10 12:56 学习,积累,成长 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 做嵌入式系统软件开发,经常在代码中看到各种各样的对齐,很多时候我们都是知其然不知其所以然,知道要做好各种对齐,但是不明白为什么要对齐,不对齐会有哪些后果,这篇文章大概总结了内存对齐的理由。 CPU体系结构和MMU的要求 目前有一些RISC指令集的CPU不支持非对齐的内存变量访问操作,比如 MIPS/ 阅读全文
posted @ 2024-06-10 12:55 学习,积累,成长 阅读(121) 评论(0) 推荐(0) 编辑