Linux
文章平均质量分 66
dingyuanpu
QQ:d-y-p@qq.com
展开
-
解决CentOS启动提示unexpected inconsistency;RUN fsck MANUALLY的问题
问题原因:出现这种问题,多数是因为异常断电造成的磁盘问题,需要修复解决方法:1、df -h 查看root用户所在的分区挂载位置,我的在/dev/mapper/vg_node11-lv_root2、fsck -y /dev/mapper/vg_node11-lv_root 修复文件系统3、重启原创 2016-07-21 14:30:49 · 4120 阅读 · 0 评论 -
C语言:typedef定义函数指针
在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果不知道,请看下面的程序,里面有比较详细的说明 #include // 声明四个函数//int add(int, int);//int sub(int, int);//i原创 2010-05-09 17:34:00 · 8565 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记10--中断与时钟
中断:cpu在执行程序的过程中,出现了某些突发事件时cpu必须暂停执行当前的程序,转去处理突发事件,处理完毕后cpu又返回原程序被中断的位置并继续执行 根据中断入口跳转方法的不同,中断分为向量中断和非向量中断。采用向量中断的cpu通常为不同的中断分配不同的中断号,当检测到某中断号的中断到来后,就自动跳转到与该中断号对应的地址执行。不同中断号的中断油不同的入口地址。非向量中断的多个原创 2010-05-09 17:33:00 · 1006 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记9--异步通知与异步I/O
异步通知:一旦设备就绪,则主动通知应用程序,这样应用程序根本不需要查询设备状态,这一点非常类似于硬件上的“中断”的概念,比较准确的称谓是“信号驱动的异步I/O //启动信号驱动机制signal(SIGIO, input_handler);//让input_handler()处理SIGIO信号fcntl(fd, F_SETOWN, getpid());//设置本进程为STD原创 2010-05-09 17:31:00 · 925 阅读 · 0 评论 -
Linux下select和poll的用法
select()函数的作用 系统调用select和poll的后端实现,用这两个系统调用来查询设备是否可读写,或是否处于某种状态。如果poll为空,则驱动设备会被认为即可读又可写,返回值是一个状态掩码如何使用select()函数? select()函数的接口主要是建立在一种叫fd_set类型的基础上。它(fd_set) 是一组文件描述符(fd)的集合。由于fd_set类型的长度在原创 2010-05-09 17:30:00 · 1539 阅读 · 1 评论 -
Linux设备驱动开发详解--笔记8--阻塞与非阻塞I/O
阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后在进行操作。非阻塞操作的进程在不能进行设备操作时并不挂起,它或者被放弃,或者不停的查询,直到可以进行操作为止 唤醒进程的地方最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断 在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问息息相关的,使用非阻塞I/O的应用程序通常原创 2010-05-09 17:30:00 · 1644 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记7--并发控制
中断屏蔽的使用方法:local_irq_disable() //关中断local_irq_enable() //开中断 这两个函数都只能禁止和使能本cpu内的中断,因此,并不能解决SMP多cpu引发的竞态。因此,单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法,它适宜与自旋锁联合使用 另外,local_irq_save(flags)除了进行禁止中断操作以外,还保存目原创 2010-05-09 17:28:00 · 538 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记6--字符设备驱动
使用下列洪可以通过主设备号和次设备号生成dev_tMKDEV(int major, int mainor) 如果复制的内存是简单类型,如char、int、long等,则可以使用简单的put_user()和get_user() Linux系统建议以如图方式定义ioctl命令码 命了码的设备类型字段为一个“幻数”,可以是0-0xff之间的值,内核中的ioctl-number原创 2010-05-09 17:27:00 · 747 阅读 · 0 评论 -
vi命令
移动命令(光标定位) h j k l 左下上右移动光标H 跳到屏幕上的第一行M 跳到屏幕的中间行L 跳到屏幕上的最后一行w 光标以单词向前移动至单词第一个字母b 与w相反,向后移动至单词的第一个字母%: 移动到与制匹配的括号上去(),{},[],CTRL+G 得到当前光标在原创 2010-05-09 17:26:00 · 413 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记11--内存与I/O访问
typedef void (*lpFunction) ();//定义一个无参数,无返回类型的函数指针类型//定义一个函数指针,指向cpu启动后所执行的第一条指令的位置lpFunction lpReset = (lpFunction)0xF000FFF0;lpReset();//调用函数 MMU停供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。操作系统原创 2010-05-09 17:43:00 · 2574 阅读 · 2 评论 -
ARM Linux驱动的编译(2.6内核)
1、将驱动源码放在/drivers/char/下 2、修改drivers/char/Kconfig文件,添加以下内容:config My_Buttons tristate "My_Buttons test" depends on ARCH_S3C2440 default y if ARCH_S3C2440 help原创 2010-05-12 20:53:00 · 911 阅读 · 0 评论 -
linux常用命令个人笔记
1、设置时间设置时间为下午14点36分。# date -s 14:36:00Fri Nov 26 14:15:00 CST 1999例4:设置时间为1999年11月28号。# date -s 991128Sun Nov 28 00:00:00 CST 1999实例:设置时间伟2008年8月8号12:00# date -s "2008-08-08 12:00:00"原创 2016-07-13 11:55:33 · 591 阅读 · 0 评论 -
ubuntu登陆root用户
<br />sudo passwd... --> system --> administration --> login window --> security --> allow local system administrator login原创 2011-02-12 22:52:00 · 805 阅读 · 0 评论 -
文件描述符和文件指针的区别
文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄转载 2010-08-13 10:29:00 · 1755 阅读 · 0 评论 -
系统调用与库函数调用的区别
1、系统调用和库函数的关系系统调用通过软中断int 0x80从用户态进入内核态。函数库中的某些函数调用了系统调用。函数库中的函数可以没有调用系统调用,也可以调用多个系统调用。编程人员可以通过函数库调用系统调用。高级编程也可以直接采用int 0x80进入系统调用,而不必通过函数库作为中介。如果是在核心编程,也可以通过int 0x80进入系统调用,此时不能使用函数库。因为函数库中的函数是内核访问不到的。2、从用户调用库函数到系统调用执行的流程。1) 假设用户调用ssize_t write (int fields转载 2010-08-13 09:39:00 · 3474 阅读 · 0 评论 -
gcc命令之objdump
<br />---------------objdump是用查看目标文件或者可执行的目标文件的构成的gcc工具---------------<br /><br />以下3条命令足够那些喜欢探索目标文件与源代码之间的丝丝的关系的朋友。<br />objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出 <可查到该文件的所有动态库> <br />objdump -t obj 输出目标文件的符号表()<br />objdump -h obj 输出目标文件的所有段概括()<br转载 2010-08-04 21:06:00 · 1011 阅读 · 0 评论 -
gcc编译动态和静态链接库
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以及使用它们。第1步:编辑得到举例的程序--hello.c和test.c;测试程序test.c调用了公用函数my_lib_function。hello.c:#include void my_lib转载 2010-08-04 16:23:00 · 7931 阅读 · 2 评论 -
Linux C 信号处理
alarm(设置信号传送闹钟) 相关函数 signal,sleep表头文件 #include定义函数 unsigned int alarm(unsigned int seconds);函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。范例:#include#includevoid handler() {prin转载 2010-07-31 20:53:00 · 1820 阅读 · 0 评论 -
S3C24XX体系的Linux GPIO控制相关API实现
GPIO(General Purpose Input/Output的缩写)就是芯片的引脚,引脚是可编程的可对引脚的工作模式进行设置:输入模式(检测输入信号),输出模式(输出0或1),高阻状态(常用于AD转换),还有禁止或允许上内部下拉电阻(上拉:管脚通过电阻接高电平,下拉:管脚通过电阻接地,也可以外部接上拉或下拉电阻),还有管脚复用等功能,即通过对内部寄存器的设置使引脚既可以工作在一般模式,作为普转载 2010-05-19 19:43:00 · 1701 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记5--Linux文件与设备系统
应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operations结构体成员函数。由于字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数直接由设备驱动提供了,file_operations正是字符设备驱动的核心,如图: 而对块设备来说,ext2、fat、jffs2等文件系统中会实现针对VFS的file_ope原创 2010-05-09 17:25:00 · 1100 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记4--Linux内核模块
modprobe命令比insmod命令强大,它在加载某模块时会同时加载该模块所依赖的其他模块。使用modprobe命令加载的模块若以“modprobe –r filename”的方式卸载将同时卸载其依赖的模块。 printk打印到var/log/messages 2.6内核中已加载的信息也存在于/sys/module目录下,加载hello.ko后,内核中将包含/sys/module原创 2010-05-09 17:25:00 · 617 阅读 · 0 评论 -
内核符号表详解
关键词:Kernel Symbol Table、/proc/ksyms、system.map、Oops、LKM这应该是一个很基本的内核概念,和模块、系统调用等一样基础,但牵涉的东西却一点也不窄,一毫也不浅。(但也不深:-)【内核符号表,kernel symbol table】Linux的内核是个单内核monolithic,任一函数都可以访问公共数据结构和函数调用。在设计程序时,需要命名一些函数名、转载 2010-05-09 17:23:00 · 1837 阅读 · 0 评论 -
第一个嵌入式Linux的驱动程序
从这个总结正式开始了我的驱动之旅,心情不免有点激动,尽管现在对驱动的编写还很模糊,但还是有纪念意义的…… 开发平台: 虚拟机下RedHat9,内核2.4.20.8 交叉编译编译器:天嵌公司提供的arm-linux-gcc 4.3.3 内核树:/home/linux-2.6.30.4目标平台: TQ2440,内核是ARM9 OS内核原创 2010-05-09 17:09:00 · 1172 阅读 · 0 评论 -
Qte开发环境的搭建
1. 硬件环境A. 主机:x86系列PC机。B. 开发板:YC2440。2. 软件环境A. 主机操作系统:VMware5.5虚拟机下的Redhat9(完全安装) (RedHat企业版的可能不用安装e2fsprogs-1.35.tar.gz和jpegsrc.v6b.tar.gz)B. 开发板操作系统:嵌入式Linux,内核版本为2.6.13。C. 交叉编译器:arm-linux-gcc-2.95原创 2010-05-09 17:07:00 · 2028 阅读 · 0 评论 -
虚拟机Linux下Minicom的配置
1、添加串口: 在Linux启动之前,虚拟机--》设置--》添加--》串口--》保存--》启动Linux。 2、#minicom ,出现启动界面,CTRL-A Z 进入帮助界面 3、键入O ,配置串口,选择第三项“Serial port setup”点击回车 4、通过分别键入A、E、F,配置,点击回车(F选项配置成No,否则不能接收键盘输入) 5、选择“Sa原创 2010-05-09 17:05:00 · 629 阅读 · 1 评论 -
Windows下的Linux虚拟机网络配置
今天在虚拟机下又重装了linux,下面是从网上搜到的linux虚拟机的网络配置: 1、 你装好虚拟机后,你会发现多出来两个网卡 ,一个1,一个8,2、 共享对外的网卡:“本地连接—属性—高级” 选中 允许其他网络用户通过此计算机的Internet连接来连接 (这时“允许其他网络用户控制或禁止共享的Internet连接”变为可用状态。)选中家庭网络连接 “VMware Netwo原创 2010-05-09 17:04:00 · 483 阅读 · 0 评论 -
交叉编译环境的搭建
交叉编译环境的搭建很简单,就是把工具集解压,配好环境变量即可,具体步骤如下: 1、在usr/local/下新建目录arm2、将arm-linux-gcc-3.4.1.tar.bz2拷贝到arm目录下3、解压:tar jxvf arm-linux-gcc-3.4.1.tar.bz24、vi /root/.bashrc,在此文件的最后加一句话:export PATH=$PATH:/原创 2010-05-09 17:03:00 · 557 阅读 · 0 评论 -
Linux下第一个Qt程序
1 #include2 #include34 int main(int argc, char **argv)5 {6 QApplication a(argc, argv);7 8 QPushButton hellobtn("Hello Qt!", 0);9 hellobtn.resize(100, 20);10 a.setMainWidget(&hello原创 2010-05-09 17:02:00 · 864 阅读 · 0 评论 -
Linux下挂载与解除挂载U盘
今天在我的虚拟机Linux(RedHat)下挂载了一下优盘,大体步骤是这样的: 1、使用命令:fdisk -l,查看系统硬盘和分区情况2、插入优盘,再次用fdisk -l命令查看 大家可以发现多了一个硬盘/dev/sdb和它的一个分区/dev/sdb1 3、使用命令:mkdir -p /mnt/usb,在mnt目录下创建目录usb来作挂接点 4、进原创 2010-05-09 17:00:00 · 2668 阅读 · 0 评论 -
RedHat9、RedHat E5下vi的配置
Linux版本:RedHat9输入 vi --version命令,查看vimrc的位置,编辑该文件,添加红色部分,就能很好的进行C编程了 if &t_Co > 2 || has("gui_running") syntax on set tabstop=4 set softtabstop=4 set shiftwidth=4 set mouse=a set autoinden原创 2010-05-09 16:59:00 · 1333 阅读 · 0 评论 -
Linux驱动之ioctl
在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd, unsigned long cmd, ...);第三个参数不表示一个变数目的参数,而是一个类型可选的参数。第三个参数依赖于控制命令。一些命令不用参数,一些用一个整数值,一些使用指针 1、ioctl函数定义命令 在编写ioctl代码之前,首先需要定义命令。为了防止对错误的设备使用正确的原创 2010-05-09 17:10:00 · 1916 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记1--Linux设备驱动入门
什么是驱动?最通俗的解释就是“驱使硬件设备行动” 作用?设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射,最终使通信设备能够收发数据,使显示设备能够显示文字和画面,使存储设备能够记录文件号数据 计算机系统的硬件主要有cpu、存储器、外设组成。但是随着IC制造工艺的发展,目前,芯片的原创 2010-05-09 17:12:00 · 1422 阅读 · 0 评论 -
VMware6.5 + RedHat E5 VMware Tools的安装
RedHat Enterprise 5 默认没有安装源码包,因此需要手动安装在第一张盘下找到kernel-xen-devel-2.6.18-8.el5.i686.rpm包进行安装[root@localhost ~]# rpm -ivh kernel-xen-devel-2.6.18-8.el5.i686.rpm选择VM-->install VMware Tools [root@localh原创 2010-05-09 17:23:00 · 1013 阅读 · 0 评论 -
Linux学习初记
我的第一个shell程序:tt1.shwhile truedo date; sleep 1;done 执行方式1:sh tt1.sh执行方式2:./tt1.sh(要求该文件有可执行权限) Shell变量:环境变量: 工具:echo 回显 显示环境变量:echo $HOME原创 2010-05-09 17:22:00 · 734 阅读 · 0 评论 -
rpm包管理详解(4)
介绍完了rpm包的安装和查询,本节接着来介绍rpm包的卸载和升级,这样以来rpm包的“增删改查”就都涉及到了。rpm包的卸载和升级的指令如下:rpm -e [包名] 用来卸载一个rpm包rpm -U [包文件] 用来升级一个现有的rpm需要注意的是,如果要卸载的rpm包中的内容被别的rpm包依赖,那么则无法卸载,例如[leconte@localhost ~]$ rpm -e原创 2010-05-09 17:18:00 · 786 阅读 · 0 评论 -
rpm包管理详解(3)
rpm包之间会维持依赖关系,这是包管理系统的特色。我们都经历过安装一个包而因为依赖缺失而装不上的情况。后来yum的出现能一定程度解决这个问题,但我们仍然有必要了解rpm依赖关系背后的细节。自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠原创 2010-05-09 17:17:00 · 2793 阅读 · 0 评论 -
rpm包管理详解(2)
本节接着介绍rpm的查询功能,查询是我们最常用的功能,例如查询一个包里包含哪些文件、一个文件属于哪个包、以及包之间的依赖关系等等。rpm的-q参数是用来进行查询的,需要明确的是rpm既可以对安装在系统上的包进行查询,也可以对一个未安装的rpm包进行查询。当一个rpm包安装到系统上之后,安装信息通常会保存在本地的/var/lib/rpm/目录下,数据会以berkeley DB的方式保存。查看/v原创 2010-05-09 17:16:00 · 721 阅读 · 0 评论 -
rpm包管理详解(1)
在linux世界里流行两种包管理方式,分别是redhat系的rpm和debian系的deb。其中rpm的使用更为广泛,我打算接下来分多章详细介绍一下rpm的包管理机制。包管理是操作系统用来维护各组件版本的一种方式,对于软件发行者来说,将自己的程序制作成标准的rpm格式也会使得程序的安装、升级和卸载变得非常容易。因此linux下几乎所有流行的程序都有rpm格式的包,有些是发行者自己打包,也有原创 2010-05-09 17:15:00 · 713 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记3--Linux内核及内核编程
在设备驱动方面,Linux2.6相对于Linux2.4有较大的改动,这主要表现在内核API中增加了不少新功能(如内存池)、sysfs文件系统、内核模块从.o变为.ko、驱动模块编译方式、模块使用计数、模块加载和卸载函数的定义等方面 Linux内核主要有进程调度、内存管理、虚拟文件系统、网络接口和进程间通信等5个子系统组成,如下图: 在设备驱动编程中,当请求的资源不能满足时,原创 2010-05-09 17:14:00 · 1050 阅读 · 0 评论 -
Linux设备驱动开发详解--笔记2--驱动设计的硬件基础
处理器的分类,如下图所示:存储器可分为只读存储器(ROM)、闪存(Flash)、随机存取存储器(RAM)、光介质存储器和磁介质存储器 Nor Flash和cpu的接口属于典型的类SRAM接口,不需要增加额外的控制电路。Nor Flash的特点是可芯片内执行,程序可以直接在Nor内运行。而Nand Fash和cpu的接口必须由相应的控制电路进行转换,当然也可以通过地址线或GPIO原创 2010-05-09 17:13:00 · 900 阅读 · 1 评论