
linux内核
文章平均质量分 87
唐古拉在高歌
斯蒂芬地方
展开
-
/proc/sysrq-trigger文件的强大功能
/proc/sysrq-trigger该文件能做些什么事情呢? # 立即重新启动计算机 (Reboots the kernel without first unmounting file systems or syncing disks attached to the system)echo "b" > /proc/sysrq-trigger # 立即关闭转载 2016-04-29 16:36:44 · 436 阅读 · 0 评论 -
Linux workqueue工作原理
1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程. 工作队列(workqueue)是另外一种将转载 2015-08-05 13:37:28 · 301 阅读 · 0 评论 -
Fuse文件系统优化方案
文件系统是一个通用操作系统重要的组成部分。传统上操作系统在内核层面上对文件系统提供支持。而通常内核态的代码难以调试,生产率较低。目前很多文件系统基于Fuse开发,作者深入钻研Fuse代码后,总结出开发此类文件系统时可考虑的优化方案,分享给大家。AD:51CTO开启企业运维技术盛宴_嘀嘀、新浪、白鹭齐聚MDSA线下沙龙,赶紧报名吧!目前很多文件系统基于Fuse开发,作者深入钻研Fuse代转载 2015-08-27 17:19:01 · 521 阅读 · 0 评论 -
epoll机制:epoll_create、epoll_ctl、epoll_wait、close
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define__FD_S转载 2015-07-31 14:09:03 · 673 阅读 · 0 评论 -
根据内核Oops 定位代码
内核开发时有时候出现Oops,例如一个野指针会导致内核崩溃,如运行时出现以下log:现在有三种方法可以找出具体出现野指针的地方 5.438972] bells bells: wm5102-aif1 samsung-i2s.0 mapping ok [ 5.443812] bells bells: Failed to add route OPCLK->Su转载 2014-08-15 19:40:09 · 684 阅读 · 0 评论 -
linux内核空间与用户空间信息交互方法
本文作者:康华:计算机硕士,主要从事Linux操作系统内核、Linux技术标准、计算机安全、软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室。如果需要可以联系通过kanghua151@msn.com联系他。 摘要:在进行设备驱动程序,内核功能模块等系统级开发时,通常需要在内核和用户程序之间交换信息。Linux提供了多种转载 2015-02-13 00:13:06 · 708 阅读 · 0 评论 -
浅析linux内核内存管理之buddy system
Linux采用著名的伙伴系统(buddy system)算法来解决外碎片问题。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续的页框。对1024个页框的最大请求对应着4MB大小的连续RAM块。每个块的第一个页框的物理地址是该块大小的整数倍。例如,大小为16个页框的块,其起始地址是16*2^12的倍数。内核试图把大小转载 2015-02-10 15:51:47 · 802 阅读 · 0 评论 -
netlink
netlink定义 用于在内核模块与在用户地址空间中的进程之间传递消息的。它包 含了用于用户进程的基于标准套接字的接口和用于内核模块的一个内部核心API。[--manual] Netlink是套接字家族中的一员,主要用内核与用户空间的进程间、用户进程间的通讯。然而它并不像网络套接字可以用于主机间通讯,Netlink只能用于同一主机上进程通讯,并通过PID来标识它们。[--wiki]转载 2015-01-22 17:37:34 · 622 阅读 · 0 评论 -
WIFI基本知识整理
这里对wifi的802.11协议中比较常见的知识做一个基本的总结和整理,便于后续的学习。因为无线网络中涉及术语很多,并且许多协议都是用英文描述,所以有些地方翻译出来会有歧义,这种情况就直接英文来描述了。 主要内容:一、基本概述二、实践基础三、一些原理四、补充五、其它 一、基本概述============================1、有线和无线转载 2015-01-29 00:47:02 · 709 阅读 · 0 评论 -
Perf -- Linux下的系统性能调优工具介绍
Perf简介Perf是Linux kernel自带的系统性能优化工具。虽然它的版本还只是0.0.2,Perf已经显现出它强大的实力,足以与目前Linux流行的OProfile相媲美了。Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature。而像OProfile, GProf等通常会“慢一拍”。Perf的基本原理跟OProfi转载 2014-11-13 20:37:44 · 645 阅读 · 0 评论 -
linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent
1.kobject, ktype, ksetkobject代表sysfs中的目录。ktype代表kobject的类型,主要包含release函数和attr的读写函数。比如,所有的bus都有同一个bus_type;所有的class都有同一个class_type。kset包含了subsystem概念,kset本身也是一个kobject,所以里面包含了一个kobject对象。另外转载 2014-11-13 20:35:03 · 703 阅读 · 0 评论 -
ARM Linux内核驱动异常定位方法分析--反汇编方式
原文链接:http://blog.youkuaiyun.com/hunhunzi/article/details/7052032最近在搞Atmel 的SAM9x25平台,Linux系统,用于工业设备。这也是我首次参与工业设备的研发。在调试Atmel SAM9x25的Linux串口设备的时候,发现无论是读还是写,都会产生异常。相关的异常信息如下:=======================转载 2014-08-15 19:41:44 · 953 阅读 · 0 评论 -
内核Oops小结
出现Oops消息的大部分错误时因为对NULL指针取值或者因为用了其他不正确的指针值。Oops如何产生的解释如下: 由于处理器使用的地址几乎都是虚拟地址,这些地址通过一个被称为“页表”的结构被映射为物理地址。当引入一个非法指针的时候,分页机制无法将该地址映射到物理地址,此时处理器就会向操作系统发出一个“页面失效(page fault)”的信号。如果地址非法“换入(page in转载 2014-08-15 19:44:55 · 843 阅读 · 0 评论 -
Check Linux Framebuffer Resolution
There is some sysfs interface exported to control the display related stuff. The following should work on both Android and Linux.Contents [hide] 1 set display scale1.1 set转载 2014-07-14 16:43:28 · 906 阅读 · 0 评论 -
Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)
Linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常见的就是cmdline。以前我在启动内核的时候习惯性的通过uboot传递一个cmdline给内核,没有具体的分析这个过程。最近在分析内核启动过程的时候,重新看了一下内核启动参数的传递过程,彻底解决一下在这方面的疑惑。 一、bo转载 2014-06-17 14:55:19 · 656 阅读 · 0 评论 -
linux arm的存储分布那些事之一
linux arm的存储分布那些事之一linux arm 内存分布总览上图是linux的arm的虚拟地址分布总览,我们按从低地址到高地址的顺序逐个描述,每项的描述包括如下的内容的组和:地址范围大小,虚拟转物理的接口函数,各个区域对应的分配函数,该区域有什么作用,使用场合等等。首先开始第一个区域:CPUvector page转载 2015-03-19 18:18:50 · 586 阅读 · 0 评论 -
LINUX系统安全_SANDBOX
Sandbox沙箱在计算机领域中是一种程序隔离的机制,其目的则是限制不可信进程的权限。沙箱技术则常用于执行未经测试的或不可信的客户程序,(比如沙箱杀毒一类的),为了避免不可信程序可能破坏其他的程序运行,沙箱技术可以为不可信的程序提供虚拟化的磁盘,内存以及网络资源,而这又是对客户是透明的。常规的安全机制则主要以降权来解决问题,但降权并不能带来真正的安全,sandbox也不能带来全方位的安全,转载 2015-09-09 11:22:10 · 4456 阅读 · 0 评论 -
[Linux][Kerne][Tips] 在 minicom 下送出 SysRq
除了 Linux kernel 要加上 SysRq 的 Function 以外,按 ctrl+a f 就是送出 break key.這要配合 Command Key 使用* What are the 'command' keys?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'b' - Will immediately reboot the s转载 2016-04-29 16:35:51 · 622 阅读 · 0 评论 -
Android 异常问题分析
1. Introduction解决问题通常分为以下几个步骤:a) 确定问题,这是个什么样的问题,有什么外在表现;b) 分析问题,根据log里面的蛛丝马迹,定位出问题的原因;c) 对症下药,尽量用最少的代码解决问题,并确保不会引入新的问题;d) 验证修改,把自己的修改导入,确保自己的修改起了作用,并已经彻底解决了问题,同时观察是否引入新的问题;此文档主要面对的是几类问题:转载 2016-04-29 14:16:46 · 773 阅读 · 0 评论 -
/proc/pid/status解释
/proc/9744$ cat statusName: gedit /*进程的程序名*/State: S (sleeping) /*进程的状态信息,具体参见http://blog.chinaunix.net/u2/73528/showart_1106510.html*/Tgid: 9744 /*线程组号*/Pid: 9744 /*进程pid*/PPid: 7672 /*转载 2015-09-18 17:41:27 · 345 阅读 · 0 评论 -
对/proc/buddyinfo的解释
buddyinfo的理解cat /proc/buddyinfo 显示如下:Node 0, zone DMA 0 4 5 4 4 3 ...Node 0, zone Normal 1 0 0 1 101 8 ...Node 0, zone转载 2015-09-17 11:48:57 · 1013 阅读 · 0 评论 -
Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的。如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理转载 2015-09-07 22:13:56 · 466 阅读 · 0 评论 -
kmap的实现分析与实验
kmap的实现分析kmap/unkmap系统调用是用来映射高端物理内存页到内核地址空间的api函数,他们分配的内核虚拟地址范围属于[PKMAP_BASE,PAGE_OFFSET]即[0xbfe00000,0xc0000000]范围,大小是2M的虚拟空间,为了映射该块虚拟地址,所使用的二级页表的大小刚好是一个物理page的总计是两个pte table(4KB)kmap的调用流程分析:转载 2015-03-19 18:17:44 · 715 阅读 · 0 评论 -
ARM MMU页表框架
先上一张arm mmu的页表结构的通用框图(以下的论述都由该图来逐渐展开):以上是arm的页表框图的典型结构:即是二级页表结构:其中第一级页表(L1)是由虚拟地址的高12bit(bits[31:20])组成,所以第一级页表有4096个item,每个item占4个字节,所以一级页表的大小为16KB,而在第一级页表中的每个entry的最低2bit可以用来区分具体是什么种类的转载 2015-09-07 22:30:54 · 779 阅读 · 0 评论 -
linux下内存的统计和内存泄露类问题的定位
在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本。在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进程相关的文件进行分析,精确评估系统消耗内存的大小,还可以对内存泄露类问题的解决提供一种定位手段。 Linux在内存使用上的原则是:如果内存充足,不用白不用,尽量使用内存来缓存一些文转载 2014-04-11 15:50:17 · 871 阅读 · 0 评论 -
Linux内存管理
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容转载 2014-04-21 11:03:20 · 692 阅读 · 0 评论 -
Linux物理内存概述
Linux可以支持大量的架构,所以需要用一种与架构无关的方式去描述内存。在linux的内存管理中,我们首先要明确的一个概念就是NUMA(Non-Uniform Memory Access,关于NUMA的介绍可以参考我前面的文章)。很多大型机器都采用NUMA架构,将内存和CPU分为很多组,每一组称为一个节点(node)。节点与节点之间的互相访问,会因为“距离”的不同导致不同的开销。Linux通过st转载 2014-04-14 11:36:13 · 653 阅读 · 0 评论 -
Linux内存管理之mmap详解
一. mmap系统调用1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用.转载 2015-09-05 23:34:44 · 393 阅读 · 0 评论 -
Linux内核最新的连续内存分配器(CMA)——避免预留大块内存
by 宋宝华在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。目前,Marek Szyprowski和Michal Nazarewicz实现了一套全新的Contiguous Memory Allocator。通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当转载 2015-09-05 23:50:52 · 496 阅读 · 0 评论 -
Linux节点和内存管理区的初始化
节点和管理区是内存管理中所涉及的重要概念,其数据结构在前文《linux物理内存概述》中已经介绍,现在让我们来看看linux是如何完成节点和管理区的。 在内核首先通过setup_arch()-->paging_init()-->zone_sizes_init()来初始化节点和管理区的一些数据项[cpp] view plaincopyst转载 2014-04-14 13:14:37 · 985 阅读 · 0 评论 -
SELinux 基础
12[root@localhost~]# uname -aLinuxlocalhost.localdomain3.11.10-301.fc20.x86_64#1 SMP Thu Dec 5 14:01:17 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux转载 2015-09-09 11:25:33 · 1025 阅读 · 0 评论 -
Linux内核源码分析--zImage出生实录(Linux-3.0 ARMv7)
原文地址:Linux内核源码分析--zImage出生实录(Linux-3.0 ARMv7) 作者:tekkamanninja 此文为两年前为好友刘庆敏的书《嵌入式Linux开发详解--基于AT91RM9200和Linux 2.6》中帮忙写的章节的重新整理。如有雷同,纯属必然。经作者同意,将我写的部分重新整理后放入blog中。~~~~~~~~~~~~~~转载 2014-06-16 16:55:34 · 759 阅读 · 0 评论 -
arm-linux启动过程
1. kernel运行的史前时期和内存布局 在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行。该kernel的执行起点是stext函数,定义于arch/arm/kernel/head.S。转载 2014-06-16 00:22:10 · 875 阅读 · 0 评论 -
rk3188--2.linux-3.0.36中内核参数的读取与传递
一.内核参数的获取1.1 kernel获取uboot传递的参数地址a. 在arch/arm/kernel/head.S中,内核解压后就会跳到这个文件中ldr r13, =__mmap_switched @ address to jump to afterb. 在arch/arm/kernel/head-common.S中__INIT__mmap_swit转载 2014-06-16 14:28:53 · 2165 阅读 · 0 评论 -
Android init进程启动分析
作者:唐老师,华清远见嵌入式学院讲师。一、Android Init.c执行流程Android中的内核启动后,kernel会启动第一个用户级别的进程:init,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程。PS:可以通过:ps aux转载 2014-04-09 11:10:02 · 665 阅读 · 0 评论 -
Android之旅 -- Recovery相关原理分析
原创文章,欢迎转载,转载请注明出处http://www.cnblogs.com/becklc/archive/2012/09/24/2676600.html本文依据android2.3源码只分析Recovery相关原理,不针对代码走读,现在Android版本已经4.x.x但是recovery的基本原理不变。一、Recovery是如何构成的 说recovery的构成并不贴切,应转载 2014-04-23 14:11:31 · 926 阅读 · 0 评论 -
[Android]构建boot.img:root目录与ramdisk.img的生成
以TCC88XX为例,当在Android顶层源码目录使用make编译完成后,会生成这样一个目录:out/target/product/tcc8800,该目录内部有我们需要的boot.img和system.img,boot.mg使用kernel和out/target/product/tcc8800/root目录打包而成(广义的ramdisk),也就是说,boot.转载 2014-04-23 13:43:38 · 2631 阅读 · 0 评论 -
android中各种img文件的作用以及系统启动过程
首先通过编译,先将android内核编译成功。正常情况下,在目录out/target.product/generic/(但是有的就没有generic文件,如freescale和iriver;但是lonshinetech下面就有这个文件,依据情况而定,只要能找到生成的三个文件就可以。例如:~/freescale/R9.2/out/target/product/imx51_bbg$ )下会生成三个文件转载 2014-04-23 12:12:33 · 1192 阅读 · 0 评论 -
内核启动组件式初始化
在Linux内核源码中多处会看到诸如__init,__initdata,__exitdata的关键字,大部分这样的关键字定义在include/linux/init.h头文件中,它们都会在编译连接阶段被实现处理。#define __init __section(.init.text) __cold notrace __init标记的数据被存储在.init.text节转载 2014-04-23 13:47:42 · 1004 阅读 · 0 评论 -
android boot.img 结构
android 的boot.img 包括 boot header,kernel, ramdisk首先来看看Makefile是如何产生我们的boot.img的:boot镜像不是普通意义上的文件系统,而是一种特殊的Android定制格式,由文件头信息boot header,压缩的内核,文件系统数据ramdisk以及second stage loader(可选)组成,它们之间非页面对齐部转载 2014-04-23 12:19:56 · 861 阅读 · 0 评论