自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(159)
  • 资源 (5)
  • 收藏
  • 关注

原创 armv8(aarch64)linux内核中flush_dcache_all函数详细分析

/* *  __flush_dcache_all()*  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ENTRY(__flush_dcache_all)//保证之前的访存指令的顺序    dsb sy                   //读cache level id regi

2013-09-26 17:49:36 10053 2

转载 C语言运算符优先级记录-为了自己查找方便

优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .

2013-09-16 22:44:34 1229

转载 谈谈离职和跳槽

谈离职和跳槽这篇文章是我在部门会议上一次发言的总结。之所以会有这次会议,是因为我的一名员工向我提出了辞职,在思索了几天后,我整理了一下自己的思路,于是便有了这次的会议和现在的这篇文章。收入是由什么决定的?这位员工辞职的原因主要有两个:1.公司的薪水无法达到他的预期,未来一年在公司的收入前景也不是很明确。2.想要去做更底层的开发,方向是使用C/C++开发3D图

2013-09-16 09:22:16 2563 1

转载 LeetCode Question Difficulty Distribution : Sheet1

LeetCode Question Difficulty Distribution : Sheet1       IDQuestionDiffFreqData StructureAlgorithms   

2013-09-11 09:44:39 2569

原创 ARMv8 Linux内核异常处理过程分析

看了Linaro提供的开源ARMv8 Linux内核源码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,简单分析。LinaroARMv8工程:http://www.linaro.org/engineering/engineering-projects/armv81.1 Linux内核异常处理相关文件Linux内核中,异常处理主要由两个文件完成,entry.S和traps.c,

2013-09-08 10:50:40 37649 1

原创 【linux内核剖析笔记】linux支持的终端设备类型及终端、控制台、串口、UART、RS232、RS485的联系和区别

1.1 Linux支持的终端设备类型可以大致分为5种:串行端口终端、伪终端、控制终端、控制台、其他类型,如下图所示;1.1.1 串行端口终端(/dev/ttySn)顾名思义,串行端口终端指的是终端,终端是什么?是具体的设备!所以串行端口终端指的是使用计算机串行端口连接的终端设备,这些串行端口对应的设备文件名在Linux /dev/目录下是ttyS0 ttyS1.1.

2013-09-05 22:07:33 4189

原创 ARMv8 Linux内核head.S源码分析

ARMv8 Linue 内核Head.S主要工作内容:1、 从el2特权级退回到el12、 确认处理器类型3、 计算内核镜像的起始物理地址及物理地址与虚拟地址之间的偏移4、 验证设备树的地址是否有效5、 创建页表,用于启动内核6、 设置CPU(cpu_setup),用于使能MMU7、 使能MMU8、 交换数据段9、 跳转到start_kernel函数继续运行。   /*

2013-09-03 11:55:11 9419

转载 Python正则表达式中文手册

Python正则表达式操作指南原文出处:http://www.amk.ca/python/howto/regex/原文作者:A.M. Kuchling (amk@amk.ca)授权许可:创作共用协议翻译人员:FireHare校对人员:Leal适用版本:Python 1.5 及后续版本摘要本文是通过Python的 re 模块来使用正则表达式的一个入门教程,和库参考手...

2013-09-02 20:25:33 3701 2

翻译 为什么C语言在2013年仍然很重要:一个简单的例子

本文作者在开发Dynym项目,这是一个动态语言的通用运行时。在开发时,作者以其他语言的运行速度作为基础比较语言的运行速度,因此发现了一些小秘密。迭代计算斐波那契数列是测试各种语言执行速度的常见方法。作者以不同的语言进行测试,最终发现C语言要比Python编写的计算斐波那契数列快278.5倍。在底层开发,以及专注性能的应用程序中,选择是显而易见的。而为什么会有如此大的运行性能差距呢。作者进一步研究了程序的反汇编代码,发现差别出在内存的访问次数,以及预测的CPU指令的正确性方面

2013-09-01 13:08:24 2444

转载 typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);

typedef int(init_fnc_t) (void);这个就是一个取别名的过程。我们通常情况下会如下使用 typedef :typedef int MyInt;MyInt a;这个时候我们的MyInt 就和int是一样的意思。而对于函数的申明我们通常会这样申明:int InitFunction() (void);此时表示申明了一个函数名为Init

2013-08-20 17:40:18 1159

转载 How to become a hacker 译文(如何成为一名黑客)

作者:Eric Steven Raymond 译者:刘海粟(此文部分内容参考Ken Lee   前辈的译文)为何有此文章? 身为《黑客辞典》[1]和其他一些知名文档的作者, 我常收到热心的网络新人的电子邮件, 问及“如何可以成为一名神奇的黑客?”。 早在1996年我便注意到,好像还没有任何一个“常见问题”或者网络文档论述过这个重要的问题,于是我决定撰写此文。我相信很多黑

2013-08-16 14:50:53 5794 1

转载 make 的常见错误信息

make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当makefile本身存在语法错误无法被make解析并执行时,前缀包含了makefile文件名和出现错误的行号。在下述的错误列表中,省略了普通前缀:

2013-08-13 10:06:19 5528

原创 【解决】yum 安装 出错 Error: Protected multilib versions:

我安装zlib出错:yum install zlib-1.2.3-29.el6.i686Error: Protected multilib versions: zlib-1.2.3-29.el6.i686 != zlib-1.2.3-27.el6.x86_64 You could try using --skip-broken to work around the problem

2013-07-26 16:01:47 41101 3

转载 malloc()之后,内核发生了什么?

考虑这样一种常见的情况:用户进程调用malloc()动态分配了一块内存空间,再对这块内存进行访问。这些用户空间发生的事会引发内核空间的那些反映?本文将简单为您解答。1.brk系统调用服务例程malloc()是一个API,这个函数在库中封装了系统调用brk。因此如果调用malloc,那么首先会引发brk系统调用执行的过程。brk()在内核中对应的系统调用服务例程为SYSCALL_DE

2013-06-06 22:08:38 4909

转载 linux内存管理浅析

[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问,实际上内存被访问了N+1次(N=页表

2013-06-06 14:39:27 1862

原创 【解决】xterm Xt error: Can't open display: xterm: DISPLAY is not set

当你运行xterm出现错误如下:xterm Xt error: Can't open display:xterm: DISPLAY is not set我的系统centos6.2解决办法:1、首先确定你安装了x11:yum -y install xorg-x11-xauth2、其次修改配置文件:/etc/ssh/sshd_config, AllowTcpForwar

2013-05-30 22:44:09 42131 4

转载 mmap方法实现物理内存到用户虚拟地址的映射

内核空间内存管理:物理内存被划分成struct page来进行管理。然后把所有page划分成不同的struct zone,Linux中使用了三种zone:ZONE_DMA;ZONE_NORMAL;ZONE_HIGHMEM;内核中获取内核虚拟内存有三种途径:获取页:如果你需要用到struct page

2013-05-17 22:46:13 3801

转载 【解决】")syntax error: invalid arithmetic operator (error token is "

http://blog.sciencenet.cn/blog-588243-502678.html?COLLCC=132586598&Your error message seems to indicate pollution of your data with CRs.")syntax error: invalid arithmetic operator (err

2013-05-07 12:34:38 21840

转载 ARM Linux 3.x的设备树(Device Tree)

原文地址:http://blog.csdn.net/21cnbao/article/details/84575461.    ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后

2013-05-03 14:48:50 1854

转载 Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)

好文,不得不转!!(http://blog.chinaunix.net/uid-20543672-id-3151113.html) Linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内

2013-05-03 14:34:04 1761

转载 Linux 物理内存和虚拟内存设置(zt)

使用内核源代码中的定义 PHYS_OFFSET:系统内存的物理起始地址,板级相关,在include/asm-arm/arch-xxx/memory.h中 PAGE_OFFSET:系统内存的虚拟起始地址,体系结构相关,为0xC0000000,在include/asm-arm/memory.h中 MEM_SIZE:系统内存大小,如果板级(include/asm-arm/arch-xxx/x

2013-05-03 10:40:33 1896

转载 重定向 Bash “time” 命令的输出

bash下time是一个很有用的命令,它可以为一段脚本或一个程序的执行计时,这通常在粗略比较程序执行效率的时候很方便。但是你会发现,time命令输出的时间文字不能被简单地重定向,例如重定向至一个文本文件,只能显示在屏幕上,这对于非交互计时很不方便。例如:time command > file.txt这篇文章讨论了原因和解决办法(http://blog.csdn.net/se

2013-04-25 09:54:12 3877

转载 逻辑地址,线性地址,物理地址

逻辑地址转线性地址机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过 MMU (CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的 hello world 程序,用 gcc 编译,再反汇编后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的 DS 数

2013-04-23 17:11:45 1870

转载 关于高端内存的权威解释

注:本文是我见到的所有关于高端内存解释的最详细、最清晰的解释,其他帖子寥寥数语写的都是垃圾,保存下来只为方便后来人和我自己,感谢原文作者!原文地址:http://bbs.chinaunix.net/thread-1938084-1-1.html注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE

2013-04-23 15:39:18 6697

转载 Ubuntu:解决非官方源导致的GPG error

Ubuntu:解决非官方源导致的GPG error[日期:2010-03-30]来源:Ubuntu社区  作者:Ubuntu[字体:大 中 小]当我们在/etc/apt/sources.list中加入非Ubuntu官方源来安装、更新部分软件时,sudo apt-get update会有错误提示下面以我使用的ibus非官方源作为示例

2013-04-11 08:51:42 3759

转载 Intel内存虚拟化技术分析

VPID类似ASID, ASID用以区分不同进程的地址空间,切换时不用刷新TLB。VPID用来区分不同的虚拟处理器地址空间,虚拟机切换时不用刷新TLB。 VMM为每个VMCS分配一个唯一的VPID,在VMCS中将Enable VPID置1就可以启用该功能。Extended page table(EPT) 页表遍历方式硬件支持的情况下,当VM ENTRY (optio

2013-04-10 15:42:43 5851

转载 帮你理解网关、ARP、IP、MAC、路由

假设你叫小不点(本地主机),住在一个大院子(本地局域网)里,有很多邻居(网络邻居),门口传达室有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个伙伴玩,只要你在院子里大喊一声他的名字(ping他一下),他听到了就会回应你,并且跑出来跟你玩。但是你不被允许走出大门,你与外界的一切联系,都必须李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个

2013-04-10 09:00:01 1728 1

原创 【解决】centos缺少共享库:libstdc++.so.6

当在centos6.2下执行某些命令时,有缺少共享库的报错:error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory解决办法:1、执行命令: yum whatprovides libstdc++.so.6然

2013-04-09 21:55:22 37783 5

原创 【解决】Centos 6.2 yum update报错:libotf.so.0

当在Centos6.2执行yum update时,报错如下:Setting up Update ProcessResolving Dependencies--> Running transaction check---> Package openmpi.x86_64 0:1.5.3-3.el6 will be updated--> Processing Dependency

2013-04-09 20:48:22 5353

原创 磁盘DMA过程分析

当我们在应用程序中编写write系统调用,向磁盘中写入数据时,写入请求会先调用底层写函数,将请求先写入内存中的页高速缓存(page cache)中,写入成功则立刻返回,真正的写入磁盘操作会延迟执行。Page cache是硬盘在内存中的一个缓存,是linux内核所使用的主要磁盘高速缓存,在绝大多数情况下,内核在读写磁盘时都引用page cache(极少数应用会绕过页高速缓存,如数据库软件)。当把

2013-03-30 11:03:42 3982 2

转载 linux磁盘写操作实时跟踪

事实上,我总是对linux开源社区的无名英雄们怀着无限的敬意,因此除了完成工作中需要的功能以外,首先想到的是分享,本篇文章以GPL发布,在你转发的时候,请遵循GPL协议的规定,在此首先贴出GPL公共许可证,或许你会觉得这过于啰嗦,事实上这是必要的。请谅解。为了不妨碍大家的阅读,在此我给出GPLv3的连接地址。 (GPLv3)     下面进入正题,我打算分几个步骤来

2013-03-19 14:38:00 1770

原创 sed在行首(行尾)添加字符串;在某行后添加多行字符串

sed在行首添加字符串;sed ‘s/^/xxx/'  filename >output:^符号代表行首sed在行尾添加字符串;sed ‘s/$/string/' filename>output:$符号代表行尾sed在匹配某行后添加一行字符串:sed '/string1/c\string1\nstring2' filename>output:用str

2013-03-13 19:17:18 87858 5

转载 U-boot中关于0xdeadbeef说明【目前最详细的】

U-boot 中的 .balignl 16 0xdeadbeef 说明U-boot 版本:1.2.0在 U-boot 的 cpu/arm920t/start.S 里有一处代码为 .balignl 16 0xdeadbeef  ,初一看不知道意欲何为,但从伪指令 .balignl 来看,实际上就是对齐。对于某些处理器来说,所编写的代码不对齐并不会报错,但编译器为了优化,也可能会自动帮你对

2013-03-11 09:20:01 5967

原创 chrome、firefox等浏览器下使用“发送到onenote”

以前chrome不能使用“发送到onenote”这种功能,现在有个软件很完美的解决了这个问题:首先下载安装:Bring to OneNote http://www.onenotegem.com/bring-to-onenote.html其次下载安装:Bring to OneNote for Chrome http://www.onenotegem.com/b

2013-03-05 22:00:43 8274

转载 norflash启动和nandflash启动

S3C2440的启动时读取的第一条指令是在0x00上,分为成nand flash和nor flash上启动。 nand flash:适合大容量数据存储,类似硬盘;nor flash:适合小容量的程序或数据存储,类似小硬盘;sdram:主要用于程序执行时的程序存储、执行或计算,类似内存。 Nor flash的有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在

2013-03-05 10:34:18 1806

转载 计算机是如何启动的?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,"启动"用英语怎么说?回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootst

2013-02-22 09:09:42 1175

原创 【解决】win7桌面上的“计算机”图标双击打开的是“库”,改成双击打开是“计算机”

有时候,win7下双击桌面上的“计算机”图标,打开的不再是显示磁盘的那个“我的电脑”界面,而是显示“库”的界面,开始菜单里的那个“计算机”,单击打开的也是“库”(如图),用起来感觉很不方便,修改成双击打开的是“我的电脑”会比较方便。修改方法:在桌面最下面的任务栏上,找到计算机那个快捷图标,右键——windows资源管理器——右键——属性,打开

2013-02-21 10:15:07 14170

原创 【解决】SPECCPU编译出错“f951: error: argument to '-O' should be a non-negative integer”

交叉编译speccpu2006时,遇到一个错误,把错误现象摘录如下:1、执行编译命令:runspec --action=build --config=armv8.cfg --rebuild  --tune=base 4102、编译报错结果:runspec v6152 - Copyright 1999-2008 Standard Performance Evaluation Corpor

2013-02-19 15:02:36 7097

转载 Linus:利用二级指针删除单向链表

感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图)Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。下面是Linus的教学原文及翻译——“At the op

2013-02-04 12:58:08 1220

原创 shell中,合成多个命令功能,创建新命令

用shell时,有的命令用着很不舒服,可以自己修改shell命令的功能组合,创建新的命令。比如,我想把cd命令和ls命令合成到一起重新命名为cd,即每次执行cd命令时,顺便把目录中的内容打印出来。1、首先以root权限进入/usr/bin目录,在该目录下编写脚本命名为cl.sh,内容如下:#!/bin/bashif [ -d $1 ]thencd $1ls --co

2013-01-25 17:18:20 3035

关于内核动态补丁技术(kpatch)

内核可以在运行时动态执行补丁中的代码(kpatch),而不需要重启后再运行补丁代码。对于kpatch的运行原理,可以参看[3], kpatch基于ftrace技术,可以在内核运行时动态的(即不需要重启)、整体替换某个函数(但需要暂时停止所有运行时进程)。如图1所示,具体的,当内核运行之前,加入原来的内核函数名字为func_original(),则内核编译时就先把patch做好(假设替换函数为func_replace()),同时编译进内核中。本文主要解释从gnu汇编原语角度如何实现kpatch,具体kpatch机制可以参考文献[3]。内核文件arch/arm64/include/asm/alternative.h中有一段汇编,涉及内核动态patch技术。

2018-11-19

SPEC 2017 int rate command lines

SPECCPU 2017 整型测试程序的命令行,从代码中抠出,用于单独运行benchmark进行实验

2018-06-01

Event in gem5

gem5底层如何实现模拟处理器并行执行的?如何实现准确计算cycle数?

2017-01-21

ARMv8 Linux内核异常处理分析

看了 Linaro 提供的开源 ARMv8 Linux 内核源码,发现 ARMv8 异常处理与 ARMv7 及之前的架构有所不同,详细分析之

2014-05-30

ARM上电启动及Uboot代码分析

网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射、体系结构级操作介绍很少,都是直接开始Start.s代码的阅读。本文拟详细分析Uboot从上电,到第一条指令的执行,同时分析代码对于cache、TLB等部件的操作过程。 以下内容以u-boot-2012.04.01源码为例,从网上很容易下载该版本。

2014-05-30

空空如也

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

TA关注的人

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