嵌入式Linux中文站

linux字符设备驱动:自动创建设备及其节点

阅读(177)

大概步骤: 一、 注册设备号 注册函数: regsiter_chrdev_region() alloc_chrdev_region() 或 查看#cat /proc/devices register_chrdev() 注销函数: unregist_chrdev_region() 或 unregister_chrdev() 二、初始化cdev并添加到系统 初始化cdev 静态初始化 cdev_init() 或 动态初始化 cdev_alloc() 添加到系统函数 cdev_add() 从系统删除函数 cde

Linux内核启动及文件系统加载过程

阅读(163)

一、 Linux 内核自解压过程 在 linux 内核启动过程中一般能看到图1内核自解压界面,本小节本文重点讨论内核的自解压过程。 图1 解压内核 内核压缩和解压缩代码都在目录 kernel/arch/arm/boot/compressed ,编译完成后将产生 head.o、misc.o、piggy.gzip.o、vmlinux、decompress.o 这几个文件, head.o 是内核的头部文件,负责初始设置; misc.o 将主要负责内核的解压工作,它在 head.o 之后; piggy.gzip.

Linux 内核工作原理

阅读(179)

本文发表于Linux Format magazine杂志,作者从技术深度上解释了Linux Kernel是如何工作的。相信对Linux开发者来说有不小的帮助。 牛津字典中对kernel一词的定义是:较软的、通常是一个坚果可食用的部分。当然还有第二种定义:某个东西核心或者最重要的部分。对Linux来说,它的Kernel无疑属于第二种解释。让我们来看看这个重要的东西是如何工作的,先从一点理论说起。 广义地来说kernel就是一个软件,它在硬件和运行在计算机上的应用程序之间提供了一个层。严格点从计算机科学的角度

深入分析 Linux 内核链表

阅读(384)

一、 链表数据结构简介 链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时

Linux内核读写文件

阅读(220)

1. 序曲 在用户态,读写文件可以通过read和write这两个系统调用来完成(C库函数实际上是对系统调用的封装)。但是,在内核态没有这样的系统调用,我们又该如何读写文件呢? 阅读linux内核源码,可以知道陷入内核执行的是实际执行的是sys_read和sys_write这两个函数,但是这两个函数没有使用EXPORT_SYMBOL导出,也就是说其他模块不能使用。 在fs/open.c中系统调用具体实现如下(内核版本2.6.34.1): SYSCALL_DEFINE3(open, const char __

编写Linux内核模块

阅读(113)

最近由于学习需要,学习了一下Linux内核模块的编写方法,特此把学习过程中的问题记录下来!!! [cpp] view plain copy print ? // //hello.c // #includelinux/init.h #includelinux/kernel.h #includelinux/module.h static int hello_init( void ){ printk(KERN_WARNING Moduleinit:Helloworld!\n ); return 0; } sta

Linux 内核里的数据结构——基数树

阅读(118)

正如你所知道的,Linux内核提供了许多不同的库和函数,它们实现了不同的数据结构和算法。在这部分,我们将研究其中一种数据结构 基数树 Radix tree 。在 Linux 内核中,有两个文件与基数树的实现和API相关: include/linux/radix-tree.h lib/radix-tree.c 让我们先说说什么是 基数树 吧。基数树是一种 压缩的字典树 compressed trie ,而字典树是实现了关联数组接口并允许以 键值对 方式存储值的一种数据结构。这里的键通常是字符串,但可以使用任

Linux体系结构和内核结构

阅读(230)

Linux 体系结构 如下图所示,Linux体系结构,从大的方面可以分为用户空间(UserSpace)和内核空间(KernelSpace)。 用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是Linux体系中不可缺少的一部分。 内核空间包括硬件平台、平台依赖代码、内核、系统调用接口。 在任何一个现代操作系统中,都是分层的。为什么需要分层呢? 从程序员的角度分析,将linux底层和和应用分开,将linux底层和应用分开,做应用的做应用,做底层的做底层,各干各的