![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux内核
文章平均质量分 90
小木瓜
这个作者很懒,什么都没留下…
展开
-
linux 2.4 和 2.6 可装载模块机制
在linux根目录下查找一个名叫“kernel”的目录find / -name kernel -type d .解释-name文件名 -type 为文件的类型,这里文件的类型是一个目录(directory) 内核版本的获取:当设备驱动需要同时支持不同版本内核时,在编译阶段,内核模块需要知道当前使用的内核源码的版本,从而使用相应的内核 API。2.4 与 2.6 内核下,源码头文件 l原创 2011-11-18 12:55:38 · 866 阅读 · 0 评论 -
Linux内核引导参数简介
概述内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。内核源码树下的 Documentation/kernel-parameters.txt 文件列出了所有可用的引导参数,并指明了处理每个参数的具体文件。注意:对于模块而言,引导参数只能用于直接编译到核心里的模块,格式是使用"模块名.参数=值"模式指定,比如:usbcore.blinkenlights=1 。动态加载的模块可以在原创 2011-12-22 11:08:30 · 985 阅读 · 0 评论 -
Udev具体实现
udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:udev_root="/dev" ; udev产生的设备文件的根目录是/dev udev_db="/dev/.udevdb" ; 通过udev产生的设备文件形成的数据库udev_rul原创 2011-12-22 13:50:10 · 1416 阅读 · 0 评论 -
Linux操作系统内核启动参数详细解析
Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。Li原创 2011-12-22 11:01:05 · 827 阅读 · 0 评论 -
linux内核分析
启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x7C00,并开始执行此处的代码。这就是对内核初始化过程的一个最简单的描述。 最初,linux核心的最开始部分是用8086汇编语原创 2011-12-23 13:53:42 · 1546 阅读 · 0 评论 -
基于2.6内核的pwm蜂鸣器驱动设计
基于2.6内核的pwm蜂鸣器驱动设计 一、开发环境 二、PWM怎样工作在ARM Linux中1. 什么是PWM? PWM(脉冲宽度调制)简单的讲是一种变频技术之一,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。如果还不是很清楚,好吧,来看看我们实际生活中的例子,我们的电风扇为什么扭一下按扭,风扇的转速就会发生变化;调一下收音机的声音按钮,声音的大原创 2011-12-29 15:27:37 · 2055 阅读 · 0 评论 -
进程状态转换
一个进程在其生存期内,可处于一组不同的状态下,称为进程状态,如图所示。进程状态保存在进程任务结构的state字段中。当进程正在等待 系统中的资源而处于等待状态时,则称其处于睡眠等待状态。在Linux系统中,睡眠等待状态分为可中断的和不可中断的等待状态。 进程状态及转换关系(1) 运行状态(TASK_RUNNING)。当进程正在被CPU执行,或已经准备就绪随时可由调度程序原创 2012-02-15 21:44:09 · 5329 阅读 · 1 评论 -
驱动之路-设备模型(上)底层模型
一、重要知识点 1.Sysfs文件系统 Sysfs文件系统是一种类似于proc文件系统的特殊文件系统,它存在于内存当中,当系统启动时由内核挂载于内存当中。用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的数据结构信息。 2.Linux设备底层模型 1)为什么要使用设备模型原创 2012-03-08 16:12:52 · 858 阅读 · 0 评论 -
驱动之路-设备模型(下)上层模型
一、重要知识点: 设备模型由总线、设备、驱动三要素组成。底层模型决定上层模型,在总线,设备,驱动的结构体中你总是可以看到它们间接或者直接的包含了kobject结构或kset结构。 1.总线 总线是处理器和设备之间的通道,在设备模型中,所有设备都通过总线相连,甚至内部的虚拟“platform”总线。在linux设原创 2012-03-08 16:14:37 · 984 阅读 · 0 评论 -
RamDisk工作原理
一 什么是RamDiskRam:内存,Disk:磁盘,在Linux中可以将一部分内存当作分区来使用,称之为RamDisk。对于一些经常被访问、并且不会被更改的文件,可以将它们通过RamDisk放在内存中,能够明显地提高系统性能。RamDisk工作于虚拟文件系统(VFS)层,不能格式化,但可以创建多个RamDisk。虽然现在硬盘价钱越来越便宜,但对于一些我们想让其访问速度很高的情况下,RamDi原创 2012-03-15 09:49:20 · 2400 阅读 · 0 评论 -
NAND Flash的坏块管理设计
NAND Flash的坏块管理设计摘要:主要介绍了基于嵌入式Linux的NAND Flash坏块管理设计和实现方案,详细阐述了坏块映射表的建立、维护及其相关算法,同时分析了此坏块算法在Linux内核及Bootloader中的具体应用。测试结果表明该算法能够处理NANDFlash的相关坏块问题,具有较高的稳定性。关键词:NAND Flash;嵌入式IAnux;映射表;坏块管理原创 2012-05-02 20:43:11 · 2985 阅读 · 1 评论 -
softirq和taskled
softirq和taskled都属于软中断,而工作队列是和软中断无关,仅仅是内核中的一个内核线程在等待工作任务,工作队列可以发送工作任务。不过他们还是有个共同点,就是都有延后执行的作用。1.首先看do_softirq如何被调用和如何处理。#ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED# define invoke_softirq() __do_soft原创 2012-05-16 11:02:21 · 3229 阅读 · 1 评论 -
linux虚拟文件系统浅析
linux虚拟文件系统浅析虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的nam原创 2013-05-12 00:34:51 · 1475 阅读 · 0 评论 -
linux页面回收浅析
关于页面的使用在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的t原创 2013-05-12 00:37:54 · 1431 阅读 · 0 评论 -
深入浅出分析Linux设备驱动程序中断
一、前言 Linux的中断宏观分为两种:软中断和硬中断。声明一下,这里的软和硬的意思是指和软件相关以及和硬件相关,而不是软件实现的中断或硬件实现的中断。软中断就是"信号机制"。软中不是软件中断。Linux通过信号来产生对进程的各种中断操作,我们现在知道的信号共有31个,其具体内容这里略过,感兴趣读者可参看相关参考文献[1]。一般来说,软中断是由内核机制的触发事件引起的(例如进程运行超时原创 2011-12-19 21:13:54 · 1183 阅读 · 0 评论 -
Ubuntu基本命令整理
sudo:如何设定/改变/启用 root 使用者的密码:sudo passwd root当你使用完毕后屏蔽 root 帐号 使用: sudo passwd -l root这个将锁住 root 帐号. 如何在终端机模式下切换到 root 身份: sudo -s -H 在线安装程序:sudo apt-get install g++pt-get最常用参数:update原创 2011-12-17 09:37:48 · 615 阅读 · 0 评论 -
vim
配置文件:.vimrc 下面是一个适合编程使用的VIM配置文件: " User definitions ==========================================================set nocompatiblesource $VIMRUNTIME/vimrc_example.vimset nobackupse原创 2011-12-16 21:27:42 · 658 阅读 · 0 评论 -
linux设备模型详解
Linux 2.6内核的一个重要特色是提供了统一的内核设备模型。随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理、热插拔以及plug and play的支持要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,2.6内核开发了全新的设备模型。2.6 设备模型提供了这个抽象. 现在它用在内核来支持广泛的任务, 包括:电源管理和系统关机这些需要一个对系统的结构的原创 2011-11-18 18:20:02 · 9468 阅读 · 0 评论 -
Linux内核模块与应用程序的对比
用户态程序 Linux内核模块运行 用户空间 内核空间入口 main() module_init()指定;出口 无 module_exit()指定; 编译 gcc –c Makefile连接 ld原创 2011-11-19 10:42:10 · 3717 阅读 · 0 评论 -
linux-2.6.35内核移植—Nand flash驱动的添加(分区)
【实验目的】 本实验通过在上个实验的基础上做Nand flash的移植,Nand flash在s3c2410的默认配置中是已经选上的,只是他的分区需要根据我们的实际情况来配置。从而进一步完善系统的结果,并掌握Nand flash的移植方法【实验环境】1、 Ubuntu 10.10发行版2、 u-boot-2010.033、 FS2410平台4、 交叉编译原创 2011-11-15 19:15:09 · 4586 阅读 · 0 评论 -
linux软中断的小结
一. 软中断概况 软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"(《Linux内核源代码情景分析》第三章)。软中断的一种典型应用就是所谓的"下半部"(bott原创 2011-11-23 14:15:27 · 9669 阅读 · 0 评论 -
linux内存学习笔记(一)
一、内存管理单元MMU该单元辅助操作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。(1) TLB:它缓存少量的虚拟地址与物理地址的转换关系。“快表”(2) TTW:包含所有虚拟地址与物理地址的转换关系。TTW成功后,结果写入TLB二、arm平台linux内存映射(来自《解析基于ARM9 的Linux 内存映射原创 2011-11-24 17:03:21 · 1510 阅读 · 0 评论 -
linux内存学习(四)——概念分析
内容来源:网络l Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存中的实际地址,则由内核为其建立内存映射时临时分配,具体地址取决于当时所分配的物理内存页面。用户可以将编译将到的可执行文件,用”原创 2011-11-24 17:06:48 · 1608 阅读 · 0 评论 -
linux内存学习笔记(二)——设备地址到用户空间
系统调用mmap(用户空间使用)caddr_t mmap(caddr_t addr,size_t len,int prot,int flags,int fd,off_t offset);prot,指定访问权限,PROT_READ(可读),PROT_WRITE(可写)PROT_EXEC(可执行)PROT_NONE(不可访问)caddr_t,实际上是 void*;原创 2011-11-24 17:04:24 · 4856 阅读 · 0 评论 -
linux内存学习笔记(三)——静态映射与DMA
一、静态映射概述在将linux移植到目标电路板时,通常会建立外设I/O内存到虚拟地址的静态映射。通过在map_desc结构体添加新成员即可完成静态映射任务。 struct map_desc{ unsigned long virtual; unsigned long pfn; unsig原创 2011-11-24 17:05:22 · 3438 阅读 · 0 评论 -
Linux驱动开发必看
【IT168 技术文档】在开始步入Linux设备驱动程序的神秘世界之前,让我们从驱动程序开发人员的角度看几个内核构成要素,熟悉一些基本的内核概念。我们将学习内核定时器、同步机制以及内存分配方法。不过,我们还是得从头开始这次探索之旅。因此,本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。 2.1 启动过程 图2-1显示了基于x86计算机Linux系统的启动顺序。第一步原创 2011-11-25 20:16:09 · 2535 阅读 · 1 评论 -
Linux内核模块编程指南
什么是内核模块?现在,你是不是想编写内核模块。你应该懂得C语言,写过一些用户程序, 那么现在你将要见识一些真实的东西。在这里,你会看到一个野蛮的指针是如何 毁掉你的文件系统的,一次内核崩溃意味着重启动。什么是内核模块?内核模块是一些可以让操作系统内核在需要时载入和执 行的代码,这同样意味着它可以在不需要时由操作系统卸载。它们扩展了操作系 统内核的功能却不需要重新启动系统。举例子来说,其中一原创 2011-11-18 12:58:29 · 2467 阅读 · 0 评论 -
块设备驱动注册和注销、加载与卸载、块设备驱动的I/O请求
块设备驱动注册和注销块设备驱动的第一个任务就是将他们自己注册到内核中,其函数原型如下: int register_blkdev(unsigned int major, const char* name);major参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被现实.如果major为0,内核会自动分配一个新的主设备号,并由该函数返回原创 2011-11-28 21:05:12 · 5195 阅读 · 0 评论 -
关于likely()与unlikely函数
支声明对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现,或者该条件很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏,比如likely()和unlikely(),这样使用起来比较方便。例如,下面是一个条件选择语句:if (foo) { /* .. */}如果想要把这个选择标记成绝少发生的分支:/* 我们认为fo原创 2011-11-29 19:55:28 · 8453 阅读 · 0 评论 -
Linux串口编程
Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。串口简介串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准原创 2011-12-16 21:19:06 · 738 阅读 · 0 评论 -
linux文件读写浅析
在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。本文将顺着这条路走下去,大致看看普通磁盘文件的读写是怎样实现的。linux内核响应一个块设备文件读写的层次结构如图(摘自ULK3):原创 2013-05-12 00:36:02 · 1914 阅读 · 0 评论