自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 资源 (3)
  • 收藏
  • 关注

原创 页表权限是怎么设计的

转换的时候,还会检测权限,满足权限才能进行相应的操作Field:该字段的物理地址对应的物理页框是一页数据Present (P):-若Present = 1,所指的页在内存中若Present = 0,所指的页不在内存中.Accessed (A):分页单元堆相应的页框进行寻址时就设置这个标志.Dirty (D):此标志只用于页表项中,用于标记页框有进行写操作Read/Write (R/W):页或者页表的存取权限User/Supervisor (U/S):页或者页表所需的特权级..

2021-07-24 21:38:52 437

原创 2021-07-23

1.Const变量为什么,明明b已经得到了a的地址,对b的地址赋值,也就是对a的地址赋值,对a打印,结果却还是0?答:汇编里面,前一段确实是这样,但是对a打印的时候汇编,是直接把寄存器的值打印出来,不是去a的地址取值,然后打印出来的。2.为什么a的地址是在rodata段的内存中,还是能拿出来,对这个地址赋值呢?答:权限问题,内核段内存的权限,这个权限应该不是在c代码阶段决定的,应该在比汇编更底层的地方,和mmu,虚拟内存都有关。权限是在虚拟内存转化到物理内存的时候,才会去检测。也就是说,检测权限是硬

2021-07-23 12:07:58 101

原创 用虚拟内存检测页表信息

记录一下,利用虚拟内存检测页表信息的方法获得mm_struct 内存描述符方法:1.利用调用内核函数,根据pid号可得2.用全局变量current直接得到当前进程的信息 current->mm就是当前进程的内存描述符。上面两者方法都需要在内核中运行,也就是说需要用insmod 一个驱动的方法在内核中运行这些代码。所以放在init里面的话,current现在的进程就是insmod进程2.根据mm_struct,得到顶层页表项pgd,然后根据pgd可以得到底层页表pte3.根据pte,调用pt

2021-07-23 12:03:01 163

原创 linux Module段的内存分布

linux Module段的内存分布查询方法:/sys/module/驱动/sectionscat .text等文件可得到顺序大概是TextRodataInit.TextDataBss其他的没查而且应该是一个驱动一块内存,里面每一段都是紧接着上一段,而不是每个module的text放在一块。...

2021-07-19 14:26:01 181

原创 Linux 内存管理记录

Linux 内存管理记录以上周的问题作为导向,开始研究linux内存管理的方法。32位每个进程都是: 前3g用户空间:0x0~0xc0000000后1g 内核空间: 0Xc0000000~0Xffffffff从上周测试的打印看:const全局变量的地址居然在用户空间,估计是在栈中const局部变量的地址在内核空间。2的情况可以理解,毕竟ko驱动就在内核中。1的情况我猜测,当ko动态加载到内核的时候,不是把整个ko一股脑塞到一个地址里面,还是有分别的,所以const全局变量才会还是放在用

2021-07-13 17:57:44 83

原创 Linux中const变量 分析和疑惑

提要:我在实习中,修改一个原有的linux驱动程序,但是遇到了一个很奇怪的问题:两个变量指向同一个地址,但是用printk打印两个变量的值,却一个是对的,另一个为0.定义赋值的地方就不展示了。调试打印。当然后面查到是因为const修饰过的问题。但是也引出了更多的疑问:const的实现原理?答:在编译的过程中,编译器会检查代码中是否有对const变量进行修改的代码,如果有则向用户报错。在编译通过后,const变量和普通变量相同。按照问题1的说法,为什么用指针的方式,也会出现const变量

2021-07-09 11:52:11 414

原创 STM32-NWATCH-WATCHX电子时钟后续(1)

NWATCH-WATCHX电子时钟后续(1)时隔多日,虽然上次说会持续更新,但还是花了很久的时间才发,主要是原因是懒,其次是最近在忙着找工作和实习。话不多说,先看展示,再讲解。正面图侧面底面这次的宝贝定位就是:桌面上功能尽可能多还便宜的摆件功能:原有的所有功能就不再说一遍了新增:1.usb扩展坞现在上面有3个usb2.0扩展口,图中应该看得到,用了一款扩展坞芯片实现的。2.PC监视器可以显示PC电脑上的各项性能,比如cpu利用率,gpu利用率,还数据可以用波形显示的方式展现(这个图

2021-07-04 13:23:25 1153

原创 uboot启动流程

自我要求:熟悉uboot启动流程cmd命令执行过程(能添加一个命令:显示产品信息)熟悉uboot的flash读写指令过程熟悉引导内核的过程另外看看lds链接脚本,重定位的用处flash读写指令过程:sf.c最底下注册了U_BOOT_CMD(sf, 5, 1, do_spi_flash,…)do_spi_flash函数可以进行读写flash指令如果要读flash到某个地址do_spi_flash() // sf.cdo_spi_flash_probe()spi_fla

2021-06-25 17:45:06 269

原创 嵌入式软考3

RS485 接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好RS232 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰。2、传输距离:RS485 接口的最大传输距离标准值为 1200 米(9600bps 时),实际上可达 3000 米。RS232 传输距离有限,最大传输距离标准值为 50 米,实际上也只能用在 15 米左右。3、通信能力:RS-485 接口在总线上是允许连接多达128个收发器,用户可以利用单一的 RS-485 接口方便地建立起设备网络。RS-

2021-05-28 15:50:45 99

原创 记一些嵌入式软考的东西2

记一些嵌入式软考的东西2程序计数器(PC,Program counter),用于存放指令的地址。指令寄存器(IR,Instruction Register),用来保存当前正在执行的一条指令。通用寄存器(GR,General register):通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。CPU首先从程序计数器(PC)获得需要执行的指令地址,从内存(或高速缓存)读取到的指令则暂存在指令寄存器(IR),然后进行分析和执行。海明码纠错公式: ≥N+k+1,其中N为有效信息位数

2021-05-27 18:27:27 124

原创 记一些嵌入式软考的东西

记一些嵌入式软考的东西CMMCMM把软件开发过程的成熟度由低到高分为初始级、可重复级、已定义级、己管理级和优化级共5个级别,每个成熟度等级被分解成几个关键过程域,共18个关键过程区域,其中初始级无关键过程区域。可重复级包括6个关键过程区域,为软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理;已定义级包括7个关键过程区域,为同行评审、组间协调、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点;己管理级包括2个关键过程区域,为软件质量管理和定量

2021-05-26 18:07:01 178

原创 MIPI通讯的初理解

MIPI大多用在摄像头,显示器等外设。首先mipi分三层:DCS(应用),DSI(协议),D-PHY(物理层)物理层采用了差分信号(就是两根线,代表一个信号)一个时钟信号,1,2,4,8个lane信号。(大部分是4或8lane的)每个lane中,有两根线dp(正信号),dn(负信号)。有两种传输方式:LP(低功耗),HS(高速)在此博客中学到的:https://www.cnblogs.com/dengxiaojun/p/4279490.html在实际用的时候,硬件连接好之后,基本只需要配置一下

2021-05-25 15:44:31 2091

原创 Linux insmod指令原理

之前写的好像不太对,我的理解:输入insmod xxx.ko之后(基于linux3.5版本)linux 系统会调用linux/kernel/module.c里面的sys_init_modul函数sys_init_modul函数先做一些校验,之后进行关键的两步mod = load_module(umod, len, uargs);//模块加载ret = do_one_initcall(mod->init);//模块init函数调用load_module模块加载分四步copy_and_ch

2021-05-25 15:30:04 1751

原创 3. 静态编译和动态编译

简单的说:1.平时直接 gcc –o 编译的都是动态编译的方法。2.动态编译是 gcc -shared -fPIC -o 的方法生成 .so动态库,再用 gcc –o 把.so和main.c编译成可执行文件总结:静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中的,也就是说,对于最后的执行文件而言,你是否删除静态库无所谓。但是,一旦你删除了动态库,最后的执行文件就玩不转了。动态库特点:1,库的代码不会编译进程序里面,所以动态库编译的程序比较小。2,由动态库编译的程序依赖于

2021-05-13 16:49:39 2680

原创 insmod时候的详细过程

LINUX系统下执行 insmod时候的详细过程LINUX系统下执行 insmod时候的详细过程之前在面试linux驱动的实习岗位的时候问到的问题,没想到几乎每天都用的一个指令,我居然都都没有留心,现在做个记录。参考文章:(后续添加)insmod其实是一个modutils模块实用程序,执行init_module函数这个程序完成下面一系列工作:1.计算存放模块代码、模块名和module对象所需要的内存大小。2.在用户空间中分配一个内存区,把module对象、模块名以及为正在运行的内核所重定位的模

2021-05-13 16:45:27 2548

原创 stm32F103 COREMARK

目录前言一、资源1.文档资料2.源码3.板子二、步骤代码和文档前言CoreMark是一个用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的,旨在成为一个行业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删改查和排序)、矩阵操作(公共矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC。用户可以自由的下载Coremark,并移植到自己的平台上运行,随后就可以看到分数。一、资源1.文档资料《如何将 C

2020-12-29 17:30:31 1172

原创 STM32F429跑uboot(含资源)

文章目录前言一、来源二、需要注意的地方1.uboot2016.092.gcc-arm-none-eabi3.配套软件的安装4.make mrproper5.最终运行展示图资源前言前段时间在看uboot,发现uboot应该算是裸机程序的集大成者,但是平时常用的stm32的uboot很少见,看到有博主在做,就跟着步骤完成了uboot的配置和烧录一、来源主要是跟着这位博主的讲解做的https://blog.csdn.net/tianyake_1/article/details/84397136..

2020-12-28 10:57:26 1320

原创 STM32电子时钟 WATCHX-NWATCH( 开源)

话不多说,先看成果主页面目录游戏提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录话不多说,先看成果项目介绍一、来源二、使用步骤1.引入库2.读入数据总结项目介绍一、来源示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport sea

2020-11-15 15:15:05 8318 8

CMAKEnote.md

CMAKEnote.md

2023-01-31

stm32f103 coremark评分程序(还有《如何将 CoreMark 程序移植到 STM32 上》)

详情见博客:https://blog.csdn.net/qq_40525440/article/details/111933114

2020-12-29

stm32f429的uboot程序

具体描述看我的博客:https://blog.csdn.net/qq_40525440/article/details/111831626

2020-12-28

STM32电子时钟 WATCHX-NWATCH

stm32f103rct6的WATCHX-NWATCH电子时钟代码,自己做了修改和删减,可以直接运行。博客链接:https://blog.csdn.net/qq_40525440/article/details/109703564

2020-11-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除