- 博客(88)
- 资源 (26)
- 收藏
- 关注
原创 分析arm Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP
内核触发panic,出现Internal error: synchronous external abort: 96000010 [#1] PREEMPT SMP96000010 实际上是esr寄存器得值在armv8 中不同得el层 有各自得得esr寄存器,内核处于el1层,看esr_el1寄存器得值查看arm v8 手册96000010 对应得含义arm 官方已经告诉...
2020-07-04 14:16:52
8824
1
原创 通过ramdump 分析匿名页导致的TASK_UNINTERRUPTIBLE
在分配内存时长时间处于不可打断得状态,通过crash 工具解析ramdump 查找block 得原因crash> ps -u |grep UN 10457 1 7 ffffffea80bb2f40 UN 6.2 8856372 646112 provider@2.4-se 10515 673 5 ffffffeb71240000 UN 1.4 2069416 146256 azeroth-api-thrprovider 是当前正在使用得任.
2020-06-30 11:51:07
1463
原创 以高通camera 申请ion内存看dma-buf
1 fd 与ion buffer, file绑定 简单总结就是申请一个buffer,再创建一个dmabuf 结构体然后将,然后将dmabuf中得指针指向buffer,dmabuf 再传递给一个匿名的inode,获取到一个file,这样file和dmabuf绑定起来,也就和buffer关联上。然后再从进程中分配一个空闲的fd,将fd 和file囊绑定。这样就能通过fd 快速查找到buffer。file 是个全系统的,他和进程无关,但是fd 是每个进程都是自己独立的,所以再跨进程传输时只需要保证fd ...
2020-06-26 17:57:27
5818
原创 匿名页反向映射得建立
参考链接: https://www.cnblogs.com/tolimit/p/5398552.htmlhttp://www.wowotech.net/memory_management/reverse_mapping.html链接1.匿名页创建建立匿名线性区有两种情况,一种是通过mmap建立私有匿名线性区,另一种是fork时子进程克隆了父进程的匿名线性区,这两种方式有所区别,首先mmap建立私有匿名线性区时,应用层调用mmap时传入的参数fd必须为-1,即不指定映射的文件,参数flags必须有
2020-06-21 22:21:45
476
原创 qcom camera smmu 学习(3)
iommu_dma_alloc_iova 已经成功获取到了虚拟地址,iommu_map_sg 将把虚拟地址和物理散列表中的物理地址进行映射。 iommu_map_sg 在4.19 以后的内核这个接口已经删除了 size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, struct scatterlist *sg, unsigned in...
2020-05-30 23:22:32
1245
原创 qcom camera smmu 学习(2)
上一篇中提到了cam_smmu_alloc_iova 通过从已经构建好的内存池中获取虚拟地址然后调用iommu_map_sg 去建立映射关系。 dma_buf_map_attachment 建立映射关系时也需要获取虚拟地址。虚拟地址的其实地址,大小也是在设备树中设置好的,需要一个地方从设备树中读取然后保存起来,在使用的时候从其中去分配。1.获取虚拟地址初始化的流程: of_dma_configure->arch_setup_dma_ops→arm_iommu_setup_dma_ops→
2020-05-30 23:19:38
1948
原创 android native c++ 打印调用栈
编译文件中加入:LOCAL_SHARED_LIBRARIES += libutilscallstack源代码中加入:#include <utils/CallStack.h>android::CallStack cs("test");
2020-05-30 23:02:31
590
原创 qcom camera smmu学习(1)
camera 有很多isp 中包含了ife ipe bps 等需要使用smmu 1.分配内存并映射到smmu(1)分配内存 分配内存在内核中使用的函数是 cam_mem_mgr_alloc_and_map,主要是通过dma_buf 分配一个内存并且将获得fd 映射到smmu。分配内存使用cam_mem_util_get_dma_buf_fd 分配,主要调用一下三个函数: ion_alloc ,dma_buf_fd,dma_buf_get 第一个函数是ion 分配, 后面...
2020-05-30 22:42:20
3596
1
原创 linux 读写信号量学习
文章从《奔跑吧linux内核》中参考加上自己的理解linux 读写信号量, 奔跑吧linux 内核的作者使用 十进制来解释 count 数值的变化,发现这样非常好理解。rw_semaphore 我之前一直没有从代码理解如何实现的。只知道理论上是可以多个读者去读,如果有写者就不能去读。最近看这块代码代码实现上是在等待队列中如果有写者,把写者之前的读者唤醒,写者还是在等待队列中。如果等待队列中...
2019-12-31 21:48:04
1677
原创 android 看门狗引起crash分析
文章参考:https://blog.csdn.net/juS3Ve/article/details/79428049在进入橙屏ramdump 后在高通平台高通有专门的脚本配合crash 工具去解析dump 出来的bin 文件。 在解析bin 文件之前必须先转被好vmlinux 文件,也就是内核的符号表。解析完成后会在out 文件夹里生成一些信息。这些信息会在一个html 网页中被统计进来。...
2019-12-27 17:44:57
1649
原创 android bionic memcpy 汇编源码解析
代码位置bionic/memcpy_base.S宏定义:#define dstin x0#define src x1#define count x2#define dst x3#define srcend x4#define dstend x5#define A_l x6#define A_lw w6#define A_h x7#define A_hw w7#de...
2019-12-24 16:23:33
1231
原创 arm smmu 学习(1)
文章linux 4.14 代码分析smmu 流程linux 在驱动找到对应的设备后会执行driver_probe_device 函数,具体dev和drv 匹配参考文章链接driver_probe_device->really_probe->dma_configure->of_dma_configureint of_dma_configure(struct devic...
2019-12-19 14:28:31
4803
原创 sylixos pci
1.pci基地址获取pci的基地址在x86平台是通过acpi获得的,acpi全称是(Advanced Configuration and Power Management Interface)高级配置和电源管理接口,在ACPI规范文档3.0中 https://download.csdn.net/download/smartzhen2003/981664可以看到如下图可以看到...
2019-12-14 15:51:50
636
转载 高通gpu信息获取
查看高通的gpu 和cpu的实时状态,高通的Snapdragon Profiler 工具是个不错的选择,可以实时查看相关的信息。也可以通过命令查看。在/sys/class/kgsl/kgsl-3d0 目录下可以看到高通gpu的信息里面的信息太多,很多节也不知道代表啥意思,在power文件下如下:autosuspend_delay_ms runtime_active_time run...
2019-09-13 23:00:13
6318
1
原创 android ion --system heap(个人理解,不确定完全对)
android 在linux 4.12 内核对ion驱动的api 进行了修改,原来的一部分ioctl命令已经不存在了。谷歌的ion 我个人觉的还是挺大的,system heap 内存分配的方式,其他的还有使用cma 分配等,不同的分配方式会调用linux不同的接口。这篇文章值只写下自己对system heap 的个人理解。ion相关代码在内核kernel\msm-4.14\drivers\st...
2019-08-11 21:59:11
5605
2
原创 android camera 拍照流程图
原图下载链接:链接 ,包含了svg格式的图,放大后不会看不清楚。图是通过puml软件画的拍照时序图:拍照返回时序图
2019-07-21 12:15:39
1488
原创 高通camx clock配置
在内核msm-4.14/arch/arm64/boot/dts/qcom存放这高通的内核设备树的配置文件。其中其中 *--camera.dtsi为camera 相关的配置。如下图:sdmmagpie-camera.dtsi 是sm7150,以此文件为例首先查看jpeg 相关设置这里可以看到高通的clock 配置分等级的 jpeg只设置了一个等级说明不会降低频率。 cloc...
2019-06-30 22:38:30
1929
2
原创 SylixOS 任务调度源代码分析
在SylixOS 中退出中断和内核都会系统调度任务,任务调度底层切换上下文,底层实现参考链接在SyliOS默认优先级是0-255,数值越小优先级越高。在SylixOS 任务就绪队列是通过位图的方式去查找,如果当前优先级有任务则对应的位图位就会变成1。在查找到最后优先级后,从对应链表中取出任务控制块tcb,对比是否比当前任务优先级高,决定是否切换任务。在arm中支持硬件实现前导零计数,所以能...
2019-04-18 22:31:43
1052
转载 Cache基本原理之:结构
原文章链接地址:链接Cache entries数据在主存和缓存之间以固定大小的”块(block)”为单位传递,也就是每次从main memory读取的最小数据的单元。每个块的大小可能是4,8,16 Bytes或其他值,不同的CPU不尽相同,目前的x86 CPU cache line基本都是64 bytes。通常,人们更习惯称之为cache行,或者cache line。根据前一篇文章的描述,...
2019-04-11 10:31:57
1543
原创 SylixOS armv8 任务切换
SylixOS 在进入中断退出,进入内核退出时会进行任务切换。分为两种情况讨论:1.中断退出时任务切换在SylixOS 中无论是同步异常还是异步异常都会首先将系统寄存器保存到系统异常栈中,然后获取当前任务的tcb控制块,最后将保存到异常堆栈中的系统上下文寄存器保存到任务控制tcb中。在SylixOS 中EXC_SAVE_VOLATILE是定义成了一个宏,所以不会进入函数,LR被改变的问题(...
2019-04-11 10:22:12
585
原创 SylixOS armv8 原子操作
在SylixOS 中 armv8 原子操作分为32位和64位。首先介绍32位#define ATOMIC_OP_RETURN(op, c_op, asm_op) \static LW_INLINE INT archAtomic##op (INT i, atomic_t *v) \{...
2019-04-10 10:19:49
1164
转载 SylixOS 网络文件系统 nfs 的使用
SylixOS 支持网络文件系统 nfs,在开发阶段,当工程文件相当多并修改频繁时,使用 nfs 可以免去频繁下载这些工程文件的麻烦,从而提高开发效率,下面介绍 nfs 的使用方法。确保 SylixOS 编译了 nfs 组件默认情况 SylixOS 开启了 nfs 的支持,但 nfs 可以裁减,查看 sylixos-base/libsylixos/config/fs/fs_cfg.h 文件...
2019-04-08 15:04:47
692
1
转载 gcc中设置特定代码块的优化级别
今天碰到一个gcc优化相关的问题,为了让一个页变成脏页(页表中dirty位被置上),需要执行下面这段代码:1 uint32_t *page; 2 // ... 3 page[0] = page[0]; 最后一行代码很有可能被gcc优化掉,因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢?设置gcc编译时优化级别为-O0肯定是不合适的,...
2019-04-03 10:08:49
1592
原创 SylixOS arm64 自旋锁
SylixOS 下自旋锁结构体,使用union , SLD_uiLock 和 SLD_usSvcNow, SLDQ_usTicket共用空间SLD_uiLock 代表了 是否上锁, SLD_usTicket 是当前自己编号,每次加锁后这个值会加1.依次递增。 SLDQ_usSvcNow 代表了目前正在锁的编号。 加入此时有四个加锁 SCL_usTicket 每次加锁都会递增加1。SLD...
2019-04-02 14:55:23
518
原创 SylixOS 缺页异常
在arm64 中mmu访问错误会触发同步异常在同步异常向量表中填入同步异常处理函数,同步异常函数会调用系统的archSyncExcHandle函数,可以看到此函数的第一个参数x0 是当前当前任务的TCB。x1 是ESR_EL1 的值,根据armv8手册此寄存器包含了一些异常的信息。,特别是此寄存器中的EC 包含了同步错误的类型根据不同类型的错误,采取不同的处理措施。/...
2019-04-01 16:40:41
648
原创 SylixOS 内存管理源代码分析--vmmMalloc.c
vmmMalloc.c文件内容是内核对外提供API函数,前面文章分析的各种函数都是最后汇集到这里,对外提供系统功能。API_VmmMallocAlign此函数是分配一个对齐的物理页面和虚拟页面并将其映射。/******************************************************************************************...
2019-03-18 20:16:37
688
原创 SylixOS 内存管理-通过地址反查页面控制块-vmmArea.c
在vmm文件夹中的vmmArea.c文件是实现页表控制块反查功能。通过给定的地址(虚拟或者物理)可以查找到对应页面控制块LW_VMM_PAGE。 系统是通过哈希红黑树来实现这个功能的。首先在zone包含了一个哈希表。通过哈希索引值找到对应的红黑树根。也zone页面管理类似,页面关系是通过哈希表插到对应的链表头。有几个比较重要的结构体。LW_VMM_AREA 是一个非常重要的结构,它包含了一个哈希表...
2019-03-18 14:55:03
353
原创 SylixOS 内存管理源代码分析--phyPage.c
phyPage.c是对物理页面管理相关的内容。在SylixOS中虚拟页面和物理页面都是使用相同的数据结构管理,下文使用vmpage代表这个结构体,如下图在物理页面中不管存在zone数组,还有一个内核内存信息的数组,用来保存代码段和数据段的大小。/**********************************************************************...
2019-03-18 01:11:06
504
原创 SylixOS 内存管理源代码分析--pageTable.c
此文件内函数基本和映射相关。会调用mmu操作集函数,操作集函数参考https://blog.csdn.net/qq_28637193/article/details/88546354,因为不同体系结构mmu操作函数集不同,这里是以arm64为例__vmmLibVirtualToPhysical此函数来查找虚拟地址映射的物理地址。/***************************...
2019-03-17 21:48:58
505
原创 SylixOS 内存管理源代码分析--pageLib.c
SylixOS 系统中内存相关的代码放在SylixOS/kernel/vmm文件夹中,pagelib.c 主要是实现了页面的分配和回收。页面分配是以页面控制块进行管理的,配合哈希表。以下先是对每个文件的源代码分析,然后最后分析调用关系。首先看下载SylixOS 内存管理常用的结构体pageLib.c 文件是管理页分配,相关的。LW_VMM_ZONE 是区域zone 的结构体...
2019-03-17 19:58:12
732
原创 SylixOS 启动时mmu 初始化
armv8 mmu 操作函数集已经介绍了操作函数集。SylixOS在启动时会调用__vmmLibPrimaryInit函数进行页表的初始化。/*********************************************************************************************************** 函数名称: __vmmLibPri...
2019-03-15 12:53:27
581
原创 SylixOS armv8 mmu
armv8 mmu 支持4K,16K,64K分页,在SylixOS目前实现了4K和6K分页。根据查看代码SylixOS目前使用的是Non-secure EL1、stage 1 translation、VA和PA的地址宽度都是48个bit。所以分析代码不包含arm提供的其他功能。代码位于SylixOS/arch/arm64/mm/mmu 文件夹。在SylixOS封装了mmu操作函数集,这...
2019-03-14 23:07:57
1374
原创 uboot 使用fdt命令查看设备树
首先驱动设备树的地址,如果使用tftp下载,可以在tftp下载时指定地址。如果是存在nand flash可以将设备树读到指定内存位置。fdt addr 0xc00000fdt addr 命令指令地址, 0xc00000是我的设备树在内存中的地址。使用fdt header 命令可以查看设备树的头部信息。使用fdt print 命令可以查看全部的设备树信息。如果在fdt...
2019-03-13 10:39:01
10468
原创 SylixOS arm64 异常向量表
在VBAR_ELx寄存器中存放着异常向量基地址;/*********************************************************************************************************; 关中断并设置异常向量表;**************************************************...
2019-03-12 01:04:35
623
原创 allwinner h6 armv8 SylixOS 启动分析
在SylixOS为了让代码统一,针对不同的体系结构汇编文件差别,声明了统一的宏。如下是arm64 在内核的头文件中声明:#define EXPORT_LABEL(label) .global label#define IMPORT_LABEL(label) .extern label#define FUNC_LABEL(func) func:...
2019-03-10 21:44:38
2054
原创 SylixOS allwinner h6 链接脚本
/********************************************************************************************************* 包含配置文件*********************************************************************************...
2019-03-08 15:06:31
653
原创 编译nanopi neo 或者M1 uboot 启动SylixOS系统
在全志网站查到2017年3月 uboot 加入了对nanopi 网络支持,所以要2017年3月后的uboot才能通过网络启动SylixOS系统。下载源码uboot git 仓库 :http://git.denx.de/sunix MainLine uboot :http://linux-sunxi.org/Mainline_U-Bootnanopi allwinner 提供相关链接...
2019-03-08 10:51:54
790
android camera 拍照流程图
2019-07-21
armv8 体系结构手_a53手册_arm_boot_code_armasm_user_guide
2019-04-10
python基础教程第二版修订版(有书签,压缩包第二部分)
2017-06-05
基于tinymini210实现远程温度监控系统
2016-12-19
Android用opengl es3.0写的地月星系
2016-11-15
Android上opengl es3.0实现一个旋转的三角形(Android studio2.1.3)
2016-11-13
glew,glfw实现opengl代码
2016-09-11
用glew,glfw实现最新的opengl3.3绘制三角代码
2016-09-01
opengl使用的glfw的库和头文件
2016-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人