![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 63
a珍爱上了a强
专注技术追求
展开
-
pcie简介
每个PCIE设备都有自己的独立的一段配置空间,该部分空间属于是这个设备的(可能是一段e2prom),设备在出厂时,配置空间是有默认初始值的。如上图所示,pci的配置空间是256字节,其中64字节是标准配置空间header,后面的192字节是Capability结构,展示pci能提供的能力。CPU发出一个物理地址,RC检查该地址,如果发现该内存空间地址是某个PCIe设备空间的映射,就会触发其产生TLP,去访问对应的PCIe设备,读取或者写入PCIe设备)一颗典型的PCI总线树如图。原创 2023-05-15 16:42:03 · 5673 阅读 · 0 评论 -
debugfs记录
【代码】debugfs记录。原创 2023-03-23 16:36:14 · 65 阅读 · 0 评论 -
mempool地使用
【代码】mempool地使用。原创 2023-03-17 17:03:12 · 297 阅读 · 0 评论 -
gdb笔记
GDB调试方法有3种:直接调试:gdb [exec file],用于直接仿真一个执行程序附属调试:gdb attach pid,用于直接调试一个已运行的程序(ubuntu注意权限问题)核心转存调试:gdb [exec file] [core-dump file],用于调试core-dump文件原创 2022-11-17 20:11:28 · 697 阅读 · 0 评论 -
uboot驱动框架
全文耗时一周,精心汇总20000余字,希望对大家有所帮助,感觉可以的点赞,关注,不迷路,后续还有更多干货!看文章前,答应我,静下心来,慢慢品!转载 2022-11-09 19:53:55 · 662 阅读 · 0 评论 -
GDB调试命令
GDB常见命令原创 2022-10-28 15:53:14 · 386 阅读 · 0 评论 -
【Cache】
在处理器速度不断增加的形势下,处理器处理数据的能力也得到了大大的提升,但是数据是储存在内存中的,虽然随着DDR2\DDR3\DDR4的技术不断推出,内存的吞吐率得到了大大提升,但是对于处理器来讲,仍然很慢。一般来讲,处理器要从内存中直接读取数据要花大概几百个时钟周期,在这几百个时钟周期内,处理器除了等待,什么也不能做。在这种情况下,才提出了cache的概念,其目的是为了匹配处理器和内存之间存在的巨大的速度鸿沟。一般来讲,Cache由三级组成,一级(L1)最快,但是容量最小,三级(LLC,last level原创 2022-06-27 16:28:16 · 1918 阅读 · 0 评论 -
内存管理-理论
内存管理理论原创 2022-06-04 20:41:43 · 81 阅读 · 0 评论 -
【Linux 中断管理机制】
无原创 2022-06-03 15:44:46 · 1011 阅读 · 0 评论 -
【POLL 机制简单例子】
POLL 实现简单举例内核下面需要做的事情实现一个字符设备内核下面需要做的事情实现一个字符设备首先需要实现file_operations 。static const struct file_operations xxx_fops = { .owner = THIS_MODULE, .open = xxx_open, .release = xxx_release, .read = xxx_read, .write = xxx_write, .mmap = xxx_mmap, .原创 2022-05-25 10:28:40 · 163 阅读 · 0 评论 -
linux poll机制窥探
linux poll机制窥探内核框架sys_poll 源码驱动程序UIO框架里面的poll实现内核框架对于系统调用poll或select,它们对应的内核函数都是sys_poll,文件位于fs/select.csys_poll 源码SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout_msecs){ struct timespec64 end_time, *to = NULL;原创 2022-05-24 15:43:37 · 220 阅读 · 0 评论 -
【 boot下面的配置开关】
boot下的配置项boot下面的配置开关问题由来boot下面的配置开关在boot下面有多个文件配置开关,以FT2000C举例。bootloader/configs/FT2004C_defconfig 默认配置文件和 bootloader/include/autoconf.mk这两个文件分别在 bootloader/ft20040-pld.sh 和 bootloader/Makefile中被用到。bootloader/ft20040-pld.sh:make /FT2004C_defconfig原创 2022-04-19 16:10:56 · 233 阅读 · 0 评论 -
【MMP多个地址】
MMP多个地址空间到用户态在另外一个文章中,我们实现了将内核空间申请的一片内存映射到用户空间,今天我们将内核空间申请的多个地址空间映射到用户态里面,原理都是一样的。1、ko文件内容:#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/cdev.h>#include <asm/uaccess.h>#include &l原创 2021-12-24 17:08:33 · 462 阅读 · 0 评论 -
【设备节点创建】
创建设备节点1、静态创建设备文件节点2、动态创建设备文件节点本文章详细讲解如何在dev/下面创建设备节点,有通过mknod 静态创建方式和使用Linux为我们提供的接口动态创建两种方式。1、静态创建设备文件节点我们可以在启动脚本里面提前创建好一个设备节点。/* 设备节点名称为create_node , 设备的主设备号为 1300, 从设备号为 0, 设备为字符设备 */mknode /dev/create_node c 1300 0然后我们编写设备的驱动文件。#include <原创 2021-12-22 15:47:00 · 2666 阅读 · 0 评论 -
【uio设备实例】
在有的场景中,我们需要将硬件资源(物理地址、地址长度)等信息告诉应用程序,然后将这一片地址mmap到用户空间,这样以后,我们在用户空间就可以直接读写(如*paddr = 1)这个区域了。UIO设备给我们提供了一种简单的方式,因为UIO自己实现了struct file_operations 里面的所有接口包括mmap。这样方便我们做内存映射。实验:创建uio设备,并在/dev下面创建相应的文件,然后在用户层去映射UIO记录的那片内存,并进行读写操作。1、ko文件如下:#include <linux原创 2021-12-21 17:43:38 · 513 阅读 · 0 评论 -
linux任务优先级
linux 任务优先级简单记录优先级优先级进程PCB描述符struct task_struct 数据结构中有3个成员描述进程的优先级。 struct task_struct {....int prio;int static_prio;int normal_prio;unsigned int rt_priority;...};static_prio是静态优先级,在进程启动时分配。内核不储存nace值,取而代之的是static_prio。内核中有宏 NICE_TO_PRIO()实现由NI原创 2021-12-20 16:49:32 · 537 阅读 · 0 评论 -
【linux 调度策略】
linux 任务优先级linux调度linux调度在Linux中,线程是由进程来实现,线程就是轻量级进程( lightweight process ),因此在Linux中,线程的调度是按照进程的调度方式来进行调度的,也就是说线程是调度单元。Linux这样实现的线程的好处的之一是:线程调度直接使用进程调度就可以了,没必要再搞一个进程内的线程调度器。在Linux中,调度器是基于线程的调度策略(scheduling policy)和静态调度优先级(static scheduling priority)来决定那转载 2021-12-17 17:35:15 · 240 阅读 · 0 评论 -
mmap实验例子
mmap内存映射实现实验内容:在内核下面申请4K大小的内存(kmalloc申请的物理连续内存),在应用程序中通过mmap把内核态下申请的内存块映射到用户空间,然后在应用程序中通过read,write操作读写内核空间数据,最后读取用户态映射的地址空间,看内容是否和内核数据空间一致。我的编译工具:/opt/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gun/bin/arrch64-linux-gun-gcc内核实现:#include <linux/原创 2021-11-09 17:14:22 · 1325 阅读 · 0 评论 -
Linux 虚拟地址到物理地址的转换
Linux 虚拟地址到物理地址的转换转载:转载转载 2021-08-10 09:27:08 · 79 阅读 · 0 评论