
linux
文章平均质量分 63
sooolo
这个作者很懒,什么都没留下…
展开
-
copy_from_user
copy_from_user最近貌似有人问为什么要用copy_from_user这类函数的问题,难道内核不能使用用户态的指针吗?那人自己做了个实验,不用copy_from_user,而是直接在内核里使用用户态指针,程序运行得好好的,啥事也没有。那么内核干嘛还要提供这么些函数呢?我看网上有人说用户态指针在内核里没有意义了,如同内核指针在用户态一样没有意义了。这话其实不对,以x86来说,页转载 2012-06-14 18:25:16 · 2016 阅读 · 0 评论 -
Linux设备驱动程序总述
Linux设备驱动程序的作用设备 驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。大多数编程可以分为两个部分:机制:需要提供什么功能 策略:如何使用这些功能 内核的转载 2012-06-20 15:33:47 · 2889 阅读 · 0 评论 -
块设备驱动程序
第1章+---------------------------------------------------+| 写一个块设备驱动 |+---------------------------------------------------+| 作者:赵磊转载 2012-07-20 10:18:30 · 9567 阅读 · 0 评论 -
内存映射
CPU地址空间CPU地址空间(一)地址的概念1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存、BIOS等)。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 物理地址空间,一部分给物理RAM(内存)用,一部分转载 2012-10-26 14:37:55 · 771 阅读 · 0 评论 -
sbrk
brk() , sbrk() 的声明如下:[cpp] view plaincopyprint?#include int brk(void *addr); void *sbrk(intptr_t increment); 这两个函数都用来改变 "program break" (程序间断点)的位置,这个位置可参考下图:如 man 里说的:转载 2012-11-28 11:25:57 · 962 阅读 · 0 评论 -
压缩与解压命令
tar-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出转载 2013-01-24 22:23:05 · 1651 阅读 · 0 评论 -
gcc命令
1简介 GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GN原创 2013-03-02 19:05:06 · 667 阅读 · 0 评论 -
find与grep命令
在linux下面工作,有些命令能够大大提高效率。本文就向大家介绍find、grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们。本文结构如下:find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1、f转载 2013-04-01 21:44:07 · 1028 阅读 · 0 评论 -
Linux常用命令
rpm与tar比较: .rpm 是安装文件。就像WNDOWS中的exe文件tar.gz 很明显 就相当于windows 中的rar 打包文件rpm. 文件可以用 rpm -ivh xxxx.rpm 直接安装tar.gz 文件可以用 tar zxvf xxx.tar.gz 进行解压 grep与find比较:grep是文本搜索,即搜索字符find是在一原创 2013-04-01 15:21:15 · 886 阅读 · 0 评论 -
linux下C函数调用机制(X86平台)
一 C与汇编程序的相互调用为了提高代码执行效率,内核源代码中有的地方直接使用了汇编语言编制。这就会涉及在两种语言编制的程序之间的相互调用问题。本节首先说明C语言函数的调用机制,然后举例说明两者函数之间的调用方法。(一) C函数调用机制在Linux内核程序boot/head.s执行完基本初始化操作之后,就会跳转去执行init/main.c程序。那么head.s程序是如何把执行控制转交给转载 2013-04-22 15:03:02 · 2427 阅读 · 0 评论 -
Makefile 中 = := ?= +=的区别
Makefile 中 = := ?= +=的区别在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hel转载 2012-06-14 18:14:21 · 433 阅读 · 0 评论 -
信号量 互斥锁 条件变量的区别
信号量 互斥锁 条件变量的区别 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量转载 2012-06-14 18:42:28 · 583 阅读 · 0 评论 -
如何写好Linux设备驱动
面对不断升级的linux内核、GNU开发工具、linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁。兴奋的是新的软件软件、工具给我提供了更强大的功能,烦躁的是适应新软件的特性、搭建新环境是一项非常繁琐的事情。本文想从以下3个方面探讨一下“面对不断升级的内核,如何学习linux设备驱动”。一、 内核发展的现状及其对技术人员的影响原创 2012-03-12 15:06:54 · 711 阅读 · 0 评论 -
驱动编译进内核或编译模块的区别
linux内核中Kconfig文档的作用2.6内核的源码树目录下一般都会有两个文文:Kconfig和Makefile。分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中转载 2012-03-16 19:20:20 · 4941 阅读 · 0 评论 -
简单字符设备驱动程序(二)
实际应用:1.总体结构: 2.VirtualDisk字符设备驱动实例:VirtualDisk是一个虚拟磁盘设备,在这个磁盘设备中分配了8K的连续内存空间,并定义了两个端口数据(Port1和Port2)。驱动程序可以对设备进行读写、控制和定位操作,用户空间的程序可以通过Linux系统调用访问VirtualDisk设备中的数据。原创 2012-03-16 14:49:29 · 907 阅读 · 0 评论 -
/arch
alpha 处理器 Alpha 处理器最早由美国DEC 公司设计制造,在Compaq (康柏)公司收购DEC 之后,Alpha 处理器继续得到发展,并且应用于许多高档的Compaq 服务器上,HP (惠普)收购的Compaq ,Alpha 便为HP(惠普)所有,不过HP (惠普)已经放弃发展alpha 处理器。arm 处理器 Arm 系列处理器 是英国Arm 公司设计的原创 2012-03-16 10:13:32 · 850 阅读 · 0 评论 -
简单字符设备驱动程序(一)
理论基础:1.几个重要的结构体:(1)cedv结构体struct cdev{ struct kobject kobj; //内嵌的kobject结构,用于内核设备驱动模型的管理(驱动开发一般不适用该成员) struct module *owner;原创 2012-03-16 14:22:05 · 1205 阅读 · 0 评论 -
file指针
1.1 struct file struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file的指针通常被命名为fi转载 2012-04-04 14:25:26 · 1445 阅读 · 0 评论 -
Linux内存管理(上)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无转载 2012-05-31 15:05:29 · 646 阅读 · 0 评论 -
Linux实模式与保护模式下的寄存器
段寄存器在实模式下和保护模式下的作用先说点相关的:80x86中除8086/8088只能在实模式下工作之外,其他微处理器均可在实模式和保护模式下工作。好了,从定义和区别开始吧。先从实模式下入手:存储器地址的分段,实模式下允许的最大寻址空间为1MB(因为8086/8088地址总线宽度是20为 2^20=1048576=1024k=1M)其他的微处理器也为1M 实际上实模式就是为8086原创 2012-06-06 20:07:50 · 1747 阅读 · 0 评论 -
Linux内存管理(下)
物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更转载 2012-05-31 15:06:39 · 689 阅读 · 0 评论 -
统一编址与独立编址、I/O端口与I/O 内存。。。
引言:从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行 接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示 器…… 对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路转载 2012-06-14 18:44:09 · 3077 阅读 · 0 评论 -
vim+ctags+cscope
有网络的时候,使用LXR(The Linux Cross Referencer)在线阅读源码固然是一件很爽的事情。在无网络的情况下,只通过vim进入内核源码那样查找就显得有些勉强。接下来,本文将介绍一种快速定位源码的工具:ctags和cscope。通过vim编辑器,再配合使用上述两种工具就可以快速定位想要查看的源码。好了,开始吧!1.下载最新内核源码包,解压至主目录下接下来的步骤当然可以在转载 2013-01-11 17:27:26 · 820 阅读 · 0 评论