kernel学习
dumb_man
这个作者很懒,什么都没留下…
展开
-
内核工具 – Sparse 简介
转自:http://www.cnblogs.com/wang_yb/p/3575039.htmlSparse是内核代码静态分析工具, 能够帮助我们找出代码中的隐患. 主要内容:Sparse 介绍Sparse 使用方法Sparse 在编译内核中的使用补充 1. Sparse 介绍Sparse 诞生于 2004 年, 是由linux之父开发的, 目的就是提供一个静态检查代码的工具, 从而减少linux原创 2017-11-20 17:48:04 · 353 阅读 · 0 评论 -
linux kernel系列四:嵌入式系统中的文件系统以及MTD
转自:http://blog.csdn.net/innost/article/details/6799518本节介绍File System和MTD技术一 FS熟知的FS有ext2,3,4.但是这些都是针对磁盘设备的。而ES中一般的存储设备为Flash,由于Flash的特殊性:Flash存储按照Block size进行划分,而一个BLS一般有几十K。(对比磁盘的一个簇才512个字节)。这么大的BLS原创 2017-11-20 17:49:27 · 441 阅读 · 0 评论 -
深入理解SELinux SEAndroid 之一
转自:http://blog.csdn.net/innost/article/details/19299937SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。NSA最初设计的安全模型叫FLASK,全称为Flux原创 2017-11-20 17:49:31 · 410 阅读 · 0 评论 -
深入理解SELinux SEAndroid之二
转自:http://blog.csdn.net/innost/article/details/196414873) File/File System 打label前面一节中,读者见识到了DT和TT。不过这些描述的都是Transition,即从某种Type或Domain进入另外一种Type或Domain,而上述内容并没有介绍最初的Type怎么来。在SELinux中,对与File相关的死货(比“死东原创 2017-11-20 17:49:35 · 316 阅读 · 0 评论 -
深入理解SELinux SEAndroid 之三
转自:http://blog.csdn.net/Innost/article/details/19767621二 SEAndroid源码分析有了上文的SELinux的基础知识,本节再来看看Google是如何在Android平台定制SELinux的。如前文所示,Android平台中的SELinux叫SEAndroid。先来看SEAndroid安全策略文件的编译。 1. 编译sepolicyAnd原创 2017-11-20 17:49:40 · 597 阅读 · 0 评论 -
随笔之Android平台上的进程调度探讨
转自:http://blog.csdn.net/Innost/article/details/6940136一由来最近在翻阅MediaProvider的时候,突然想起之前碰到的一个问题,该问题是这样的:一个Pad上有很多媒体文件,然后每次开机后的一段时间内,Home Screen的反应都特别慢,有时候还会报出ANR的错误。从ANR文件/data/anr/traces.txt分析,发现系统打印的cp原创 2017-11-20 17:49:44 · 433 阅读 · 0 评论 -
kernel编译生成Image zImage uImage的区别
在开发中发现在uboot中,kernel的load地址是0xXXXX7fc0,而实际kernel起始地址是0xXXXX8000,这是激发探索的起始。内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。 uImage是uboot专用的映像文件,它是在zIm原创 2017-11-20 17:49:46 · 716 阅读 · 0 评论 -
PIC(与位置无关代码)在u-boot上的实现
1.1 原理介绍u-boot通常都是存在ROM或者Flash上,以保证CPU启动后可以直接运行u-boot。但ROM的问题是只能读不能写,不利于程序的执行。如:全局变量读写,地址空间限制等问题。因此u-boot会先把自己拷贝到RAM中去执行。这一拷贝带来的问题是执行地址的混乱。代码的执行地址通常都是在编译时有链接地址指定的,如何保证拷贝前后都可以执行呢?一个办法是使用拷贝到RAM后的地址作为编译时原创 2017-11-20 17:49:56 · 1484 阅读 · 0 评论 -
位置无关(PIC)代码原理剖析
转自:http://blog.csdn.net/loushuai/article/details/50493603共享库的一个关键目的是为了使多个进程能够共享内存中的同一份代码拷贝,已达到节约内存资源的目的。如何做到呢?一种方法是预先为每一个共享库指定好加载的地址范围,然后要求加载器总是将共享库加载至指定的位置。这种方法尽管很简单,但是会产生一些严重的问题。因为就算一个进程并没有用到某个库,相应的原创 2017-11-20 17:50:00 · 1661 阅读 · 0 评论 -
vmlinux.lds.s文件分析
vmlinux.lds.S是如何组织内核的每个函数存放在内核镜像文件的位置,我们知道你在编译内核生成内核文件的时候,其实这个过程分两步,一个是“编译”,另一个是“链接”的过程,vmlinux.lds.S要做的就是告诉编译器如何链接编译好的各个内核.o文件。小知识:链接器中的entry 链接器 按以下优先顺序设入口点,找到即停止 1 -e 命令行选项 2 脚本中的entry(symbol)命令 3如原创 2017-11-20 17:50:03 · 3261 阅读 · 1 评论 -
What are legacy interrupts?
在看arm的trustzone的手册时,在中断一节常看到legacy interrupts这个名词,这是什么意思呢?以下是网上高手的解释说明。Legacy interrupts are the two interrupts that were in ARM before GIC arrived: nIRQ - normal interrupt request, and fIRQ - fast in原创 2017-11-20 17:50:09 · 1388 阅读 · 0 评论 -
Device Tree说明
Device Tree(一):背景介绍http://www.wowotech.net/linux_kenrel/why-dt.htmlDevice Tree(二):基本概念http://www.wowotech.net/linux_kenrel/dt_basic_concept.htmlARM linux中和Device Tree相关的代码分析http://www.wowotech.net/lin原创 2017-11-20 17:50:12 · 305 阅读 · 0 评论 -
Linux学习之zImage内核镜像解压过程详解---说明为什么解压地址可以是zImage载入地址
转自:http://www.embedu.org/Column/Column13.htm作者: 刘洪涛,华清远见嵌入式培训中心 讲师。在华清远见教学过程中,发现很多学员对内核镜像解压过程比较感兴趣,但网上相关的文章往往不能把关键问题讲清楚,所以写了这篇文章。本文以linux-2.6.14内核在S3C2410平台上运行为例,讲解内核的解压过程。内核编译完成后会生成zImage内核镜像文件。关于boo原创 2017-11-20 17:50:53 · 3483 阅读 · 0 评论 -
Linux Kernel系列三:Kernel编译和链接中的linker script(vmlinux.lds.S)语法详解
转自:http://blog.csdn.net/innost/article/details/6693731先要讲讲这个问题是怎么来的。(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么)。我在编译内核的时候,发现arch/arm/kernel目录下有一个这样的文件:vmlinux.lds.S。第一眼看上去,想想是不是汇编文件呢?打开一看,好像原创 2017-11-20 17:49:24 · 930 阅读 · 0 评论 -
Linux Kernel 系列二:用户空间的初始化
转自:http://blog.csdn.net/innost/article/details/6706986上篇我们知道,kernel初始化后将启动init进程,那么这个进程将干些什么呢?除此之外,kernel还需要做些什么事情呢?(想想文件系统、根存储设备是在什么时候初始化的呢?)先从文件系统初始化说起。以前一直不明白,有了kernel为何还需要一个文件系统?经过反复琢磨,明白一个道理,kern原创 2017-11-20 17:49:20 · 438 阅读 · 0 评论 -
Linux Kernel系列一:开篇和Kernel启动概要
转自:http://blog.csdn.net/innost/article/details/6693731前言最近几个月将Linux Kernel的大概研究了一下,下面需要进行深入详细的分析。主要将以S3C2440的一块开发板为硬件实体。大概包括如下内容:1 bootloader分析,以uboot为主,结合具体开发板的情况。我的目标是解释清楚uboot的工作原理(说实话,分析过程中不太想被硬件绑原创 2017-11-20 17:49:17 · 213 阅读 · 0 评论 -
linux内核Kmalloc分配内存需要注意的问题(GFP_KERNEL可能会造成内核调度错误)
转自:http://blog.chinaunix.net/u2/79914/showart_1905549.htmlkmalloc#include Linux/slab.h> void *kmalloc(size_t size, int flags);给 kmalloc 的第一个参数是要分配的块的大小. 第 2 个参数, 分配标志, 非常有趣, 因为它以几个方式控制 kmalloc 的行为.最一般原创 2017-11-20 17:48:07 · 4307 阅读 · 0 评论 -
tasklet使用
taskletTasklet的使用比较简单,只需要定义tasklet及其处理函数并将两者关联例子:Void my_tasklet_func(unsigned long)DECLARE_TASKLET(my_tasklet.my_tasklet_func,data)代码DECLARE_TASKLET实现了定义名称为my_tasklet的tasklet并将其与my_tasklet_func这个函数绑定原创 2017-11-20 17:48:11 · 595 阅读 · 0 评论 -
__sched 在函数定义里面是什么意思?
__sched和前面的asmlinkage一样都是宏,定义中用了gcc的attributes扩展。__sched的定义在这: http://lxr.oss.org.cn/source/...贴过来看下: /* Attach to any functions which should be ignored in wchan output. */ #define __sched原创 2017-11-20 17:48:15 · 1527 阅读 · 0 评论 -
关于在写linux driver时的ERESTARTSYS的作用
作用:-ERESTARTSYS的与“可重新执行的系统调用”的概念相关联,一个可重新执行的系统调用是一个当有一些中断发生后能透明的被kernel重新执行的系统调用。比如用户空间进程在执行一个系统调用时产生休眠,此时捕获到一个信号,执行信号处理函数,然后当从信号处理函数返回,表现为重新执行之前的那个系统调用进入睡眠状态。使用sigaction 系统API,进程能够安排与信号相关的重新执行行为。这些都是原创 2017-11-20 17:48:18 · 1578 阅读 · 0 评论 -
kzalloc 函数详解
用kzalloc申请内存的时候, 效果等同于先是用 kmalloc() 申请空间 , 然后用 memset() 来初始化 ,所有申请的元素都被初始化为 0.view plainortant; margin-bottom: 1px !important; margin-left: 45px !important;" >ortant; padding: 0px 3px 0px 10px !impo原创 2017-11-20 17:48:22 · 1913 阅读 · 0 评论 -
Linux自旋锁
加锁(locking)是一种广泛应用的同步技术。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把“锁”。由锁机制保护的资源非常类似于限制于房间内的资源,当某人进入房间时,就把门锁上。如果内核控制路径希望访问资源,就试图获取钥匙“打开门”。当且仅当资源空闲时,它才能成功。然后,只要它还想使用这个资源,门就依然锁着。当内核控制路径释放了锁时,门就打开,另一个内核控制路径就可以进入原创 2017-11-20 17:48:25 · 419 阅读 · 0 评论 -
linux内核中的fastcall和asmlinkage宏
在linux内核中我们都会经常见到FASTCALL和armlinkage,它们各有什么不同呢?下面我们来具体分析一下。 在标准C系中函数的形参在实际传入参数的时候会涉及到参数存放的问题,那么这些参数存放在哪里呢?对x86比较了解的话,应该知道这些函数参数和函数内部局部变量一起被分配到了函数的局部堆栈中。linux操作系统支持多种CPU架构,比如x86、ppc和arm等,在不同的处理器结构上不能保证原创 2017-11-20 17:48:29 · 302 阅读 · 0 评论 -
linux中completion结构解释
一、定义:linux/include/linux/completion.h 13struct completion { 14 unsigned int done; 15 wait_queue_head_t wait; 16}; 二、作用:虽然信号量可以用于实现同步,但往往可能会出现一些不好的结果。例如:当进程A分配了一个临时信号量变量,把它初始化为关闭的MUTE原创 2017-11-20 17:48:32 · 1676 阅读 · 0 评论 -
linux中 likely与unlikely
转自:http://blog.csdn.net/tommy_wxie/article/details/7384641看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linu原创 2017-11-20 17:48:39 · 185 阅读 · 0 评论 -
Linux之module_param()函数学习
转载:http://www.linuxidc.com/Linux/2011-02/32131.htm一.module_param1.为什么引入 在用户态下编程可以通过main()来传递命令行参数,而编写一个内核模块则可通过module_param()来传递命令行参数. 2. module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam原创 2017-11-20 17:48:42 · 379 阅读 · 0 评论 -
EXPORT_SYMBOL and EXPORT_SYMBOL_GPL
1.EXPORT_SYMBOLEXPORT_SYMBOL( my_pub_func);在预编译阶段会解析为:extern void *__crc_my_pub_func __attribute__((weak)); static const unsigned long __kcrctab_my_pub_func __attribute__((__used__)) __attribute__((se原创 2017-11-20 17:48:49 · 401 阅读 · 0 评论 -
Linux Support for ARM LPAE 分析
介绍 早期的ARM系统仅需要MB级别的RAM,但是,随着设备的升级,现在更多复杂的智能手机设备 需要 百M甚至GB级别的RAM,而32bit的物理地址空间就显得捉襟见肘了。更让人紧张的是,这些地址空间不仅仅是RAM占用了,还有 外设、FLASH存储器以及系统ROM也占用了部分地址空间。 新兴起的 移动虚拟化 需要更多是RAM,当然在 Guest OS级别一般来说是不原创 2017-11-20 17:48:59 · 1321 阅读 · 0 评论 -
如果你需要的kernel driver被申明为依赖BROKEN,这是什么意思
转自:https://unix.stackexchange.com/questions/312850/init-kconfig-broken当想要使能kernel的usb uas时,发现uas依赖BROKEN,而BROKEN又找不到如何开启,所以搜到了以下的内容。BROKEN indicates that a driver is broken: it doesn't work and转载 2017-11-29 20:16:52 · 686 阅读 · 0 评论