linux开发
暴走的龙猫猫
嵌入式开发,硬件开发,物联网技术!
展开
-
如何将驱动或模块编译进内核
如何将驱动或模块编译进内核我们知道若要给linux内核添加模块(驱动)有如下两种方式:(1)动态方式:采用insmod命令来给运行中的linux加载模块。(2)静态方式:修改linux的配置菜单,添加模块相关文件到源码对应目录,然后把模块直接编译进内核。对于动态方式,比较简单,下面我们介绍如何采用静态的方式把模块添加到内核。最终到达的效果是:在内核的配置菜单中可以配置我们添加的原创 2012-06-09 07:39:32 · 6321 阅读 · 1 评论 -
ARM linux系统调用的实现原理
大家都知道linux的应用程序要想访问内核必须使用系统调用从而实现从usr模式转到svc模式。下面咱们看看它的实现过程。系统调用是os操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断完成。at91rm9200处理器对应的linux2.4.19内核系统调用对应的软中断定义如下:#if defined(__t转载 2012-06-30 09:00:09 · 725 阅读 · 0 评论 -
Linux程序存储结构与进程结构
1.Linux可执行文件结构 在Linux系统下,程序是一个普通的可执行文件。可执行文件在存储时分为代码区、数据区和未初始化数据区3个部分。各段基本内容说明如下: 代码区:存放CPU执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的目的是对于频繁被执行转载 2012-07-02 14:20:37 · 930 阅读 · 0 评论 -
linux多线程学习笔记
1. 一个进程中的所有线程都可以访问该进程的组成部件,如文件描述符和内存。2.在一个进程中采用多线程编程可以改善响应时间和提高系统吞吐量。3.进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本,程序的全局内存和堆内存,栈以及文件描述符。4.线程ID用pthread_t数据类型来表示,注意该类型有可能是用一个数据结构来表示的。5.线程创建时,并不能保证哪个线程会先运行。原创 2012-07-20 14:54:31 · 618 阅读 · 0 评论 -
Linux学习杂的笔记---一些细节需要及时记录
1. 如果你的程序需要分配内存,那么在程序开始的地方就进行分配是最合适的,因为程序还没开始,错误处理比较容易。2. 中断服务程序由于其特殊性,跟一般的函数不一样,具体有这些:ISR不能返回一个值;ISR不能传递参数;浮点数不能出现在ISR中,因为浮点一般都是不可重入的;由于printf函数有重入和性能上的问题,一般不出现在ISR中。3. echo $? 可以打印刚执行完的命令或程序的终止原创 2012-06-30 16:31:08 · 533 阅读 · 0 评论 -
linux下c编程main函数的参数问题
在做linux下的应用编程时,main函数被定义成这个样子:int main(char argc,char *argv[])这两个参数是做什么用的呢?又怎么在程序中使用呢?官方的说明是:argc保存的是命令行参数的数目,而argv是指向个参数的各指针所构成的数组。弄个测试程序测试下看看。建一个名为test.c的c文件。#include int main(char原创 2012-07-22 14:06:41 · 10433 阅读 · 2 评论 -
linux下的时间编程
在做linux下的应用程序时,我们经常需要获取当前的系统时间或者进行时间的计算,这时候需要用到linux下的时间函数。1. 几个时间的概念区分 (1) 格林威治时间 格林威治时间也即格林尼治标准时间(旧译格林尼治平均时间或格林威治标准时间;英语:Greenwich MeanTime,GMT),是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。这个时间是世界原创 2012-07-23 15:29:36 · 975 阅读 · 0 评论 -
fork原理分析
首先必须有一点要清楚,函数的返回值是储存在寄存器eax中的。其次,当fork返回时,新进程会返回0是因为在初始化任务结构时,将eax设置为0;在fork中,把子进程加入到可运行的队列中,由进程调度程序在适当的时机调度运行。也就是从此时开始,当前进程分裂为两个并发的进程。无论哪个进程被调度运行,都将继续执行fork函数的剩余代码,执行结束后返回各自的值。【NOTE5】对于fork转载 2012-07-24 13:46:40 · 971 阅读 · 0 评论 -
几个关于jpeglib库足够的博客
1.http://blog.csdn.net/huxiangyang4/archive/2010/07/12/5728888.aspx 我认为是最好的2.http://blog.csdn.net/axlrosek/archive/2007/03/29/1545496.aspx 当字典用3.http://topic.csdn.net/u/20100518/17/98f52459-3158-4转载 2012-11-11 23:36:57 · 657 阅读 · 0 评论 -
YUV格式
YUV格式【转】 YUV信号有很多种,一般YUV420和YUV422用的比较多,而对Cmos sensor来说,大多都是YUV422. YUV422格式,又分为很多小类,按照U、V的排列可以有YUYV,YVYU,UYVY,VYUY四种,其中,YUYVY一般又称作yuv2格式。 而这四种YUV422格式,每种又可以分为2小类,按Y和UV的排列可以有打包格式和平面格式转载 2012-11-11 23:35:56 · 2209 阅读 · 0 评论 -
若干linux下的动态库常见问题
1. 调用动态库的时候有几个问题会经常碰到,有时,明明已经将库的头文件所在目录 通过 “-I” include进来了,库所在文件通过 “-L”参数引导,并指定了“-l”的库名,但通过ldd命令察看时,就是死活找不到你指定链接的so文件,这时你要作的就是通过修改 LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录。通常这样做就可以解决库无法链接的问题了。2.。原创 2012-12-28 20:53:48 · 896 阅读 · 0 评论 -
linux环境变量
一. 查看环境变量 (1) 查看单个环境变量XX:$echo $XX (2) 显示所有的环境变量: env (3) 显示所有本地定义的Shell环境量:set二. 添加环境变量 (1) 给所有的用户添加永久环境变量 例如:编辑/etc/profile文件,添加HELLO变量 # vi /etc/profile原创 2012-12-29 00:44:34 · 692 阅读 · 0 评论 -
How to use Samba on Linux?
How to use Samba on Linux?(1) 运行命令:rpm -qa | grep samba 检查是否已经安装了samba,如果提示未安装,必须先安装,具体安装步骤这里跳过。(2) 确保你的Linux系统里已经添加了一个普通用户,如Ting。(3) 打开/etc/samba/smb.conf,在文件的相关位置(打开该文件后往下翻你会找到的)添加如下文字:[Ting原创 2014-04-02 23:41:50 · 876 阅读 · 0 评论 -
整理的知识点
自己整理的知识点---在别的地方发现的,作者的学习笔记,这种笔记特别有用,有时间也好好看下。@ Linux内核主要有5个子系统组成:进程调度程序(SCHED)、内核管理程序(MM)、虚拟文件系统(VFS)、网络接口(NET)、进程间通信(IPC)。其中最中心最重要的子系统是进程调度程序。其他所有子系统都依赖于进程调度程序。这些子系统之间是通过函数调用和共享数据结构进行通信的。@转载 2012-06-28 16:29:19 · 605 阅读 · 0 评论 -
Linux内核空间的内存申请常用函数
在Linux内核编程中内存的申请不同于系统编程,她有自己的一套机制。1. kmalloc函数原型:void *kmalloc( size_t size, int flags )参数说明:size --- 要分配的内存块大小 flags --- 分配标志,常用的有GFP_KERNEL(会引起睡眠),GFP_ATOMIC(不引起睡眠,分配不原创 2012-06-29 09:39:22 · 1606 阅读 · 0 评论 -
Linux里的页表
MMU在将一个虚拟地址转换为一个物理地址时需要用到重定位寄存器,在ARM中,重定位器是由64个寄存器组成的cache,显然这不是够用的,我们还需要在主存中构建更多的页表。每个页表项包含有以下信息:用于将虚拟页转换为物理页的物理基地址,该页的访问权限,也的cache和写缓冲配置。在linux中,一个页面目录的大小为4KB,共有1024个目录项,每个目录项指示一个4KB大小的页表,一个4KB大原创 2012-06-29 14:19:44 · 721 阅读 · 0 评论 -
Busybox
Busybo是一个遵循GPLv2协议的开源项目。Busybox将众多的Linux命令集合进一个很小的可执行程序中,可以用来替换GNU fileutils shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项较少,但是能够满足一般应用。Busybox为各种小型的或者嵌入式系统提供了一个比较完完全的工具集。Busybox在编写过程中对文件大小进行了优化,并考转载 2012-07-04 07:39:51 · 3737 阅读 · 0 评论 -
vi使用方法
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。1、vi的基本概念 基本上vi可以分为三种转载 2012-07-05 09:33:15 · 518 阅读 · 0 评论 -
Linux常见问题
1.在加载程序时,出现找不到 libexpat.so.1的错误,报错提示该文件不存在。 解决方法:既然提示找不到该文件,那么我们就来创建该文件,注意到该文件的后缀为.so,所以该文件为共享库,我们到/usr/lib目录下去查看是否有该文件,发现果然没有该文件,但我们发现有libexpat.so这个文件,那么我们可以创建一个链接来实现,使用命令“ln libexpat.so libexpa原创 2012-07-05 09:58:07 · 848 阅读 · 0 评论 -
GDB调试工具学习笔记
1.GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能: (1) 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 (2) 可让被调试的程序在你所指定的调置的断点处停住。 (3) 当程序被停住时,可以检查此时你的程序中所发生的事。 (4) 动态的改变你程序的执行环境。原创 2012-07-05 10:59:19 · 522 阅读 · 0 评论 -
理解linux的中断模型
在描述linux的中断机制前,先从整体上来了解下linux的中断模型是很有必要的,理解了这个基本的模型,就有了个大概的思路,我们甚至可以去猜测我们后面可能会遇到哪些代码。一些低档单片机(如51,avr等)的中断固化程序很高,所有外设的中断向量基本都是固定的,在这些单片机上开发时,我们一般只需在这些中断向量处放上我们的中断处理程序就可以了,当某个外设发生中断后,CPU会自动跳转到该外设对应的中断原创 2012-06-25 15:00:14 · 1435 阅读 · 0 评论 -
linux的中断注册机制分析
我们已经知道,linux的中断模型中规定我们自己定义的中断处理程序需要通过注册的方式加入到linux系统中,这样linux的中断处理中才能找到并执行这些函数。在这节里,主要分析这个注册过程。我们这里用linux-2.6.32.2来进行分析。在linux内核中用于申请中断的函数是request_irq(),函数原型在linux-2.6.32.2/include/linux/interrupt原创 2012-06-25 15:12:12 · 1339 阅读 · 0 评论 -
linux的底层中断处理分析
我们知道对于S3C2440来说,所有的外设中断反应到CPU上的IRQ或FIQ中断,而且不同于普通的8位单片机的是,这么多的外设中断并不是一一对应多个中断向量,而是对应到FIQ或IRQ,需要在IRQ或FIQ中断处理程序里进一步判断是哪个外设中断产生了,另外我们还知道,linux里有中断号的概念,在中断发生时,linux会执行所有注册在该中断号上的所有函数。那么linux里的中断向量是怎么设定的呢原创 2012-06-25 15:26:40 · 1578 阅读 · 0 评论 -
linux学习方法总结
在学linux 的过程中,随着学完一个又一个的知识点,我越发觉得学习方法很重要。所以赶紧把每次的心得记下来,这样时刻提醒自己按照这样的方法去做,这样对提高自己的学习效率应该是很有帮助的。1. 资料千万不要贪多,当然找到一个有参考价值的资料是前提,当找到了适当的资料,就扎根这个看下去,不要这本看看,那边看看,扎实的看懂一本书就够了。2. 尽量使用官方的资料,当有什么问题不懂时,尽量找官方的资原创 2012-06-25 08:49:07 · 815 阅读 · 0 评论 -
linux模块基础知识
一. 为什么要使用模块linux属于微内核操作系统,整个内核都运行在内核空间,但是linux的功能是可以动态加载的,加载机制就是使用模块来实现的。linux使用模块机制可以实现以下特点:(1)模块可以动态加载和卸载。(2)模块加载后,完全与内核融为一体。二. 最简单的模块实例/***************************************原创 2012-06-27 10:59:06 · 575 阅读 · 0 评论 -
c语言输入输出缓冲区的概念
先引用一下前人的成果(有修改)^_^:http://blog.csdn.net/cxyol/archive/2006/03/18/628324.aspxgetchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取 了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。g转载 2012-07-09 14:32:07 · 1322 阅读 · 0 评论 -
linux中断编程函数
总结下linux中断编程的函数,方便下次使用时查看。1.中断申请和释放int request_irq( unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char * devname, void *dev_id )irq---中断号handler---中断处理函数irqflags---原创 2012-06-27 09:14:11 · 3653 阅读 · 0 评论 -
十个你可能没用过的Linux命令
十个你可能没用过的Linux命令如果你是一个硬件系统管理员或者Linux工程师,你可能会记得大多数Linux命令行技巧。下面的这些Linux命令行技巧通常不被Linux用户所使用。1.使用pgrep快速查找一个PIDpgrep遍历目前正在运行的进程然后列出符合查找规则的进程ID(PID)。pgrep ssh这条命令会列出所有与ssh有关的进程。2.执行上次执转载 2012-06-28 16:27:00 · 493 阅读 · 0 评论 -
boa安装注意
(1)编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和YACC你可以轻松的构造一个语法解释器。apt-get install flexapt-get install byacc原创 2016-04-07 09:56:42 · 478 阅读 · 0 评论