自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 gnu shell脚本转换链接脚本里的#include命令

在项目中需要在某个.h文件中对内存地址进行统一管理,而LD文件是无法直接#include包含.h文件的,因此通过以下脚本重新转换ld文件以间接实现该功能。compiler=/编译工具链路径/arm-none-eabi-gcc。out=/输出新ld文件路径/sample_gen.ld。in=/原ld文件路径/sample.ld。include=/.h文件路径。...

2022-08-17 14:18:29 257 1

原创 GCC指定某个c文件里的函数或者变量到某个section

.o(.func_text_section)//使用attribute属性指向该段的函数。2定义func段,将文件file_a.c、file_b.c、file_c.c中的函数放到这个段。3定义data段,将文件file_a.c、file_b.c、file_c.c中的数据放到这个段。注意需要初始化阶段对代码和数据进行重定向,从DDR的存储地址拷贝到实际的运行地址去。1定义某个section的属性。...

2022-07-29 14:57:59 1813

原创 linux内存泄漏检测工具

AddressSanitizer添加编译选项:用-fsanitize=address选项编译和链接你的程序;用-fno-omit-frame-pointer编译,以在错误消息中添加更好的堆栈跟踪。将libasan.so下载到开发板export LD_PRELOAD=./libasan.so

2022-02-12 19:46:37 637

原创 基于GNU、arm v7、threadx的backtrace

根据栈帧FP进行backtrace,threadx会在任务调度前将sp指向申请的任务栈空间,任务栈空间可在链接脚本中指定。随便写个例子如下:void func0(){ int i = 6; i++;}void func1(){ *(uint32_t *)0x80000000 = 1; //访问一块不在mpu范围内的内存会发生Abort func0();}void func2(){ f...

2021-12-09 10:04:48 249

原创 R8 TCM使用说明

1:链接文件定义section:TCM(rwx): ORIGIN= xxx, LENGTH = yyy.tcm_section :{ .= ALIGN(4); *.0 (.tcm_section)} >TCM AT > DDR2:代码中配置、使能TCM并进行代码重定向3:函数使用__attribute__((section(".tcm_section")))...

2021-11-27 15:15:23 150

原创 threadx移植到cortex-r8注意点

2021-09-08 13:39:03 340

原创 arm cortex-R8 MPU和cache全破解

一:内存属性:Bufferable: A write to the memory can be carried out by a write buffer while the processor continues to execute the next instruction.Cacheable: Data obtained from memory read can be copied to a memory cache so that the next time it is accessed t

2021-09-01 16:15:24 1424

原创 如何区分一个.so是否为PIC

readelf -d foo.so | grep TEXTREL如果上面的命令有任何输出,那么foo.so就不是PIC的,否则就是PIC的。PIC的.so是不会包含任何代码段重定位表的,TEXTREL表示代码段重定位地址。

2021-07-16 16:41:59 384

原创 newlib中malloc如何获取heap地址

newlib代码:caddr_t_sbrk (int incr){ extern char end asm ("end"); /* Defined by the linker. */ static char * heap_end; char * prev_heap_end; if (heap_end == NULL) heap_end = & end; prev_heap_end = heap_end; if (heap...

2021-07-15 10:19:14 398

原创 记录DS-5上工程AC5移植到AC6的奇葩问题

1:LDMIA sp!, {lr, r1}warning: register list not in ascending order解决方法:LDMIA sp!, {r1, lr}2: .global _tx_thread_context_save_tx_thread_context_save:Error: L6286E: Relocation #REL:4 in startup.o(StartUp) with respect to _tx_thread_context_...

2021-05-12 11:39:56 412

原创 GIt push error

remote: ERROR: commit 1cc115a: email address @grandsun.com is not registered in your account, and you lack 'forge committer' permission.git config --global user.email "[email protected]"git config --global user.name "cc"git commit --amend --reset-author.

2020-11-02 16:12:12 274

原创 基于LPC55xxx CM33核的TrustZone原理与应用

一:概述为了更好地提高MCU的安全性能,Arm在ARMv8-M架构中引入了TrustZone技术。ARMv8-M中的TrustZone技术是一种可选择的安全扩展,旨在为各种嵌入式系统应用提供基本的安全保障。本文基于CM33核的LPC55sxx系列开发板,MCUXpresso IDE v11.1.1_3241集成开发工具。二:实现原理2.1:区域划分TrustZone将内存和外设分为安全区域(S)和非安全区域(NS),CPU访问S时可认为CPU处于安全状态(CPU-S),访问NS时...

2020-08-18 19:51:29 1694

原创 知识点总结

1:Linux设备中的并发控制1.1:原子操作:atomic_t v = ATOMIC_INIT(0);atomic_read(atomic_t *v);atomic_add(int i, atomic_t *v);atomic_sub(int i, atomic_t *v);1.2:自旋锁:spinlock_t lock;spin_lock_init(lock);spin_lock(lock);spin_unlock(lock);spin_trylock(lock);spin_l

2020-08-07 10:18:13 137

原创 Linux信号异步通知应用和驱动编程

一:设备驱动层struct x_dev{ ... struct fasync_struct *async;};/*fasync函数*/static int x_fasync(int fd, struct file *filp, int mode){ struct x_dev *dev = filp->private_data; return fasync_helper(fd, filp, mode, &dev->async);...

2020-07-02 11:09:31 118

原创 BQ25611D中文手册

1:概述BQ25611D是一个高度集成的、3.0-A开关模式的电池充电器,用于锂离子和锂聚合物电池。它包括input reserve-blocking FET(RBFET Q1),high-side switching FET(HSFET Q2),low-side switching FET(LSFET Q3)和battery FET(BATFET Q4),还有用于高侧栅极驱动的自举二极管。2:原理框图3:特征描述3.1:上电复位(power-on-reset)该设...

2020-05-19 16:40:18 3940

原创 简述linunx内存管理初始化流程

本文基于linux-4.4.6 ,arm64平台 在汇编阶段,需要完成identity map和kernel image map两个工作,假设arm64 使用48位虚拟地址,4级translation table :9(level 0 or PGD) + 9(level 1 or PUD) + 9(level 2 or PMD) + 9(level 3 or PTE) + 12(page...

2020-04-01 18:02:03 176

转载 韦东山:一文看尽 linux对中断处理的前世今生

01Linux对中断的扩展:硬件中断、软件中断Linux系统把中断的意义扩展了,对于按键中断等硬件产生的中断,称之为“硬件中断”(hard irq)。每个硬件中断都有对应的处理函数,比如按键中断、网卡中断的处理函数肯定不一样。为方便理解,你可以先认为对硬件中断的处理是用数组来实现的,数组里存放的是函数指针:注意:上图是简化的,Linux中这个数组复杂多了。...

2020-03-13 17:16:24 199

转载 内存初始化代码分析(三):创建系统内存地址映射

一、前言经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init。当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系统内存地址映射这部分代码实现,也就是解析paging_init中的map_mem函数。同样的,我们选择的是4.4.6的内核代码,体系结构相关的代码来自ARM64。二、准备阶段在进入...

2020-03-13 10:40:45 361

转载 内存初始化代码分析(二):内存布局

一、前言同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务。具体的cpu体系结构选择的是ARM64。二、memory type region的构建memory type是一个memblock模块(内核初始化阶段的内存管理模块)的术语,memblock将...

2020-03-13 10:39:43 304

原创 arm64内存管理初始化汇编阶段--identity mapping和kernel image mapping

本文是在阅读完linuxer大神的内存管理文章,阅读内核源码所作的简单的注释和说明,大神文章请参考:http://www.wowotech.net/memory_management/__create_page_tables_code_analysis.htmlarch/arm64/kernel/head.S一:代码主体流程__create_page_tables:adr...

2020-03-12 14:44:28 537

转载 基于arm64内存管理初始化概述

一:启动之前在内核启动之前,bootloader会将kernel image和DTB搬移到内存的指定位置。其中TEXT_OFFSET是kernel image相对内存起始地址的偏移。这时候MMU是关闭的,因此CPU看到的地址即是物理地址空间。二:初始化MMU跳转到内核执行,内核便完全掌控了内存系统的控制权。它首先要做的事情就是打开MMU,而为了打开MMU,必须要创建ke...

2020-03-11 15:59:35 669

原创 基于rockchip-px30平台arm v8架构下uboot启动分析

一:arch/arm/cpu/armv8/start.S蓝色标注的是实际执行的代码片段,红色为注释#include <asm-offsets.h>#include <config.h>#include <linux/linkage.h>#include <asm/macro.h>#include <as...

2020-03-06 14:59:40 1835

原创 基于px30平台RX809-1的codec声卡芯片的驱动分析

1:platformrockchip_i2s.c: 将platform中的component放入dai链表,component->dai_drv指向rockchip_i2s_dairockchip_i2s_probe 1.1:/* clk init */ i2s->hclk = devm_clk_get(&pdev->dev, "i2s_hclk...

2020-02-25 16:43:18 1533

原创 关于高通平台SELINUX权限问题

举例:type=1400 audit(1358758415.820:7): avc: denied { write } for pid=1229 comm="sh" name="relay" dev="proc" ino=4026533065 scontext=u:r:shell:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=0语法...

2019-12-24 15:15:22 687 1

原创 链接过程详解

一:链接的基本概念链接(linking)是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时,也可以执行于加载时,甚至执行于运行时。在现代系统中,链接是由叫做链接器(linker)的程序自动执行的。为什么需要链接器呢?一切都是为了简单、为了方便!试想一下,一个巨大的工程有巨大的源文件,包含N多个模块,如果没有链接的存在,那么...

2019-12-09 17:02:59 4146

原创 altera cyclone gpio export driver

平台:altera cycloneV功能:设备树添加gpio,驱动设置gpio状态以及是否导出设备树添加节点: gpios { compatible = "cyclone_gpio_export"; status = "okay"; /* input */ g...

2019-05-16 16:22:33 347

原创 无重复字符最大子串---滑动窗口

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最...

2019-05-16 15:42:46 304

空空如也

空空如也

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

TA关注的人

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