- 博客(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)
2018-11-19
ARMv8 Linux内核异常处理分析
2014-05-30
ARM上电启动及Uboot代码分析
2014-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人