![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核学习
文章平均质量分 86
ddddfang
这个作者很懒,什么都没留下…
展开
-
树莓派3b+学习linux内核
Step 1下载 2020-02-13-raspbian-buster.img(地址)并使用rasp Imager将其烧录到sd卡。这个版本的系统貌似默认使用kernel7.img,不放心可以在/boot/config.txt中添加kernel=kernel7.imgStep2安装必要的包sudo apt-get updatesudo apt-get install bc build-essential git unzipsudo apt-get install kernel-p..原创 2022-04-24 14:41:55 · 1420 阅读 · 1 评论 -
debugfs
在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设备号次设备号等等,只需要实现一个file_operations,然后通过debugfs_create_file就可以在debugfs中建立一个文件结点,就像字符设备驱动那样,只需要对这个文件结点进行open就可以进行read、write、ioctl,等等操作,这些操作对应到我们在驱动里为debugfs准备的file_operations。让内核支持DEBUGFS,使能宏CONFIG_DEBU转载 2022-04-21 22:06:16 · 1397 阅读 · 0 评论 -
qemu嵌入式环境
00. 编译qemu安装依赖,主要是交叉工具链,编译uboot、kernel时用(我ubuntu主机中有一个for arm-cortex-a64的交叉编译工具链aarch64, 有一个for arm-cortex-m的交叉编译工具链, 可以在docker中安装一个 for arm-cortex-a32 的交叉编译工具链 arm-linux-guneabi-gcc)apt-get updateapt-get install vim bc build-essential gcc-arm-linu..原创 2021-03-13 17:23:11 · 596 阅读 · 1 评论 -
下载linux内核源码并编译替换到ubuntu中使用
uname -a 查看自己的ubuntu使用的内核版本去这里下载内核源码,https://www.kernel.org/pub/linux/kernel/。稳定起见选择和自己内核相近的版本或者直接 sudo apt-get install linux-source-4.15.0 (这里选择版本的时候选择相近的版本) 将源码下载到 /usr/src/linux-source-x.x.x/完成后解压缩源码包安装配置内核的必要软件包apt-get install libssl-dev libn...原创 2020-11-14 22:05:38 · 968 阅读 · 0 评论 -
08.linux内核驱动架构
.ko文件的数据组织形式是elf格式(可重定位目标文件,executeable and linkable format)。如下图(忽略了program header table),摘自《深入linux设备驱动程序内核机制》p19字符设备的 file_operations 直接由字符设备驱动提供,file_operations 也正是字符设备驱动的核心。块设备有两种访问方法。一种是不通过文件系...原创 2019-04-01 13:24:14 · 1223 阅读 · 0 评论 -
07.linux内核同步
等待队列当某个进程执行需要等待某个事件ready后才可以继续时,可以在此阻塞(进入休眠状态,并在适当的时候唤醒,涉及到进程的调度和进程状态的转换)。内核提供了等待队列来完成阻塞式 IO,等待队列是内核基于更基础的 互斥机制+进程调度 来实现的。eg.内核驱动read/write()例程在设备状态尚未ready时,应该检查 filep->f_flags 上的O_NONBLOCK位是否有设...原创 2019-04-01 13:09:44 · 129 阅读 · 0 评论 -
06.linux内核中断
<深入linux设备驱动内核机制 ch.6>处理器在中断到达时会根据不同的中断号找到对应的处理函数(中断处理例程 ISR)对该信号进行处理。设备驱动程序负责为管理的设备提供中断处理例程并向系统注册。CPU本身的外部中断引脚通常只有一到两根,众多的外部中断 IO 通过可编程中断控制器 PIC 统一管理接到 CPU。现代的一些嵌入式 MCU 通常将 PIC 集成在 SOC 内部。对 P...原创 2019-04-01 11:08:31 · 145 阅读 · 0 评论 -
05.linux内核之mmap
http://www.cnblogs.com/huxiao-tee/p/4660352.htmlmmap基础概念如果没有mmap,只有ioremap:那么将内核空间虚拟地址映射到物理内存/设备内存后,这段虚拟内存若想被用户空间使用,必然存在一个"从内核空间向用户控件内存拷贝"的过程。(深入linux设备驱动内核机制ch10.)malloc一般就是通过系统调用brk()+mmap()实现的...转载 2019-04-01 11:04:29 · 857 阅读 · 0 评论 -
04.linux内核vfs与文件读写
来自<http://www.cnblogs.com/huxiao-tee/p/4657851.html>1、系统调用操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行。处理器设有两种模式:“用户模式”与“内核模式”。一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I...原创 2019-04-01 10:56:54 · 704 阅读 · 0 评论 -
03.linux内存管理
linux内存管理分为 物理内存管理和虚拟内存管理两大类。物理内存定义方面,引入概念:1、内存节点(node,同一内存节点具有相同访问特性 eg.访问速度,一致内存访问UMA模型只有一个内存节点,非一致内存访问NUMA模型含多个内存访问节点)2、内存区域(zone,ZONE_DMA为某些DMA设备优先使用的低端内存区域、ZONE_NORMAL可以为内核虚拟地址永久线性映射的一段...原创 2019-04-01 10:46:16 · 260 阅读 · 0 评论 -
02.linux内核CFS(完全公平调度算法)
inux内核分析——CFS(完全公平调度算法)1.1CFS原理cfs定义了一种新的模型,它给cfs_rq(cfs的runqueue)中的每一个进程安排一个虚拟时钟,vruntime。如果一个进程得以执行,随着时间的增长(也就是一个个tick的到来),其vruntime将不断增大。没有得到执行的进程vruntime不变。而调度器总是选择vruntime跑得最慢的那个进程来...转载 2019-04-01 10:37:12 · 189 阅读 · 0 评论