嵌入式Linux中文站

Linux内核设备树操作常用API

阅读(148)

一文中介绍了设备树的语法,这里主要介绍内核中提供的操作设备树的API,这些API通常都在 include/of.h 中声明。 device_node 内核中用下面的这个结构描述设备树中的一个节点,后面的API都需要一个device_node对象作为参数传入。 //include/of.h 46 struct device_node { 47 const char *name; 48 const char *type; 49 phandle phandle; 50 const char *full_name

理解Linux操作系统中的块设备

阅读(207)

块设备也就是存储以块为单位存储数据的设备,比较典型的如磁盘设备、光盘或者优盘。本文首先集中在磁盘设备的相关内容的分析,其他设备类型很类似,暂时不做介绍。 在Windows操作系统下磁盘设备似乎是一个实实在在的设备,我们可以通过图形界面对磁盘设备进行管理。如图1是Windows下的磁盘管理界面,可以通过这个界面清晰的看到磁盘设备,并且可以对其进行格式化等操作。 图1 Windows磁盘设备 Linux操作系统的磁盘设备并不直观,在LInux系统中一切皆文件的理念下,磁盘设备其实是一个文件,只不过是一个比较特

linux arm mmu基础

阅读(134)

ARM MMU页表框架 先上一张arm mmu的页表结构的通用框图(以下的论述都由该图来逐渐展开): 以上是arm的页表框图的典型结构:即是二级页表结构: 其中第一级页表(L1)是由虚拟地址的高12bit(bits[31:20])组成,所以第一级页表有4096个item,每个item占4个字节,所以一级页表的大小为16KB,而在第一级页表中的每个entry的最低2bit可以用来区分具体是什么种类的页表项,2bit可以区分4种页表项,具体每种页表项的结构如下: 简而言之L1页表的页表项主要有两大类: 第一大

解析Linux内核的基本的模块管理与时间管理操作---超时处理

阅读(143)

内核模块管理 Linux设备驱动会以内核模块的形式出现,因此学会编写Linux内核模块编程是学习linux设备驱动的先决条件。 Linux内核的整体结构非常庞大,其包含的组件非常多。我们把需要的功能都编译到linux内核,以模块方式扩展内核功能。 先来看下最简单的内核模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include linux/init.h #include linux/module.h static int _

DMA内存申请--dma_alloc_coherent 及 寄存器与内存

阅读(127)

在项目驱动过程中会经常用到dma传输数据,而dma需要的内存有自己的特点,一般认为需要物理地址连续,并且内存是不可cache的,在linux内核中提供一个供dma所需内存的申请函数dma_alloc_coherent. 如下所述: dma_alloc_coherent() dma_alloc_coherent() -- 获取物理页,并将该物理页的总线地址保存于dma_handle,返回该物理页的虚拟地址 DMA映射建立了一个新的结构类型---------dma_addr_t来表示总线地址。dma_addr

内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages

阅读(236)

在内核模块中申请分配内存需要使用内核中的专用API:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages;当然,设备驱动程序也不例外; 对于提供了MMU功能的处理器而言,Linux提供了复杂的内存管理系统,使得进程所能访问到的地址空间可以达到4GB;而这4GB的空间又被划分为两个部分:0GB~3GB(PAGE_OFFSET,x86中的值是0xC0000000)的区域被用作进程的用户空间,3GB~4GB的区域被用作内核空间; 在内核空间中,从3GB到vmalloc_s

Linux IDR机制

阅读(146)

IDR机制在Linux内核中指的是整数ID管理机制。 实质上来讲,这就是一种将一个整数ID号和一个指针关联在一起的机制。 这个机制最早在03年2月加入内核,当时作为POSIX定时器的一个补

Linux内核Ramdisk(initrd)机制

阅读(141)

摘要:对于Linux用户来说,Ramdisk并不陌生,可是为什么需要它呢?本文对Ramdisk在内核启动过程中的作用,以及它的内部机制进行深入介绍。 标题 initrd 和 initramfs在内核中的处理 临时的根目录rootfs的挂载 initrd的解压缩 老式的initrd的处理 cpio格式的initrd的处理 initrd实例分析 在早期的Linux系统中,一般就只有软盘或者硬盘被用来作为Linux的根文件系统,因此很容易把这些设备的驱动程序集成到内核中。但是现在根文件系统可能保存在各种存储设备