嵌入式Linux中文站

开发专区

Linux内核访问外设I/O资源的方式

Linux内核访问外设I/O资源的方式

阅读(180)

我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,从而可以在内核空间中访问这段I/O资源。 Io...

linux内存操作--ioremap和mmap

linux内存操作--ioremap和mmap

阅读(157)

对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成。那么CPU在这个过程中是如何找到外设的呢? 尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口。但是如果系统能够每个端口都被赋予一个具体的地址值,那么在系统中就能轻易的找到任何一个外设。系统在管理的时候,不管是内存还是外设都需要分配一个内存地址。对于一个32bit的系统来讲,可寻址的范围为2^32=4G的地址空间。 既然说到地址空间,就要明确地址空间的种类:物理地址、总线地址、虚拟地址。 (1)物理地址 CPU地址总线...

嵌入式Linux常用文件系统

嵌入式Linux常用文件系统

阅读(207)

Linux支持很多文件系统,在选择时应根据应用的功能选择文件系统 内核只认识VFS(虚拟文件系统),不同的文件系统实现的都是和VFS的相互调用,进而通过VFS访问内核 MTD(Memeory Technology Device,存储技术设备):针对Flash做的底层驱动程序 Rootfs(根文件系统): ...

基于Linux与Busybox的Reboot命令流程分析

基于Linux与Busybox的Reboot命令流程分析

阅读(402)

一:Busyobx层的分析 这段时间,在忙到一个项目时,需要在busybox中用到reboot命令,开始在busybox中的shell中输入reboot命令,始终如下的信息,然后就停止在那里了,无法重启...为了彻底的弄明白这个问题,我在网络上找了很久,终于有个人写的一个reboot流程分析,我就借花献佛.在这里重新分析下busybox是如何运行这个命令,同时又是如何调用到Linux内核中的mach_reset中的arch_reset,当针对不同的ARM芯片时,作为Linux内核开发和驱动开发的朋友,对于...

Linux中iptables的原理

Linux中iptables的原理

阅读(219)

iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为如果数据包头符合这样的条件,就这样处理这个数据包。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、I...

linux驱动之定时器的使用

linux驱动之定时器的使用

阅读(368)

Linux的内核中定义了一个定时器的结构: #includelinux/timer.h struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long); }; 利用这个结构我们可以在驱动中很方便的使用定时器。 一: timer的API函数: 初始化定时器: void init_tim...

Linux内核特性之VDSO

Linux内核特性之VDSO

阅读(288)

这段时间看Linux内核源码的时候,经常碰到vdso这个东西(像在Feature-fixup中,获取时间等操作时),网上搜了一下,才知道了含义,原来这是Linux为了解决和glibc兼容而想出的绝招...

linux 同步机制之complete

linux 同步机制之complete

阅读(172)

在Linux内核中,completion是一种简单的同步机制,标志things may proceed。 要使用completion,必须在文件中包含linux/completion.h,同时创建一个类型为struct completion的变量。 [cpp] view plain copy 这个变量可以静态地声明和初始化: DECLARE_COMPLETION(my_comp); 或者动态初始化: struct completionmy_comp; init_completion(my_comp); 如...