Linux kernel
文章平均质量分 77
chuanzhilong
本人写博客实为学习、交流、分享!若有文章涉及侵权,请及时联系本人,一经核实,将马上进行处理,谢谢。
展开
-
linux中Oops信息的调试及栈回溯—Linux人都知道,这是好东西!
=============================================================================原文地址:http://blog.micro-studios.com/?p=615#comment-1069看后感想:這点比 ldd3上讲的都仔细2012年11月29日11:24:17:有BUG_ON就不用反汇编了。。。转载 2017-12-19 18:15:55 · 559 阅读 · 0 评论 -
Linux Suspend过程
阅读目录3.2.1 suspend_console3.2.2 dpm_suspend_start (PMSG_SUSPEND)3.2.3 suspend_enter 3.2.4 dpm_resume_end (PMSG_RESUME)3.2.5 resume_console转自:http://blog.csdn.net/chen198746/article/deta转载 2017-03-01 15:24:48 · 600 阅读 · 0 评论 -
Linux电源管理-wakeup events framework
前言通常新机制/事物的出现往往是解决某些问题的,同样wakeup events framework机制也不例外。先带大家了解下wakeup events framework出现的背景,然后在了解其内部的实现机制。Linux系统中的电源管理一般是冷睡眠,而Android系统却将linux系统中的睡眠作为通常待机使用,显然Linux中的电源管理不符合Android系统。Android说转载 2017-03-01 11:35:30 · 882 阅读 · 0 评论 -
printf的归宿-数据打印到哪儿了
近日在一次测试Linux内核路由查找算法的过程中,发现一个printf语句竟然能将性能降低2/3。当然,使用“竟然”一词并不意味着这个问题是第一次发现,我的想法是,把它记录下来,让没有经验的同学对printf知其所以然,同时导出我对“性能攸关”的这类算法中记录日志的一个观点。声明我不会把大段的源代码贴在文章中,而只是希望能通过阐述原理把我的意思表达清楚。诚然,作为程序员没有代码好像一切都会转载 2017-01-20 11:09:32 · 913 阅读 · 0 评论 -
Linux时间子系统之三:时间的维护者:timekeeper
本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法,但是对于真实的用户来说,我们感知的是真实世界的真实时间,也就是所谓的墙上时间,clocksource只能提供一个按给定频率不停递增的周期计数,如何把它和真实的墙上时间相关联?本节的内容正是要讨论这一点。1. 时间的种类内核管理着多种时间,它们分别是:RTC时间wall time:墙转载 2017-01-11 18:33:57 · 379 阅读 · 0 评论 -
rootfs的挂载过程
一:前言前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了彻底解决这个问题。研究了一下rootfs的挂载过程。特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助。二:rootfs的种类总的来说,rootfs分为两种:虚拟rootfs和真实rootfs.现在kernel的发展趋势是将更多的功能放到用户空间完成。以保持内核的转载 2017-02-04 22:43:54 · 1132 阅读 · 0 评论 -
Framebuffer的配置及应用
* 一、FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这 个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebu转载 2016-12-20 16:08:19 · 3851 阅读 · 0 评论 -
深入理解 GRE tunnel
我以前写过一篇 介绍 tunnel 的文章 ,只是做了大体的介绍。里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端。比如 IPv6 over IPv4 的 tunnel,也就是 SIT,它的原理如下图所示:显然,除了端点的 host A 和 host B之外,中间经过的任何设备都是看不到里面的 IPv6 的头,对于它们来说,经过 si转载 2016-12-14 11:30:52 · 14142 阅读 · 0 评论 -
【整理】Android-Recovery Mode(recover模式详解)
Recovery简介Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。升级一般通过运行升级包中的META-INF/com/google/android/update-script脚本来执行自定义升级,脚本中是一组recovery系统能识别的UI控制,文件系统操作命令,例如write_raw_image(写FLASH分区),copy_转载 2016-12-23 14:08:51 · 2316 阅读 · 0 评论 -
Linux下网卡的桥接 (Bridge mode)
modprobe bridgebrctl addbr br0#> ifconfigeth0 Link encap:Ethernet HWaddr 00:CC:D0:99:EB:26 inet6 addr: fe80::2b0:d0ff:fe99:eb26/64 Scope:Link UP BROADCAST RUNNING转载 2016-12-15 16:06:05 · 3573 阅读 · 0 评论 -
如何在Linux环境创建GRE Tunnel
Question: I want to connect to remote networks by using a GRE tunnel. How can I create a GRE tunnel between two end points on Linux?GRE tunnels are IP-over-IP tunnels which can encapsulate IPv4/IPv6转载 2016-12-14 10:27:07 · 4758 阅读 · 0 评论 -
linux下的"BusHound"——usb_mon
ubuntu下已经内置了usb抓包工具——usb_mon,位置:/lib/modules/3.13.0-24-generic/kernel/drivers/usb/mon/usb_mon.ko(ubuntu14.04)使用方法如下:sudo mount -t debugfs none /sys/kernel/debug 一般Linux已经默认挂上了sudo modpro转载 2016-12-02 18:02:15 · 1180 阅读 · 0 评论 -
Linux SCSI 子系统剖析
分层 SCSI 架构简介Small Computer Systems Interface (SCSI) 是一组标准集,它定义了与大量设备(主要是与存储相关的设备)通信所需的接口和协议。 Linux® 提供了一种 SCSI 子系统,用于与这些设备通信。Linux 是分层架构的一个很好的例子,它将高层的驱动器(比如磁盘驱动器或光驱)连接到物理接口,比如 Fibre Channe转载 2017-02-12 18:12:22 · 962 阅读 · 0 评论 -
MSM8909+Android5.1.1 SPI驱动开发(PSAM部分)
1. PSAM部分的硬件设计 图1CS 片选信号SCK 时钟信号MISO 主设备的数据输入、从设备的数据输出脚MOSI 主设备的数据输出、从设备的数据输入脚 2. PSAM部分软件设计 图2 (1) PSAM应用这部分只需要调用API函数即可。 (2) PSAM转载 2017-01-25 16:45:16 · 5163 阅读 · 0 评论 -
NAT介绍及iptables配置NAT的方法
NAT,网络地址转换,该技术是为了应对IPv4地址耗尽的问题而产生的。他的产生几乎使IPv4起死回生。在IPv4已经被认为行将结束历史使命之后近20年时间里,人们几乎忘了IPv4的地址空间即将耗尽这样一个事实。IPv4地址的划分在弄明白NAT的具体功能前,我们先来看一看IPv4地址的划分。IPv4协议为了路由和管理方便,43亿的地址空间被按照不同前缀长度划分为A,B,C,D转载 2017-11-10 10:34:21 · 6516 阅读 · 0 评论 -
Linux中Netfilter框架
什么是Netfilter?为了说明这个问题,首先看一个网络通信的基本模型:在数据的发送过程中,从上至下依次是“加头”的过程,每到达一层数据就被会加上该层的头部;与此同时,接受数据方就是个“剥头”的过程,从网卡收上包来之后,在往协议栈的上层传递过程中依次剥去每层的头部,最终到达用户那儿的就是裸数据了。那么,“栈”模式底层机制基本就是像下面这个样子:对于收到的每个数据包,都从“转载 2017-11-09 17:27:53 · 462 阅读 · 0 评论 -
linux下的/dev/mem设备认识和使用
最近在为了读取一个寄存器的值动心思时,突然发现,一个好用的工具”r”,源码附上:#include #include #include #include #include #include #include #if __LP64__#define strtoptr strtoull#else#define strtoptr strtoul#endifstatic in转载 2017-09-21 18:25:00 · 3410 阅读 · 0 评论 -
I2S波形记录
趁着示波器和软盘都还在俺这里,再测个I2S的波形1.基本概率A)I2S有四根线,不过俺们CBP的这个MP3 IIS只有三根, 没有DATA IN, R/L选择又叫LRCK或者WS的,用于选择左/右声道,R/L=0时左声道, R/L=1时为右声道。 R/L的频率就是声音数据的采样频率,如图中的8KB)声音数据DAT一般在CLK的上升沿进行采样,有些DAC也是可以调的。每个声道转载 2017-08-20 22:29:51 · 6874 阅读 · 1 评论 -
Yaffs 文件系统分析
1 Yaffs文件系统结构1.1 简介1.1.1 应用场合Yaffs(Yet Another Flash File System)文件系统是专门针对NAND闪存设计的嵌入式文件系统,目前有YAFFS和YAFFS2两个版本,两个版本的主要区别之一在于YAFFS2能够更好的支持大容量的NAND FLASH芯片。Yaffs文件系统有些类似于JFFS/JFFS2文件系统,与之不同的是JFF转载 2017-08-17 17:03:22 · 699 阅读 · 0 评论 -
在NAND FLASH上建立YAFFS2文件系统
经过了半个多月的努力,终于搞定nandflash的mtd驱动和上层的yaffs2文件系统。这半个多月来几乎每天都要和挫败感斗争,每天都要忍受这个方面,那个方面的bug。想想自己这半个多月来,也算看不少资料,得到不少人的帮助,总算是有点心得。鉴于国内搞yaffs2文件系统方面的资料还是很少,就把自己的心得拿出来与大家共享。不说闲话了,先介绍一些背景资料 一. 闪存我们常说的闪存其转载 2017-08-17 16:42:21 · 1156 阅读 · 0 评论 -
linux中在/dev/下手动创建设备节点
linux中在/dev/下手动创建设备节点/dev/目录下有许多设备节点文件,比如u盘的文件/dev/sda,mmc卡的文件/dev/mmcblk0,这些文件通常是由udev或mdev程序检测到uevent事件后自动创建的。我们也可以通过mknod命令手动创建。下面mmc卡为例,介绍如何创建其设备节点文件。1. mknod命令命令的格式是:mknod 设备名 设备类型(原创 2017-03-25 15:36:00 · 25045 阅读 · 1 评论 -
"undefined reference to" 问题解决方法
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)测试代码转载 2017-03-23 17:29:40 · 4039 阅读 · 0 评论 -
Linux设备模型(8)_platform设备
1. 前言在Linux设备模型的抽象中,存在着一类称作“Platform Device”的设备,内核是这样描述它们的(Documentation/driver-model/platform.txt):Platform devices are devices that typically appear as autonomous entities in the system. T转载 2017-03-23 13:19:54 · 314 阅读 · 0 评论 -
Linux加载DTS设备节点的过程(以高通8974平台为例)
DTS是Device Tree Source的缩写,用来描述设备的硬件细节。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的pla转载 2017-03-08 08:54:16 · 454 阅读 · 0 评论 -
Android 4.4 Kitkat 使能 USB adb 功能
背景在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能。这篇文章根据原作者的 Google+ 文章,在 Atmel sama5 开发板上做了测试,将步骤记录如下,供需要使用的读者参考,你也可以查看作者原文:https://plus.google.com/11152478043580转载 2017-02-15 13:45:14 · 821 阅读 · 0 评论 -
嵌入式Linux根文件系统制作和挂载
嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统那么什么是根呢?哈哈 其实根表示的就是第一个的意思下面贴张图看看整个根文件系统制作的步骤:第一步创建目录,制作rootfs!第二部分:挂载根文件系统(即如何使用上边制作好的转载 2016-11-02 18:04:34 · 977 阅读 · 0 评论 -
arm-linux启动过程
arm-linux启动过程 1. kernel运行的史前时期和内存布局 在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行。该kernel的执行起点是stext函数,定义于a转载 2016-08-11 14:50:18 · 520 阅读 · 0 评论 -
ARM Linux 内核启动总结 之 创建临时页表
硬件平台:S5PV210 内核版本:Linux2.6.32 文件:head.S(linux/arch/arm/kernel/)#include #define KERNEL_RAM_VADDR (PAGE_OFFSET + TEXT_OFFSET) #define KERNEL_RAM_PADDR (PHYS_OFFSET + TEXT_OFFSET)转载 2016-08-11 14:47:28 · 689 阅读 · 1 评论 -
setup_irq和request_irq
Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。这两个函数有什么样的区别呢?先看看setup_irqSetup_irq通常用在系统时钟(GP Timer)驱动里,注册系统时钟驱动的中断处理函数。下面举个列子, 如s3c2410 timer驱动:/* ar转载 2016-08-23 10:12:44 · 1462 阅读 · 0 评论 -
Linux中与内核通信的Netlink机制(实例)
Netlink在2.6版本的内核中变化也是很大的,在最新的2.6.37内核中,其定义已经改成下面这种形式,传递的参数已经达到6个。其中第一个参数和mutex参数都是最新添加的。Mutex也可以为空。这里主要是关于内核空间中的netlink函数的使用。extern struct sock *netlink_kernel_create(struct net *net,转载 2016-08-22 18:17:43 · 2004 阅读 · 0 评论 -
netlink socket编程之why & how
netlink socket编程之why & how 作者: Kevin Kaichuan He@2005-1-5 翻译整理:duanjigang @2008-9-15duanjigang1983@126.com>原文: http://www.linuxjournal.com/article/7356 开发和维护内核是一件很繁杂的工作,因此,只有那些最重要或者与系统性能息息转载 2016-08-22 18:15:59 · 362 阅读 · 0 评论 -
嵌入式 Linux 中自定义 reboot / poweroff 行为
一般拿到一个 Linux SDK 的时候,方案商已经内置了很实用的 busybox,用来执行 poweroff / reboot 命令。但嵌入式开发时,有时需要自定义执行 reboot / poweroff 之后的一些行为。本文就是负责简单易懂地解释如何修改。本文地址:https://segmentfault.com/a/1190000006216529Reference基转载 2016-08-31 18:01:01 · 1224 阅读 · 0 评论 -
基于Linux与Busybox的Reboot命令流程分析
***************************************************************************************************************************作者:EasyWave转载 2016-08-31 17:58:10 · 841 阅读 · 0 评论 -
Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢?我们在进行linux内核配置的时候经常会执行make men转载 2016-08-09 11:03:46 · 336 阅读 · 0 评论 -
uclibc,eglibc,glibc之间的区别和联系
1.Glibcglibc = GNU C Library是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。2.uClibc一个小型的C语言标准库,主要用转载 2016-08-04 13:52:34 · 385 阅读 · 0 评论 -
linux内核启动地址的确定
内核编译链接过程是依靠vmlinux.lds文件,以arm为例vmlinux.lds文件位于kernel/arch/arm/vmlinux.lds,vmlinux-armv.lds的生成过程在kernel/arch/arm/Makefile中ifeq ($(CONFIG_CPU_32),y)PROCESSOR = armvTEXTADDR = 0xC0008转载 2016-07-17 22:41:59 · 424 阅读 · 0 评论 -
Linux内核源代码顶层目录下的Makefile文件分析一
Linux内核源代码顶层目录下的Makefile文件分析,结合O'Reilly出版社的Linux书籍分析。VERSION = 2# 给变量VERSION赋值PATCHLEVEL = 6# 给变量PATCHLEVEL赋值SUBLEVEL = 22# 给变量SUBLEVEL赋值EXTRAVERSION = .6# 给变量EXTRAVERSION赋值转载 2016-08-11 16:33:40 · 1607 阅读 · 0 评论 -
Linux内核源代码顶层目录下的Makefile文件分析二
# Cross compiling and selecting different set of gcc/bin-utils# ---------------------------------------------------------------------------## When performing cross compilation for other architec转载 2016-08-11 16:34:28 · 1843 阅读 · 0 评论 -
ARM下Kernel panic - not syncing: Attempted to kill init!错误分析
ARM下Kernel panic - not syncing: Attempted to kill init!错误分析1. 前言 最近在通过busybox制作rootfs的时候,发现使用不同版本的交叉编译器去编译busybox的时候,有些版本编译器编译出的busybox可执行文件不能用,它会导致系统启动过程中在加载init程序时出错。本文将分析怎么去查找这个错误具体是由什么引原创 2016-10-24 13:43:29 · 20361 阅读 · 3 评论 -
MTD应用学习:mtd和mtdblock的区别
今天做升级方案用到了mtd-utils中的flash_eraseall和flash_cp两个工具,在进行方案验证的时候,遭遇到各种不解和疑惑,因对MTD的原理不熟悉,所以只能多次尝试,虽然最后把方案搞定了,不过觉得MTD中的mtd和mtdblock区别这块还是值得总结学习一下。这里先说明一下问题现象,然后在进行具体的区别原理解释。 MTD设备(Nor Flash)使用中的问题现象表转载 2016-10-13 13:55:49 · 657 阅读 · 0 评论