OS
文章平均质量分 87
乾龙_Heron
Linux ARM POWER8 cc-NUMA BootLoader
展开
-
程序动态链接、静态连接的对比(优缺点)
为什么要动态链接? 也可以问,动态链接相对于静态连接有啥好处?首先明确动态链接和静态连接的区别:静态连接就是在程序编译阶段,将程序需要的所有东西打包放到一起;而动态链接是在程序需要运行时,根据需要动态的决定链接哪一个库,哪一个函数。举个例子,每个人就是一个程序,磁盘就是一间房子,库文件就是人们生活的必需品(如锅碗瓢盆),静态连接就是:每个人都带着自己的锅碗瓢盆进入一间房子,房子里只有一原创 2012-10-24 20:52:06 · 5964 阅读 · 1 评论 -
linux内存管理浅析
[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问,实际上内存被访问了N+1次(N=页表转载 2013-06-06 14:39:27 · 1853 阅读 · 0 评论 -
malloc()之后,内核发生了什么?
考虑这样一种常见的情况:用户进程调用malloc()动态分配了一块内存空间,再对这块内存进行访问。这些用户空间发生的事会引发内核空间的那些反映?本文将简单为您解答。1.brk系统调用服务例程malloc()是一个API,这个函数在库中封装了系统调用brk。因此如果调用malloc,那么首先会引发brk系统调用执行的过程。brk()在内核中对应的系统调用服务例程为SYSCALL_DE转载 2013-06-06 22:08:38 · 4833 阅读 · 0 评论 -
【解决】:linux下 mount IMG文件提示“您必须制定文件系统类型”
以ubuntu12.04为例:假设我有个文件test.img,要挂载到/mnt/img文件目录下:操作如下:$ cd “你的img镜像所在目录”$ losetup /dev/loop0 test.img //如果提示loop0忙的话,尝试loop1等等$ sudo kpartx -av /dev/loop0 //如果没有装kpartx的话,apt-get装一下add m原创 2012-12-11 20:20:04 · 13229 阅读 · 6 评论 -
ARMv8(aarch64)页表建立过程详细分析
目录文件修订记录...2目录...31ARMv8存储管理...41.1Aarch64 Linux中的内存布局... 41.2AArch64的虚拟地址格式...41.2.14K页时的虚拟地址...41.2.264K页时的虚拟地址...52head.S页表建立过程分析...62.1页表建立函数__create_page_tables.62.1.1pgtbl原创 2013-06-08 17:39:57 · 28240 阅读 · 2 评论 -
make 的常见错误信息
make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当makefile本身存在语法错误无法被make解析并执行时,前缀包含了makefile文件名和出现错误的行号。在下述的错误列表中,省略了普通前缀:转载 2013-08-13 10:06:19 · 5395 阅读 · 0 评论 -
【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 · 4132 阅读 · 0 评论 -
Why the "volatile" type class should not be used
------------------------------------------------C programmers have often taken volatile to mean that the variable could bechanged outside of the current thread of execution; as a result, they ares转载 2013-12-23 10:26:46 · 1436 阅读 · 0 评论 -
通过cat /proc/cpuinfo看处理器特点
通过cat /proc/cpuinfo看处理器特点原创 2014-02-27 15:27:38 · 16296 阅读 · 0 评论 -
ARMv8 Linux内核异常处理过程分析
看了Linaro提供的开源ARMv8 Linux内核源码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,详细分析之。原创 2014-05-30 17:13:12 · 9177 阅读 · 0 评论 -
ARM上电启动及Uboot代码分析
网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射、体系结构级操作介绍很少,都是直接开始Start.s代码的阅读。本文拟详细分析Uboot从上电,到第一条指令的执行,同时分析代码对于cache、TLB等部件的操作过程。以下内容以u-boot-2012.04.01源码为例,从网上很容易下载该版本。原创 2014-05-30 17:30:56 · 17805 阅读 · 72 评论 -
ARMv8 Linux内核源码分析:__flush_dcache_all()
ARMv8 Linux内核源码分析:__flush_dcache_all()原创 2014-05-30 16:56:35 · 3234 阅读 · 0 评论 -
ARM多核处理器启动过程分析
你想知道多核处理器是否如何启动的?一张图就够了原创 2014-05-30 17:00:01 · 25559 阅读 · 1 评论 -
【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
1. 内核没开MMU之前有虚拟地址吗?没有MMU哪来的虚拟地址?答:有,因为加载时地址和运行时地址不同导致的没打开MMU之前也会有虚实地址问题。2. 加载时地址和运行时地址什么区别,为什么有这种区别?答:加载时地址:把可执行文件放到物理内存的内存地址,例如把镜像放到0x80000000地址处,则加载时地址=0x80000000运行时地址:镜像生成后的虚拟地址,由编译器和连接脚本决定。内核镜像放到内存中时,放置的地址是任意的,所以要考虑到这种情况,在没打开mmu之前使用内存中的数据都要计算偏移原创 2014-09-29 10:55:21 · 4168 阅读 · 4 评论 -
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 · 9387 阅读 · 0 评论 -
Spark0.8.0在64bit Centos6.2上详细安装记录
Spark0.8.0在16节点机群上的详细安装记录。原创 2014-03-18 09:00:11 · 3554 阅读 · 0 评论 -
【解决】挂载img文件时mount: you must specify the filesystem type
【解决】挂载img文件时mount: you must specify the filesystem type原创 2016-11-19 12:33:13 · 6354 阅读 · 0 评论 -
Flush-Cache/Page-Lock/Flush-TLB说明
Flush-Cache/Page-Lock/Flush-TLB说明 理论上顺序:获得页面锁,保证后续flush操作完成之前不允许继续读写 Flush cache Flush tlb以下用numa_migrate_pages系统调用,内核中是kernel_migrate_pages服务函数,以X86体系结构作为说明内核代码流程:kernel_migrate_page...原创 2018-08-13 12:59:40 · 1037 阅读 · 0 评论 -
【解决】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 · 41686 阅读 · 4 评论 -
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 · 1890 阅读 · 0 评论 -
ARM Linux 的TLB miss和page fault的异常处理
ARMLinux的TLB miss处理过程——Heron(2012.11.23)在ARM架构下,TLB miss后的工作绝大多数情况是由hardwarepage table walk完成,特殊情况下hardware page table walk可以被关闭,此时发生TLB miss后CPU就会产生一个translationfault,剩下的工作由OS接管,完成对于translation f原创 2012-11-23 16:06:29 · 10109 阅读 · 0 评论 -
简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析
几乎看什么内核漏洞分析之类的文章,第一眼都是被 cat /proc/{pid}/maps产生的一堆奇怪的信息唬住了,都不敢往下看居然没有搜到关于它们的详细介绍,旁边也没有表头什么的解释信息那就我来整理一下吧,方便后人ls /proc 能看到一些数字命名的文件夹,这个就不多说了,什么pid、fd的知识还是容易弄到的拿init开刀,[root@localhost proc]转载 2013-01-23 17:04:33 · 2854 阅读 · 0 评论 -
查看正在运行的动态链接的程序中,某个动态库中函数的虚拟地址
目前,大部分可执行程序为了节省内存空间等目的,都是动态链接的, 动态链接的程序在每次运行时,所依赖的动态库的地址总是变化的,那么库中的函数地址也跟着变化。如何在程序(动态链接的)运行期间,查看某个库函数的虚拟地址?方法很简单,首先确定,你需要查看的函数,在哪个动态库中,并且确定该函数相对于该动态库的相对地址。其次,在程序运行期间,查看程序的映射表,找到动态库的加载地址。最后将这两个地址相加,就原创 2013-01-23 16:44:02 · 7824 阅读 · 2 评论 -
【解答】arm架构的linux内核中,clrex指令的作用是什么,内核中什么时候才会用到?
先看clrex指令的作用:《arm architecture reference manual》B2-1292以下简称arm arm手册The ClearExclusiveLocal() procedure takes as arguments the processor identifier processorid . The procedure clears the local rec原创 2013-01-24 10:27:03 · 5083 阅读 · 0 评论 -
【解答】arm架构的linux内核,软件线程切换的时候,TLB作废吗,cache作废吗?
首先明确:linux下,线程即进程这种纠结的问题,必须读内核源码才能找到答案,ok,let's go!armv8 内核中上下文切换代码:1、linaro-aarch64/kernel/sched/core.c line 1852 context_switch==>该函数调用两个主要函数:switch_mm(),switch_to()如下所示2、arch/arm6原创 2013-01-24 10:41:30 · 2826 阅读 · 0 评论 -
【解决交叉编译工具链问题】bash: gcc:no such file or directory
在进行交叉编译工具链安装时,有三种方法:1、源码编译,手动安装2、二进制可执行文件直接安装3、直接解压工具链,手动修改环境变量为了方便,我们多用方法3进行安装。但是问题来了,你的工具链制作时有可能是针对32位OS的,但是你的虚拟机有可能是64位的。这就导致一个问题:修改了环境变量后,source以下,用tab按键能补齐命令,但是执行"cross-compiler-gcc -原创 2013-01-16 21:52:41 · 8031 阅读 · 0 评论 -
【解决】win7桌面上的“计算机”图标双击打开的是“库”,改成双击打开是“计算机”
有时候,win7下双击桌面上的“计算机”图标,打开的不再是显示磁盘的那个“我的电脑”界面,而是显示“库”的界面,开始菜单里的那个“计算机”,单击打开的也是“库”(如图),用起来感觉很不方便,修改成双击打开的是“我的电脑”会比较方便。修改方法:在桌面最下面的任务栏上,找到计算机那个快捷图标,右键——windows资源管理器——右键——属性,打开原创 2013-02-21 10:15:07 · 14051 阅读 · 0 评论 -
计算机是如何启动的?
从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它。下面就是我整理的笔记。零、boot的含义先问一个问题,"启动"用英语怎么说?回答是boot。可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootst转载 2013-02-22 09:09:42 · 1165 阅读 · 0 评论 -
磁盘DMA过程分析
当我们在应用程序中编写write系统调用,向磁盘中写入数据时,写入请求会先调用底层写函数,将请求先写入内存中的页高速缓存(page cache)中,写入成功则立刻返回,真正的写入磁盘操作会延迟执行。Page cache是硬盘在内存中的一个缓存,是linux内核所使用的主要磁盘高速缓存,在绝大多数情况下,内核在读写磁盘时都引用page cache(极少数应用会绕过页高速缓存,如数据库软件)。当把原创 2013-03-30 11:03:42 · 3894 阅读 · 2 评论 -
linux磁盘写操作实时跟踪
事实上,我总是对linux开源社区的无名英雄们怀着无限的敬意,因此除了完成工作中需要的功能以外,首先想到的是分享,本篇文章以GPL发布,在你转发的时候,请遵循GPL协议的规定,在此首先贴出GPL公共许可证,或许你会觉得这过于啰嗦,事实上这是必要的。请谅解。为了不妨碍大家的阅读,在此我给出GPLv3的连接地址。 (GPLv3) 下面进入正题,我打算分几个步骤来转载 2013-03-19 14:38:00 · 1753 阅读 · 0 评论 -
【解决】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 · 37480 阅读 · 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 · 5340 阅读 · 0 评论 -
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 · 3632 阅读 · 0 评论 -
逻辑地址,线性地址,物理地址
逻辑地址转线性地址机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过 MMU (CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的 hello world 程序,用 gcc 编译,再反汇编后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的 DS 数转载 2013-04-23 17:11:45 · 1851 阅读 · 0 评论 -
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 · 1752 阅读 · 0 评论 -
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 · 1841 阅读 · 0 评论 -
内核动态补丁(kpatch)及kpatch pushsection popsection previous的解释
内核动态补丁(katch)解释本文阅读体验不好,因此做了pdf版本,点击下载,如果你没有分数,可以直接留言找我要pdf版本。内核可以在运行时动态执行补丁中的代码(kpatch),而不需要重启后再运行补丁代码。对于kpatch的运行原理,可以参看[3], kpatch基于ftrace技术,可以在内核运行时动态的(即不需要重启)、整体替换某个函数(但需要暂时停止所有运行时进程)。如图1所示,具...原创 2018-11-19 16:26:00 · 3035 阅读 · 4 评论