![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
hnsncxy
为之疯狂
展开
-
uboot的编译及配置浅析
U-Boot的源码是通过GCC和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。1.顶层目录下的Makefile它负责U-Boot整体配置编译。按照配置的顺序阅读其中关键的几行。每一种开发板在Makefile都需要有板子配置的定义。例如smdk2410开发板的定义如转载 2012-08-06 00:50:20 · 615 阅读 · 0 评论 -
linux Oops和Panic关系
常在河边走,哪能不湿鞋。用Linux,总有死机的时候,如果运气好,会看到一些所谓”Oops”信息(在屏幕上或系统日志中),比如:Unable to handle kernel paging request at virtual address f899b670printing eip:c01de48c*pde = 00737067Oops: 0002 [#1]Modules转载 2014-03-31 23:17:40 · 19445 阅读 · 1 评论 -
linux中文件描述符fd和struct file结构体的释放
简单归纳:fd只是一个整数,在open时产生。起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp。文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用; 而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有文件描述符的,FILE结构转载 2014-05-07 16:40:27 · 11016 阅读 · 3 评论 -
linux OOM-killer机制(杀掉进程,释放内存)
Linux下面有个特性叫OOM killer(Out Of Memory killer),这个东西会在系统内存耗尽的情况下跳出来,选择性的干掉一些进程以求释放一些内存。典型的情况是:某天机器突然登不上了能ping通,但是ssh死活连不了。原因是sshd进程被OOM killer干掉了。重启机器后查看系统日志会发现O转载 2014-05-19 17:49:04 · 21788 阅读 · 0 评论 -
守护进程(内核线程和普通进程)
内核线程(thread)或叫守护进程(daemon), 在操作系统中占据相当大的比例,当Linux操作系统启动以后,尤其是Xwindow也启动以后,你可以用”ps”命令查看系统中的进程,这时会发现很多以”d”结尾的进程名,这些进程就是内核线程。内核线程也可以叫内核任务,它们周期性地执行,例如,磁盘高速缓存的刷新,网络连接的维护,页面的换入换出等等。在Linux中,内核线程与普通进程有一转载 2014-05-05 23:45:04 · 7082 阅读 · 2 评论 -
linux内核基本概述
Linux内核体系结构(Linux Kernel Architecture Over View)序言记得几年前我刚刚接触Linux,刚刚听说操作系统内核的概念,想起学习Linux的内核,去阅读Linux内核的源码,但一直到现在,才能走到内核的门口,速度之慢,实在是羞愧难当。这篇文章早就想写了,但是一拖再拖,也想过像那些大牛要写就写有水平的文章,而且一出就出一系列~,现在什么都不管,但是想想转载 2014-07-13 10:46:05 · 1652 阅读 · 0 评论 -
linux内核gpiolib文档
自己翻译的内核gpiolib文档,是2.6.38版本的。原文在:http://lxr.linux.no/linux+v2.6.38/Documentation/gpio.txt 内核文档2011/05/08标识端口-------------gpio使用0~MAX_INT之间的整数标识,不能使用负数。使用以下函数检查一个端口号的合法性:int转载 2014-09-02 23:58:51 · 1172 阅读 · 0 评论 -
SDIO WiFi Card Driver
(1) Wifi卡的常用接口有: –CF 接口 –USB接口 –SDIO接口 –SPI接口 –PCMCIA接口 很多时候,同一个wifi卡同时支持多种接口,譬如marvell的8686的wifi卡,既支持spi接口,也支持sdio接口. (2) SD卡与SDIO卡的异同1.SD卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写方式都转载 2014-12-01 14:05:25 · 1134 阅读 · 0 评论 -
linux 内核调试(dump_stack)
刚刚接触内核,在调试过程中用printk打印信息当然是直接有效的办法,但当我们不知到一个函数或者一个模块到底在哪里出了问题时我们可以利用dump_stack有效的找到问题的根源,下面只是简单的给出了使用方法。 我在自己的主机上试了一下dump_stack() Makefile文件点击(此处)折叠或打开 obj-m := hello.o转载 2015-05-26 00:31:38 · 2811 阅读 · 0 评论 -
Linux 内核堆栈
所有进程(包括内核进程和普通进程)都有一个内核栈,在x86的32位机器上内核栈大小可以为4KB或8KB,这个可以在编译内核的时候配置。内核栈的用途有两个:1)当进程陷入内核态,即内核代表进程执行系统调用时,系统调用的参数就放在内核栈上,内核栈记录着进程的在内核中的调用链;2)在内核栈被配置成8KB大小的情况下,当中断服务程序中断当前进程时,它将使用当前被中断进程的内核栈。对于用户进程,其既有用转载 2016-04-12 23:34:13 · 1375 阅读 · 0 评论 -
module_init的内核调用顺序
现在以module_init为例分析initcall在内核中的调用顺序在头文件init.h中,有如下定义:#define module_init(x) __initcall(x);#define __initcall(fn) device_initcall(fn)继续看:#define device_initcall(fn)转载 2016-04-29 14:43:23 · 959 阅读 · 0 评论 -
详解SPI中的极性CPOL和相位CPHA
SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。即一个SPI的Master通过SPI与一个从设备,即上述的那些Flash,ADC等,进行通讯。而主从设备之间通过SPI进行通讯,首先要保证两者之间时钟SCLK要一致,互相要商量好了,要匹配,否则,就没法正常通讯了,即保证时序上的一致才可正常讯。转载 2016-06-20 23:36:13 · 2481 阅读 · 0 评论 -
linux 用户空间与内核空间——高端内存详解
摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而内核空间有自己的规则;本文旨在探讨内核空间的地址映射。 Linux内核地址空间划分通常32位Linux内转载 2016-07-17 22:32:00 · 3946 阅读 · 0 评论 -
linux系统双内核的快速切换机制(kexec)
概述:快速启动机制:允许通过已经运行的内核的上下文启动另一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。使用该机制要满足两个基本条件:1)内核版本必需为 2.6.13 或以上,因为自该版本起,linux内核中加入了 kexec system call 模块。2)系统需要安装转载 2014-02-27 14:44:28 · 8162 阅读 · 0 评论 -
linux内核符号表kallsyms
Linux内核符号表/proc/kallsyms的形成过程---------------------------------------------------------------------------./scripts/kallsyms.c负责生成System.map./kernel/kallsyms.c负责生成/proc/kallsyms./scripts/kal转载 2013-01-05 10:25:06 · 11258 阅读 · 0 评论 -
linux内核链表详解
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,转载 2013-08-27 20:56:33 · 956 阅读 · 0 评论 -
Uboot命令详解
U-Boot还提供了更加详细的命令帮助,可以通过”?”显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明。1、bootmbootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg转载 2012-08-06 21:04:50 · 847 阅读 · 0 评论 -
用busybox制作嵌入式Linux的文件系统
1 busybox简介 熟悉嵌入式Linux的人对busybox一定不会陌生。它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的UNIX命令和工具结合到了一个单独的可执行程序中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中,已经足够了。 busybox在设计上就充分考虑了硬件资源转载 2012-07-26 20:53:26 · 1179 阅读 · 0 评论 -
linux中inittab文件详解
init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序。init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没转载 2012-07-27 11:32:29 · 1401 阅读 · 0 评论 -
Buildroot的用法和文档
Buildroot的用法和文档由Thomas Petazzoni提供,文稿由Karsten Kruse、Ned Ludd、Martin Herren等整理。最后修改时间:2007-09-19 02:08:10 -0700 (Wed, 19 Sep 2007)l 关于Buildroot l 获取Buildroot l 使用Buildroot l 定转载 2012-07-24 17:20:19 · 5202 阅读 · 0 评论 -
configure 时的host build target问题
在交叉编译中比较常见的一些参数就是build、host和target了,正确的理解这三者的含义对于交叉编译是非常重要的,下面就此进行解释 --build=编译该软件所使用的平台 --host=该软件将运行的平台 --target=该软件所处理的目标平台 我们以 编译 gcc 为例子来 讲解 这三者的作用 在gcc编译中我们使用 ./configure -转载 2012-08-29 15:36:54 · 530 阅读 · 0 评论 -
嵌入式LINUX开发入门
本文主要介绍一下在LINUX环境下开发嵌入式软件中的一些常识性的东西,对每一项不做深究展开。同样一个问题的解决方法有很多,我把自己习惯用的方法分享在这里。也希望谁有更好经验的也拿来分享。先介绍一下基本环境。嵌入式开发环境多多,本文基本的环境为windows-xp操作系统,虚拟机ubuntu 11.10。虚拟机安装这里选用ubuntu-11.10。可以自行从网上下载,我是从这转载 2012-09-04 14:02:43 · 843 阅读 · 0 评论 -
Linux 遇到 kernel panic 后可自动重启
现在的 Linux 比10年前要成熟的多,但有时候还是会出现莫名其妙、无法解释的 kernel panic 情况。对于大部分 Linux 用户来说出现 kernel panic 重启一下就可以了,但是对于系统管理员和那些做虚拟主机、共享主机、OpenVZ VPS 主机的 hosting 服务商来说出现未知的 kernel panic、导致系统挂掉可能就不太友好,如果没有 KVM over IP 的转载 2012-09-14 14:15:43 · 2295 阅读 · 0 评论 -
读取数据与地址对齐
读取数据与地址对齐 在chinaunix呆久了,便想在这里记录一些想法,也整理一下以前零散的记录,希望能和大家共进步。此篇文章也作为开博第一回吧。 今天翻看一本书,看到了代码移植需要注意的若干问题,其中提到数据对齐,让我想起遇到的x86和ARM平台一些小区别。有时候我们需要强制转换类型以便得到我们期望的数据,例如转载 2012-10-11 20:36:17 · 2043 阅读 · 0 评论 -
ARM平台处理器简介
初次接触到ARM的时候,我直接被众多的处理器版本、系列搞晕了,查了好多资料才理清。现在在这里总结一下,希望能帮到别人。1.总体情况先从ARM的wiki上抄个表过来:ArchitectureFamilyARMv1ARM1ARMv2ARM2,ARM3ARMv3ARM6,ARM7ARMv4StrongAR转载 2012-11-20 21:49:55 · 2421 阅读 · 0 评论 -
Linux到底在何时panic
遇到内核panic,我们很无奈,我们总是以为内核自动的检查出了错误,然后panic了,可事实上,panic是一个函数,需要显式调用的,panic机制固然是一种检查内核正常的好机制,可是其背后隐藏了大量内核开发者的心血,内核开发者必须知道什么情况下内核属于不正常状态,然后显式调用panic,如果此时不调用panic的话,说实话,系统还是会继续运行的,然而结果会真的“不可预料”,在遇到惶恐之事件的时候转载 2013-01-05 10:21:19 · 1221 阅读 · 0 评论 -
linux内核中container_of详解
在linux 内核中,container_of 函数使用非常广,例如 linux内核链表 list_head、工作队列work_struct中。在linux 内核中有一个大名鼎鼎的宏container_of(),这个宏是用来干嘛的呢?我们先来看看它在内核中是怎样定义的。呵呵,乍一看不知道是什么东东。我们先来分析一下container_of(ptr,type,me转载 2013-05-29 16:30:04 · 1854 阅读 · 1 评论 -
解读PTR_ERR,ERR_PTR,IS_ERR
最近要找工作了,就把内核以及驱动的知识复习了一下。看到了几个宏PTR_ERR,ERR_PTR,IS_ERR(其实是内联函数).还是不太明白,然后就google搜索了一下,搜出来的结果真是不让人满意,看完一些解释我更迷糊了。看来还得依靠内核源码,依靠对内核的理解自己弄明白了。大致看了一下这几个宏的定义还有在内核的用法,恍然大悟。原来这几个宏这么简单,原理也这么简单。下面就说一下这几个宏的由来与用处。转载 2016-07-17 23:18:15 · 826 阅读 · 0 评论