![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内核
文章平均质量分 75
tangkai177
这个作者很懒,什么都没留下…
展开
-
uboot在2440上移植
uboot是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序, oot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。uboot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。为什么对ub转载 2012-12-19 22:25:17 · 531 阅读 · 0 评论 -
设备模型之总线
总线1 总述 总线是处理器和一个或多个设备之间的通道,在设备模型中, 所有的设备都通过总线相连, 甚至是内部的虚拟"platform"总线。总线可以相互插入。设备模型展示了总线和它们所控制的设备之间的实际连接。1.1 用struct bus_type结构体定义总线 在 Linux 设备模型中, 总线由 bus_type 结构表示, 定义在 : struct b转载 2013-01-17 19:32:23 · 394 阅读 · 0 评论 -
linux内核制作
1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起。 1.1.1 Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL =转载 2012-12-27 16:58:57 · 1000 阅读 · 0 评论 -
LED驱动程序例子
例子mini2440_leds.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include转载 2013-01-14 01:48:44 · 452 阅读 · 0 评论 -
ioctl设备控制及例子
ioctl功能-----大部分驱动程序除了需要具备读写设备的能力外,还需要具备对硬件的控制能力。例如,要求设备报告错误信息,改变波特率,这些操作常常通过ioctl方法来实现。用户使用方法-----在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,......)原型中的点表示这是一个可选的参数转载 2013-01-10 21:31:16 · 460 阅读 · 0 评论 -
Linux字符驱动设备例子
测试文件app-mem.c#include int main(){ FILE *fp0 = NULL; char Buf[4096]; /*初始化Buf*/ strcpy(Buf,"Mem is char dev!"); printf("BUF: %s\n",Buf); /*打开设备文件*/ fp0 = fopen("/dev/memdev0","r+");转载 2013-01-10 15:21:38 · 513 阅读 · 0 评论 -
硬件访问与混杂设备驱动
1、 寄存器与内存 寄存器与内存的区别在哪里呢? 寄存器和RAM 的主要不同在于寄存器操作有副作用(side effect或边际效果):读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器只要一读取,便自动清零。2、 内存与I/O 在X86处理器中存在I/O空间的概念,I/O空间是相对内存空间而言的,他们是彼此独立的地址空间,在转载 2013-01-13 14:27:32 · 383 阅读 · 0 评论 -
Poll方法
1、什么是Poll方法,功能是什么?2、Select系统调用(功能) Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。 int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval转载 2013-01-12 21:31:15 · 638 阅读 · 0 评论 -
mmap设备方法
Mmap系统调用(功能)Void* mmap(void * add, size_t len , int prot, int flags, int fd, off_t offset)Mmap系统调用(参数)*Addr指定映射的起始地址,通常设为NULL,由系统指定。*Length:映射到内存的文件长度*port:映射区的保护方式转载 2013-01-12 23:59:25 · 588 阅读 · 0 评论 -
自动创建设备文件
设备文件是非常重要的文件,是应用程序与设备驱动交换数据,控制硬件的桥梁。在驱动程序中open、release的实现过程中其中的一个参数struct inode实质就是设备文件的索引,没有这个索引也就没有后期的各种操作,通常设备文件也被称为设备文件节点。因此没有设备文件后期的各种实现都是多余的。设备文件的创建有两种方法,其中就是在创建文件系统过程中用到的mknod命令。该命令的形式如下:转载 2013-01-12 23:16:01 · 563 阅读 · 0 评论 -
阻塞型字符设备驱动及例子
前一节我们在设计简单字符驱动程序时,跳过了一个重要的问题:当一个设备无法立刻满足用户的读写请求时应当如何处理? 例如:调用read时没有数据可读, 但以后可能会有;或者一个进程试图向设备写入数据,但是设备暂时没有准备好接收数据。应用程序通常不关心这种问题,应用程序只是调用read 或write 并得到返回值。驱动程序应当(缺省地)阻塞进程,使它进入睡眠,直到请求可以得到满足。阻转载 2013-01-11 14:28:49 · 445 阅读 · 0 评论 -
内核等待队列
在Linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可看作保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待等列中取出进程。Linux 2.6内核提供了如下关于等待队列的操作:1、定义等待队列wait_queue_head_t my_queue2、初始化等待队列init_waitqueue_head(&my_queue)3、转载 2013-01-11 14:26:57 · 286 阅读 · 0 评论 -
根文件系统制作
2.1 根文件系统预备知识 嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录。 目录 内容 bin 存放所有用户都可以使用的、基本的命令。 sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。 usr 里面存放的是共享、只读的程序和数据。 proc转载 2012-12-27 17:00:33 · 431 阅读 · 0 评论 -
Sysfs文件系统
Linux2.6内核引入了sysfs 文件系统。sysfs 被看成是与proc同类别的文件系统。sysfs 把连接在系统上的设备和总线组织成分级的文件,使其从用户空间可以访问到。sysfs的挂载过程,她是这样被挂载的。mount -t sysfs sysfs /sys Sysfs 被加载在/sys/ 目录下,它的子目录包括:• Block:在系统中发现的每个块设备在该目录下对应一个子目转载 2013-01-15 01:44:48 · 563 阅读 · 0 评论 -
触摸屏驱动设计
触摸屏工作流程:1、选择模式2、设置触摸屏接口到等待接口状态3、如果中断发生,激活转换模式4、获取坐标后,返回等待中断状态(INT_TC中断用于按下或弹起触摸屏)(INT_ADC用于坐标转换完成) 韦东山触摸屏驱动源码分析#include #include #include #include #inclu转载 2013-01-22 14:12:01 · 490 阅读 · 0 评论 -
LCD驱动程序设计
1 Linux下设备驱动程序驱动程序从字面上可以理解为一类程序,这类程序的目的一般是驱动硬件正常工作,所以通常所说的驱动程序都是针对特定的硬件来编写的。Linux设备驱动程序是为特定的硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。Linux系统下驱动程序是运行在内核态的,是和内核连接在一起的程序。如果运行在用户态的应用程序想控制硬件设备,必须通过驱动程序来控制。Lin转载 2013-01-22 14:21:04 · 815 阅读 · 0 评论 -
USB驱动程序
usb驱动程序设计实现步骤:首先我们贴出代码:/* * drivers\hid\usbhid\usbmouse.c */#include #include #include #include #include #include static struct input_dev *uk_dev;static char *u转载 2013-03-10 13:37:36 · 649 阅读 · 0 评论 -
Linux输入子系统
Linux系统提供了input子系,按键、触摸屏、鼠标等都可以利用input接口函数来实现设备驱动。体系结构设备描述在Linux内核中,input设备用nput_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作转载 2013-01-21 00:12:58 · 505 阅读 · 0 评论 -
内核定时器
在内核中,如果我们想在将来的某个时间点调度执行某个动作,同时在该时间点到达之前不会阻塞当前进程,那么内核定时器是个不错的选择。例如,一些周期性的操作等等。那么到底什么是定时器呢,要实现一个定时器,都需要哪些操作?内核定时器是一个数据结构,它告诉内核在一个用户定义的时间点,使用用户定义的参数来执行一个用户定义的函数。其数据结构是这样的:#include struct timer_li转载 2012-12-28 14:37:01 · 320 阅读 · 0 评论 -
linux网络体系结构
linux协议栈层次---osi模型(open systems interconnection)但是linux中网络栈的介绍一般分为四层的internet模型。要从协议层向设备发送数据,需要使用dev_queue_xmit函数,这个函数对数据进行排队,并交由底层设备驱动程序进行最终传输,报文的接收通常是使用netif_re执行的。当底转载 2013-01-20 00:26:38 · 643 阅读 · 0 评论 -
中断处理
转载 2013-01-19 00:58:58 · 342 阅读 · 0 评论 -
Platform驱动程序
Platform总线是linux2.6内核加入的一种虚拟总线。platform机制的本身使用并不复杂,由两部分组成:platform_device和platform_driverPlatform 驱动与传统的设备驱动模型相比,优势在于platform机制将设备本身的资源注册进内核,由内核统一管理,在驱动程序使用这些资源时使用统一的接口,这样提高了程序的可移植性。 平台设备描述平台设转载 2013-01-18 01:47:50 · 408 阅读 · 0 评论 -
设备模型之驱动
驱动管理一定的设备,其中的关系主要是内核的内部机制实现的,但是实现的具体逻辑需要在bus_type中的match函数中具体设计。通常是一定的设备名和驱动名匹配,当然也可以有其他的逻辑,具体的只需要设计好bus_type中的match函数。驱动是由驱动结构体实现的。具体如下所示:/*驱动结构体*/struct device_driver {转载 2013-01-18 01:23:54 · 367 阅读 · 0 评论 -
设备模型之设备
例子bus.c#include #include #include #include #include MODULE_AUTHOR("David Xie");MODULE_LICENSE("Dual BSD/GPL");static char *Version = "$Revision: 1.9 $";static int my_ma转载 2013-01-17 23:54:13 · 409 阅读 · 0 评论 -
kobject和kset
1 Kobject1.1 简介Kobject 是Linux 2.6 引入的新的设备管理机制,在内核中由struct kobject数据结构 进行描述通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管 理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注 册的kobject对象都对应于sysfs文件系统中的转载 2013-01-15 11:13:23 · 651 阅读 · 0 评论 -
Linux设备驱动之并发控制
在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制。Linux内核中解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候作为互斥锁使用)。 自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。 自旋锁不会引起调用者睡眠转载 2013-01-08 21:23:44 · 327 阅读 · 0 评论 -
PCI驱动程序设计
一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PCI提供了一组完整的总线接口规范,其目的是描述如何将计算机系统中的外围设备以一种结构化和可控化的方式连接在一起,同时它还刻画了外围设备在连接时的电气特性和行为规约,并且详细定义了计算机系统中的各转载 2013-01-23 18:56:15 · 654 阅读 · 0 评论 -
linux内核模块开发
1.内核模块的概念Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用需要的组件呢:方法一:把所有的组件都编译进内核文件,即:zImage或bzImage,但这样会导致两个问题:一是生成的内核文件过大;二是如果要添加或删除某个组件时,需要重新编译这个内核。方法二:组件在需要时被使用,动态的添加到正在运行的内核中,内核文件zImage或bzImage本身并不包含该组件,在li转载 2012-12-18 11:20:03 · 478 阅读 · 0 评论 -
Linux系统调用
4、创建新的应用函数转载 2012-12-30 10:00:35 · 269 阅读 · 0 评论 -
Linux进程调度
一:Linux进程的四大要素1:一段供进程执行的程序,该程序可以被多个进程执行。2:独立的内核堆栈。3:进程控制快(task_struct:有了这个数据结构,进程才能成为内核调度的一个基本单位接受内核的调度。同时,这个结构还记录着进程所占用的各项资源。4:独立的存储空间:即拥有专有的用户空间,除了前面的内核空间还有用户空间。线程:只有前三条,没有第四条。内核线程:完全没有用转载 2012-12-29 21:45:54 · 548 阅读 · 0 评论 -
proc文件系统
转载 2012-12-30 10:58:45 · 310 阅读 · 0 评论 -
Linux进程控制
转载 2012-12-29 19:52:12 · 319 阅读 · 0 评论 -
深入分析 Linux 内核链表
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,转载 2012-12-28 13:49:49 · 414 阅读 · 0 评论 -
Linux内存管理子系统
地址类型: a.物理地址:出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果 b.线性地址(虚拟地址): c.逻辑地址:在程序经过编译后,在汇编程序中使用的地址CPU要将一个逻辑地址转换为物理地址,需要两步:首先CPU利用段式内存管理单元,将逻辑地址转换成虚拟地址,再利用页式内存管理单元,把线性地址最终转换为物理地址 段式转载 2012-12-27 21:24:42 · 565 阅读 · 0 评论 -
Linux进程地址空间
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢?呵呵,这一切的一切都是个迷呀,下面我们就一步一步解开心中转载 2012-12-27 23:41:08 · 302 阅读 · 0 评论 -
Linux内核地址空间分布和进程地址空间
内核地址空间分布直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。永久内存映射区:该区域可访转载 2012-12-28 11:12:21 · 340 阅读 · 0 评论 -
进程地址空间与虚拟存储空间的理解
在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。一 早期的内存分配机制在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算 机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,转载 2012-12-28 10:44:34 · 361 阅读 · 0 评论 -
嵌入式Linux文件系统详细介绍
Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux下的文件系统结构如下:Linux下的文件系统结构转载 2012-12-27 18:11:00 · 503 阅读 · 0 评论 -
linux内核介绍
由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先回顾一下 Linux 的简短历史,然后从较高的层次审视 Linux 内核的体系结构,最后介绍它的主要子系统。Linux 内核具有超过 600 万行的代码,因此本文不可能进行完整的介绍。请使用指向其他内容的链接进一步学习。Linux 的简短历史尽管 Linux 绝对是最流行的开源操作系统,但是相对于其他操转载 2012-12-17 22:25:40 · 352 阅读 · 0 评论 -
linux内核源代码目录
下面我们来了解一下Linux内核源代码所包含的目录: /arch:目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。 /documentation:目录下是一些文档,没有内核代码,可惜都是English的,是对每个目录作用的具体说明。 /drive转载 2012-12-17 23:25:05 · 448 阅读 · 0 评论