自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (8)
  • 收藏
  • 关注

原创 ATF之BL1跳转到BL2的过程。

0x00 IntroATF(ARM Trusted Firmware)作为一个bootload,其本身最终要的作用就是load各阶段的镜像到执行地址,然后跳转过去继续执行。根据以往经验,ARM处理器跳转到不同的镜像可以通过直接修改PC寄存器来实现。当然除了修改PC寄存器可能还需要在跳转之前初始化相关的环境、以及后续堆栈等。这篇文章就是记录ATF从BL1跳转到BL2的过程。0x01 总体时序...

2020-02-20 19:19:49 1750

原创 ARMv8-A Memory systems

ARMv8-A Memory systems0x00 Intro0x01 Memory Model0x02 Memory typeNormal memoryDevice memory0x03 Memory attributesCacheable and shareable memory attributesDomains0x04 BarriersInstruction Synchronizatio...

2020-02-01 23:26:54 1710 1

原创 ARM v8 AArch64 Programmers' model

ARM v8 AArch64 Programmers’ model最近抽空在更新自己的ARM架构知识库。为方便将来回忆,简单记录了v8架构,特别是AArch64模式下的一些特点。主要资料是官方的<ARMv8-A architecture reference manual>。异常等级(EL)V8定义了EL0 ~ EL3一系列异常等级,这些不同等级有如下含义:数字的增长代表的软件...

2019-12-25 14:00:48 632

原创 Xilinx Zynq-7000 RSA Authentication过程

简介本文只是简单记录下zynq-7000采用RSA校验时的大概流程。阅读需要具备RSA,Signature, Certificate等相关概念基础。签名产生和校验过程RSA是非对称加密算法。在这里,我们使用Private Key来签名,用Public Key来校验(实际上Public key也可以对content进行加密,然后再用Private Key来解密还原content)。回顾签名的产...

2019-11-28 17:37:25 1545

原创 Linux DTS中和中断相关属性的解释和用法

Linux DTS中和中断相关属性的解释和用法前言中断控制器的硬件结构(基于Exynos4412 ARMv7)GIC功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图...

2019-08-20 17:37:42 12650 1

原创 Linux 时间子系统

Linux中的时间子系统和调度子系统关联比较大,所以需要结合起来分析。在时钟子系统部分,主要关注时间子系统的初始化;periodic模式中断处理函数的实现;如何从periodic模式切换到oneshot模式;如何切换到高精度定时器;基于hrtimer的周期性时钟sched_timer的实现;hres模式中断处理函数的实现。在调度部分,主要关注调度的流程;调度策略触发的时间和条件;以及cpu_i...

2018-10-30 15:13:15 1247

原创 区块链(Bitcoin)简介

前言10月快结束了。这个月一直在调试sawtooth,坑太多了,填都填不过来。准确说这大半年来都是在搞区块链hyperledger sawtooth。最近我也会在部门做这方面的share,所以把这篇自己对区块链的理解文章贴上来凑数了。文章主要还是基于bitcoin来分析,最核心的材料是中本聪写的&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;BitCoin: A Peer-to-Peer Electronic Cash System...

2018-10-27 08:49:45 4346 1

原创 以进程的角度分析fork()为什么会“返回两次”?

前言网上很多文章在介绍fork()函数时都会提到,调用一次fork会“返回两次”结果,但又没有深入解释。所以初学者(包括当年的我)看到这句话时就很懵。为什么用fork会返回两次?怎么实现的?为什么需要返回两次?只要能理解程序和进程的区别,以及有Linux下进程空间的概念,这种现象很好解释,并且不需要涉及分析内核源码。先放一个常见的测试例子。 1 #include &amp;lt;unistd.h&amp;...

2018-09-27 14:56:42 1271

原创 Linux系统调用过程中user栈的保存与恢复

Linux系统调用过程中user现场的保存与恢复前言软硬件基础user和svc模式下寄存器的差异lr寄存器用法spsr寄存器用法USER栈的保存USER栈的恢复前言Linux应用程序中使用的open/close等函数属于glibc库提供的系统函数,调用这些函数最后都需要进入内核。所以完整的open实现可分为两部分,一部分在user space的glibc中实现;另一部分在内核中实现。这里只分析...

2018-09-26 23:47:47 1236

原创 匿名映射/线性映射的VMA分配和对应的缺页处理

现在知道elf文件中有PT_LOAD属性的segment最后会被加载到进程的VM中。但是加载之后也只是说segment和虚拟地址关联上了,物理内存此时并没有分配。那VMA和缺页一场如何产生关系呢?...

2018-09-17 23:31:46 1502

原创 Linux ELF文件和VMA间的关系

本来打算跟一下内核do_execve的实现,然后记录一下。但是在看的过程中发现已经有很多人写过非常棒的文章了,比如: https://blog.csdn.net/conansonic/article/details/53740670 写得非常详细了,所以跟代码的文章不写。这篇主要记录静态的二进制代码如何变成一个进程的。这中间会设计编译链接,execve的。Markdown和扩展Markdo...

2018-09-04 23:17:23 2194 4

原创 TLB中ASID和nG bit的关系

贴一篇当年关于TLB的笔记。TLB是硬件上的一个cache,用于提升访问页表(这里应该是二级页表)的速度。MMU在将虚拟地址转换成物理地址时首先去TLB中找合适entry,如果能找到,则立即返回物理地址;如果TLB中找不到,则需访问Memory中的页表,且会加载相关entry到TLB中,以备下次MMU转换使用。 这个过程中存在一个问题,因为process的页表具有私密性,且kernel pr...

2018-07-18 00:12:01 2263 2

原创 Linux内核缺页二三事

前言我们知道虚拟空间和物理内存是通过页表建立起映射关系的,当访问某段虚拟内存时,这种映射关系很有可能是尚未建立的,也有可能是在fork了之后页表被设置了WR模式。如果此时进程想往这部分区域写数据时,就会导致处理器产生异常。内核需要捕获并“修复”这种异常,这一过程就是缺页异常处理。硬件支持不论是空pte还是pte被设置为wr模,如果向里写数据肯定会触发处理器异常,而且应该是MMU发生的异...

2018-07-18 00:09:05 3262

原创 Linux用户进程创建过程浅析

前言网上分析内核进程创建初始化的文章很多,例如:https://www.cnblogs.com/LittleHann/p/3853854.html,这位仁兄分析的非常详细和深入,非常值得初次看这段代码的人参考。而这篇文章属于进阶版,跳过基本概念的解释,着重从代码的角度来理解一些平常不容易理解的概念。比如一般都说进程有自己独立的空间,线程则共享;线程有自己的独立内核栈等等,像这些概念在代码上是怎...

2018-07-09 23:03:03 686

原创 vmalloc浅析

vmalloc的流程比较简单理解起来没什么难度,大致分为1.为vm管理数据结构分配空间,包括vm_struct和vmap_area 2.根据size申请合适的物理内存 3.修改页表条目。这篇blog就简单的记录下vmalloc的实现流程,以及部分容易被误导的地方(如vmalloc真的全部都来自于high memory吗?)。先提几个问题:vmalloc分配的物理内存会存在浪费吗?vma...

2018-05-29 00:25:23 1877

原创 Linux内存管理之SLUB和SLAB之间的区别

前言前一篇讲了SLAB的基本原理,本来这篇打算写SLUB的原理。但在CSDN中发现了一篇非常好的描述SLUB原理的文章。链接:https://blog.csdn.net/lukuen/article/details/6935068 重复造轮子没必要,且就算重新可能也没他写得好。本着拿来主义,直接参考之。但是为了帮助自己以后快速回顾SLUB的原理,这里重点记录下kmem_cache_node这种ca

2018-04-25 16:33:33 6234

原创 Linux内存管理之SLAB原理浅析。

前言1.以下这篇文章是2015年我所在的via-telecom小组学习内存知识时整理的笔记。最近复习内存管理又拿出来看了一遍,庆幸当时阅读时留了这份笔记,不然重头看又要花费很多时间。当时画了很多visio图片且加上了via-telecom的copyright。虽然目前via-telecom被intel收购了,为了纪念在via-telecom的岁月暂且保留这些copyright。如果涉及了版权问...

2018-04-17 16:38:14 21149 4

原创 Linux内存管理之内核分页机制(paging_init)初始化

背景前面分析了kernel boot阶段内存管理实现的分段机制,可以发现页表描述符是按照ARM MMU硬件页表转换逻辑来设计的。kernel在初始化过程中只映射了内核 image部分的物理内存,在某个合适的时候内核需要将尽可能多的物理内存映射到页表中。 Linux设计为通用的操作系统,为了便于移植需要抽象出一些硬件细节,我们在驱动代码中看到大量的core层代码就是这个思想的体现。内核中只有和...

2018-04-09 16:05:13 2715

原创 linux内存管理之boot阶段identity mapping及MMU开启过程

为了准备面试,复习下kernel内存管理相关内容,顺便写个内存管理的系列文章做记录。 U-Boot跳转到内核时候MMU是关闭的,所以在内核boot阶段需要开启MMU,开MMU之前就需要初始化页表。 boot阶段的页表创建是通过函数__create_page_table来完成的,代码位于arch/arm/kernel/head.S中基本宏变量PAGE_OFFSET 这个变量一般被定义...

2018-04-03 11:21:08 1856

原创 U-Boot 浅析

准备面试,回顾瞎U-boot的启动流程。流程不画了,简单的记个流水帐…. U-boot启动分为冷启动和热启动,在此仅分析代码固化在SD卡中的冷启动方式。异常向量表-&amp;amp;amp;gt;把CPU设置为SVC模式-&amp;amp;amp;gt;初始化IRAM为stack(因为此时DRAM未初始化好)-&amp;amp;amp;gt;判断复位类型(冷/热启动)-&amp;amp;amp;gt;判断启动类型(nand/mmc_sd/emmc)-&amp;a

2018-04-01 23:49:45 241

原创 git输出版本信息

很久不更博了,重新回来写博客。这是关于git输出版本信息。 具体需求是,需要在软件中能查看到当前软件的tag版本号。而且不能简单的显示tag号,还要可以区分是release还是develop版。 例如baseline最新的tag之后没有其他commit号,则只需显示tag号,如v0.1.0。若在tag之后又有其他的commit被merge,则需显示完整格式为,tag号-commite号...

2018-02-09 15:15:27 2834

原创 u-boot中makefile的执行步骤

u-boot顶目录下的Makefile1.其中有SRCTREE     := $(CURDIR),ZHEG

2014-08-20 15:28:04 5198

原创 DVFS——基础数据结构分析(一)

1.DEFINE_PER_CPUstatic DEFINE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_data);

2014-07-31 19:57:25 828

转载 android studio中关于sdk manager下载package出错的问题

下载package时会出现:Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connect to dl-ssl.google.com/dl-ssl.google.com/74.125.237.1 timed out的错误。解决办

2014-07-30 21:44:35 2369

原创 android睡眠过程中对进程的处理

电源

2014-07-08 14:13:47 8118 1

原创 驱动中bus,devices,driver注册的先后顺序

kernel最后在start_kernel的函数中最后调用rest_init()进行设备驱动相关的初始化,下面具体分析。

2014-06-25 17:24:57 1939

原创 驱动中suspend函数是如何被调用到的。

1.电源管理相关文件在kernel/power目录下。2.在suspend会轮询bus下的driver,然后一次调用到driver->pm->suspend方法,然后进入休眠。3.state_store->pm_suspend->enter_state->suspend_devices_and_enter->dpm_suspend_start->dpm_suspend->devic

2014-06-25 11:07:38 9676

原创 AKM e-compass获取G-sensor的方法

e-compass包括了M-sensors, e-compass结合G-sensor之后就可以得到ORI

2014-06-24 14:57:29 3995

原创 git merge的参数--squash的用处

本地分支处理完问题之后需要提交到baseline上,

2014-06-23 17:24:19 22216 1

原创 android中init.rc文件的解析问题

init.rc中文件中会通过import /init.${ro.hardware}.rc文件,这个ro.hardware应该是某个具体的属性,这个ro.hardware赋值应该是在Init进程中赋值的。启动时uboot会传输comandline给kernel,comandline中有个参数为androidboot.hardware,这个参数在init进程的解析中会用到,并且会赋值给ro.har

2014-06-10 16:47:30 4051

原创 sensor调试过程中HAL层数据不能传输到app

最近在调试e-compass传感器时,碰到个奇怪的问题,驱动可以正常上报数据,但是数据到了HAL层后一直不能上传给app。经过debug,发现这是厂商过发来的代码中存在的一个bug,open的fd没有设置为NOBLOCK导致的。该厂家的HAL代码是直接从sensorbase类中派生出来的,而sensorbase的openinput中的open函数只是,open(devname, O_RDO

2014-06-10 16:16:34 2661

原创 tty_struct数据结构

tty_driver是在驱动中通过alloc_tty_driver函数分配的,这个进一步调用kzalloc来申请内存,所以分配到的内存都是已经初始化为0的了。所以tty_driver中的flags等未被赋值的都是0。这里需要注意!因为到时候open的时候,会初始化tty_struct,而tty_struct中的部分值是根据tty_driver中的flags来初始化的!str

2014-04-18 17:22:46 6460

原创 名博推荐

http://blog.chinaunix.net/uid/20543672/cid-6422-list-1.html

2014-02-07 14:09:11 1122

原创 vmlinux.lds的理解

内核源码中使用到的vmlinux.lds总共有两个分别是1.arch/arm/kernel/vmlinux.lds2.arch/arm/boot/compressed/vmlinux.lds其中1用于生成未压缩的内核image2用于生成经过压缩的内核image这两个ld 文件中的连接地址有一些区别/kernel/vmlinux.lds: OUTPUT

2014-02-07 01:07:04 3190

转载 生成zimage的步骤

更具体过程参考http://blog.chinaunix.net/uid-2630593-id-2530229.html内核的uimage的生成过程:1.原始未压缩的vmlinux原料:各目录下的.o文件+arch/arm/kernel/vmlinux.lds2.去除调试信息和符号连接等之后的image原料:步骤1的vmlinux3.用gzip生成压缩内核p

2014-02-06 23:56:15 2407

原创 uboot结构初步分析

简单记录按先后顺序1.arch/arm/cpu/arm920t/start.s                                                                        start2.board/your vendor name/your board name/lowlevel_init.s

2013-09-15 21:47:30 1221

原创 android自定义LOG输出位置

android的log buffer分为main、radio、event等,/system/core/liblog/Logd_write.c中通过在__android_log_write这个函数中添加合适的宏定义便可以将对应的TAG log输出到指定的buffer中

2013-08-30 16:52:44 2378

原创 ubuntu firefox英文版部分网页乱码问题

安装的是UBUNTU12.04,安装完后某天在登录公司的邮件服务器的时候发现邮件列表的标题栏的中文全部显示不出来都是?号应该是firefox的字体设置的问题,没有支持中文.Edit->Preferences->Content在Languages -> Choose可以看见当前只有English所以点击Select a language to add将Chinese/Chin

2013-08-26 00:08:03 2632

翻译 将virtualbox的状态栏隐藏

隐藏状态栏命令首先在shell中输入:VBoxManage setextradata global GUI/Customizations noStatusBar然后启动虚拟机,这个时候状态栏应该没有了。加入想恢复状态栏的话输入如下命令:VBoxManage setextradata global GUI/Customizations MenuBar,StatusBar

2013-08-18 15:39:32 5527

转载 ubuntu12.04中的部分快捷键

转自其它网站的blog,但是找不到原创了。备用,只验证了部分。——————————————————————————今天才发现Linux下的终端有这么多好用的快捷键。 Shift+Ctrl+T:新建标签页         Shift+Ctrl+W:关闭标签页Ctrl+PageUp:前一标签页 Ctrl+PageDown:后一标签页 Shift+Ctrl+PageU

2013-08-18 15:21:59 902

makefile中文manual

详细描述乐makefile的语法,是makefile的中文翻译版本。

2014-08-21

Indicator-Sysmonitor

Indicator-Sysmonitor脚本,结合Indicator-Sysmonitor使用可以在顶部工具栏显示CPU,内存占用率,CPU温度,网络上行、下行速度。

2013-08-17

grub4dos-0.4.4-2009-01-11

可以从windows启动而不必修改mbr的grub

2013-01-14

linux s3c2440LCD驱动分析

非常详细的LCD驱动分析!从驱动注册到用户空间的测试程序,重点分析了probe函数

2012-08-17

μCOS-II V2.83 从ADS1.2工程移植到MDK4.2源码工程 适用TQ2440开发板

使用TQ2440开发板的MDK4.2的μC/OS 工程。从开发板光盘ADS1.2修改,已删除部分任务只保留了main任务和task0。可以从终端看到打印信息

2012-01-04

μCOS-II V2.83 从ADS1.2工程移植到MDK4.2源码工程 使用TQ2440开发板

使用TQ2440开发板的MDK4.2的μC/OS 工程。从开发板光盘ADS1.2修改,已删除部分任务只保留了main任务和task0。可以从终端看到打印信息

2012-01-04

uCOSII学习教程

对于理解操作系统有帮助,初学操作系统必看

2008-11-21

空空如也

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

TA关注的人

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