![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 59
乾龙_Heron
Linux ARM POWER8 cc-NUMA BootLoader
展开
-
linux内核代码预处理后便于阅读
inux 内核庞大而复杂。内核代码阅读的时候,有没有遇到因为宏定义或者inline层次太深而不知道到底代码是什么样子。代码预处理可以解决这个难题。 平台:linux 3.4.5 ARM,PC linux上类似,更简单些。加V=1重新编译内核make内核增加V=1选项,会详细打印编译过程,-B是要求重新编译内核所有模块。cd linux-3.4.5 && mak...转载 2018-12-25 15:28:33 · 1518 阅读 · 1 评论 -
【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
1. 内核没开MMU之前有虚拟地址吗?没有MMU哪来的虚拟地址?答:有,因为加载时地址和运行时地址不同导致的没打开MMU之前也会有虚实地址问题。2. 加载时地址和运行时地址什么区别,为什么有这种区别?答:加载时地址:把可执行文件放到物理内存的内存地址,例如把镜像放到0x80000000地址处,则加载时地址=0x80000000运行时地址:镜像生成后的虚拟地址,由编译器和连接脚本决定。内核镜像放到内存中时,放置的地址是任意的,所以要考虑到这种情况,在没打开mmu之前使用内存中的数据都要计算偏移原创 2014-09-29 10:55:21 · 4173 阅读 · 4 评论 -
ARMv8 Linux内核异常处理过程分析
看了Linaro提供的开源ARMv8 Linux内核源码,发现ARMv8异常处理与ARMv7及之前的架构有所不同,详细分析之。原创 2014-05-30 17:13:12 · 9257 阅读 · 0 评论 -
ARM上电启动及Uboot代码分析
网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射、体系结构级操作介绍很少,都是直接开始Start.s代码的阅读。本文拟详细分析Uboot从上电,到第一条指令的执行,同时分析代码对于cache、TLB等部件的操作过程。以下内容以u-boot-2012.04.01源码为例,从网上很容易下载该版本。原创 2014-05-30 17:30:56 · 17851 阅读 · 72 评论 -
ARM多核处理器启动过程分析
你想知道多核处理器是否如何启动的?一张图就够了原创 2014-05-30 17:00:01 · 25689 阅读 · 1 评论 -
ARMv8 Linux内核源码分析:__flush_dcache_all()
ARMv8 Linux内核源码分析:__flush_dcache_all()原创 2014-05-30 16:56:35 · 3252 阅读 · 0 评论 -
shell 语法示例
#!/bin/shecho "This is the first shell script!"#=============This is comment.============#==================变量===================a="hello world!"echo $aecho "I am student. $a"#=================转载 2014-04-04 15:26:13 · 1266 阅读 · 0 评论 -
通过cat /proc/cpuinfo看处理器特点
通过cat /proc/cpuinfo看处理器特点原创 2014-02-27 15:27:38 · 16312 阅读 · 0 评论 -
Centos6.2挂载新硬盘、分区、格式化、挂载
Centos6.2挂载新硬盘、分区、格式化、挂载原创 2014-02-26 16:11:19 · 6594 阅读 · 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 · 1443 阅读 · 0 评论 -
linux下补丁(patch)的制作与应用
命令简介用到的两个命令是diff和patch。diffdiff可以比较两个东西,并可同时记录下二者的区别。制作补丁时的一般用法和常见选项为:diff 【选项】 源文件(夹) 目的文件(夹)-r递归。设置后diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。-N选项确保补丁文件将正确地处理已经创建或删除文件的情况。-u输出每个修转载 2013-11-28 09:17:20 · 1880 阅读 · 0 评论 -
妈咪,我找到了!15实用的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易。本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。首先,在你的home目录下面创建下面的空文件,来测试下面的find命令示例。 # vim create_sample_files.shtouch MybashProgram.shtouch转载 2013-09-27 09:14:01 · 2079 阅读 · 0 评论 -
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 · 9961 阅读 · 2 评论 -
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 · 37590 阅读 · 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 · 4161 阅读 · 0 评论 -
make 的常见错误信息
make执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“-”、或者make使用“-k”选项执行时。make执行过程的致命错误都带有前缀字符串“***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“make”);另外一种是当makefile本身存在语法错误无法被make解析并执行时,前缀包含了makefile文件名和出现错误的行号。在下述的错误列表中,省略了普通前缀:转载 2013-08-13 10:06:19 · 5470 阅读 · 0 评论 -
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 · 28685 阅读 · 2 评论 -
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 · 9405 阅读 · 0 评论 -
ARM在不同模式下如何区别同名寄存器(如fiq模式下的R8_fiq与其他模式下的R8),从而访问不同的寄存器
首先看下ARM状态下不同模式下的的寄存器,共37个,31个通用的。好,问题来了:在快速中断模式下的R8_fiq与其他模式下的R8是不同的寄存器,但是在汇编代码中不会区别寄存器名字。例如MOV R8,#0x12345678,该命令在快速中断模式下运行,与处快速中断之外的模式下执行,显然访问的是不同的R8寄存器,但是这个访问不同寄存器的过程是编译器做的,还是CPU做的?原创 2012-07-05 19:49:30 · 5232 阅读 · 3 评论 -
【解决】缺少libstdc++.so.6库的原因及解决办法
【解决】缺少libstdc++.so.6库的原因及解决办法原创 2014-10-15 11:29:44 · 66607 阅读 · 5 评论 -
内核动态补丁(kpatch)及kpatch pushsection popsection previous的解释
内核动态补丁(katch)解释本文阅读体验不好,因此做了pdf版本,点击下载,如果你没有分数,可以直接留言找我要pdf版本。内核可以在运行时动态执行补丁中的代码(kpatch),而不需要重启后再运行补丁代码。对于kpatch的运行原理,可以参看[3], kpatch基于ftrace技术,可以在内核运行时动态的(即不需要重启)、整体替换某个函数(但需要暂时停止所有运行时进程)。如图1所示,具...原创 2018-11-19 16:26:00 · 3115 阅读 · 4 评论 -
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 · 1070 阅读 · 0 评论 -
SPEC 2017 int rate command lines
SPEC 2017 int rate command linesBench name Command line Run time 500.perlbench_r (3 inputs) perlbench_r_base.64 -I./lib checkspam.pl 2500 5 25 11 150 1 1 1 1 > checkspam.2500.5.25.11.150.1.1.1...原创 2018-06-01 10:25:43 · 2944 阅读 · 0 评论 -
【解决】ping超级慢 dns解析不了的原因
用了各种办法,最后发现是两个网卡同时工作,导致包冲突:enp4s0f0 Link encap:以太网 硬件地址 00:25:90:5a:8c:80 inet 地址:172.16.64.57 广播:172.16.64.255 掩码:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1...原创 2018-03-31 15:03:06 · 9320 阅读 · 1 评论 -
用valgrind kcachegind gprof2dot等生成函数调用图
为了分析大型软件动态运行时的函数调用关系,有时需要抓取其trace分析。目前一般有几种办法:原创 2017-03-16 10:16:39 · 2215 阅读 · 0 评论 -
ycsb cassandra 安装测试
1. YCSB安装wget https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4.tar.gztar zxvf ycsb-0.1.4.tar.gzcd ycsb-0.1.4Or clone the git repository and build:git clone git://github.com/brianfrankcoop原创 2016-12-19 20:12:09 · 1313 阅读 · 0 评论 -
把所有软链接替换为真实文件
把所有软链接替换为真实文件原创 2017-01-22 12:47:07 · 4790 阅读 · 0 评论 -
/usr/lib64/libstdc++.so.6: undefined reference to `memcpy@GLIBC_2.14'
swig下载地址https://sourceforge.net/projects/swig/files/swig/swig-2.0.7/如果遇到了错误:/usr/lib64/libstdc++.so.6: undefined reference to `memcpy@GLIBC_2.14' 说明你的glibc的版本太高,先把LD_LIBRARY_PATH连接到2.14的环境变量删除,也就是把gl原创 2016-11-25 11:33:59 · 11282 阅读 · 0 评论 -
升级glibc到2.14
转载:https://my.oschina.net/zhangxu0512/blog/262275今天运行一个例程,出现了/lib64/libc.so.6: version `GLIBC_2.14' not found问题,把解决过程简单记录一下。系统环境: centos6.2 现象:[root@localhost nvEncodeApp]# ./nvEncoder ./nvEncoder: /转载 2016-11-23 16:50:24 · 14767 阅读 · 0 评论 -
centos 6 gcc升级4.7/4.8
【解决】/lib/libc.so.6: version `GLIBC_2.14' not found原创 2016-11-23 15:35:22 · 1506 阅读 · 0 评论 -
【解决】挂载img文件时mount: you must specify the filesystem type
【解决】挂载img文件时mount: you must specify the filesystem type原创 2016-11-19 12:33:13 · 6416 阅读 · 0 评论 -
DMA过程分析
当我们在应用程序中编写write系统调用,向磁盘中写入数据时,写入请求会先调用底层写函数,将请求先写入内存中的页高速缓存(page cache)中,写入成功则立刻返回,真正的写入磁盘操作会延迟执行。Page cache是硬盘在内存中的一个缓存,是linux内核所使用的主要磁盘高速缓存,在绝大多数情况下,内核在读写磁盘时都引用page cache(极少数应用会绕过页高速缓存,如数据库软件)。原创 2014-05-30 17:40:58 · 7952 阅读 · 0 评论 -
ARM Linux中断机制分析
ARM Linux中断机制分析——以用户模式产生irq中断为例以下代码基于内核linux2.6.38.3(trimslice官网下载)本文主要分析ARM发生中断时的处理流程,以在usr态发生IRQ为例,即usr—>irq为例讨论。 1.内核异常向量表的初始化1.1初始化大致流程ARM linux内核启动时,首先运行的是linux/arch/arm/kerne原创 2013-02-21 14:46:04 · 14322 阅读 · 4 评论 -
Spark0.8.0在64bit Centos6.2上详细安装记录
Spark0.8.0在16节点机群上的详细安装记录。原创 2014-03-18 09:00:11 · 3564 阅读 · 0 评论 -
KVM上如何绑定虚拟机vcpu与物理CPU?
kvm虚拟机如何与物理CPU进行绑定?绑定的是CPU硬件线程还是core?如何把虚拟机中vcpu单独与物理cpu绑定?绑定命令有几个?区别是什么?那么,答案来了:原创 2015-01-09 14:04:58 · 10829 阅读 · 0 评论 -
【解决】/usr/bin/ld: cannot find -lc
【解决】/usr/bin/ld: cannot find -lc原创 2014-10-21 14:54:38 · 14328 阅读 · 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 · 13264 阅读 · 6 评论 -
malloc()之后,内核发生了什么?
考虑这样一种常见的情况:用户进程调用malloc()动态分配了一块内存空间,再对这块内存进行访问。这些用户空间发生的事会引发内核空间的那些反映?本文将简单为您解答。1.brk系统调用服务例程malloc()是一个API,这个函数在库中封装了系统调用brk。因此如果调用malloc,那么首先会引发brk系统调用执行的过程。brk()在内核中对应的系统调用服务例程为SYSCALL_DE转载 2013-06-06 22:08:38 · 4858 阅读 · 0 评论 -
linux内存管理浅析
[地址映射](图:左中)linux内核使用页式内存管理,应用程序给出的内存地址是虚拟地址,它需要经过若干级页表一级一级的变换,才变成真正的物理地址。想一下,地址映射还是一件很恐怖的事情。当访问一个由虚拟地址表示的内存空间时,需要先经过若干次的内存访问,得到每一级页表中用于转换的页表项(页表是存放在内存里面的),才能完成映射。也就是说,要实现一次内存访问,实际上内存被访问了N+1次(N=页表转载 2013-06-06 14:39:27 · 1853 阅读 · 0 评论 -
Linus:利用二级指针删除单向链表
感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图)Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。下面是Linus的教学原文及翻译——“At the op转载 2013-02-04 12:58:08 · 1212 阅读 · 0 评论