
Linux
ccbuluo
软件学习者。。
展开
-
如何计算结构体的大小
<br /><br />作者:曾宏安,华清远见嵌入式学院高级讲师。<br />运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。<br />C语言中的构造数据类型有三种:数组、结构体和共用体。<br />数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个数。<br />结构体中的成员可以是不同的数据类型,成员按照转载 2011-04-12 15:38:00 · 429 阅读 · 0 评论 -
linux下的C语言开发(管道通信)
Linux系统本身为进程间通信提供了很多的方式,比如说管道、共享内存、socket通信等。管道的使用十分简单,在创建了匿名管道之后,我们只需要从一个管道发送数据,再从另外一个管道接受数据即可。[cpp] view plaincopyprint?#include #include #include #include int pipe_d转载 2012-02-28 17:37:35 · 418 阅读 · 0 评论 -
linux下的C语言开发(线程等待)
和多进程一样,多线程也有自己的等待函数。这个等待函数就是pthread_join函数。那么这个函数有什么用呢?我们其实可以用它来等待线程运行结束。[cpp] view plaincopyprint?#include #include #include #include void func(void* args) { sle转载 2012-02-28 17:38:18 · 541 阅读 · 0 评论 -
linux下的C语言开发(网络编程)
不管在Windows平台下面还是在Linux平台下面,网络编程都是少不了的。在互联网发达的今天,我们的生活基本上已经离不开网络了。我们可以用网络干很多的事情,比如说IM聊天、FTP下载、电子银行、网络购物、在线游戏、电子邮件的收发等等。所以说,对于一个软件的开发者来说,如果说他不会进行网络程序的开发,那真是难以想象的。 在开始介绍网络编程的方法之前,我们可以回忆一下计算机网络的相转载 2012-02-28 17:39:03 · 457 阅读 · 0 评论 -
linux下的C语言开发(线程互斥)
对于编写多线程的朋友来说,线程互斥是少不了的。在linux下面,编写多线程常用的工具其实是pthread_mutex_t。本质上来说,它和Windows下面的mutex其实是一样的,差别几乎是没有。希望对线程互斥进行详细了解的朋友可以看这里。[cpp] view plaincopyprint?#include #include #include转载 2012-02-28 17:38:38 · 377 阅读 · 0 评论 -
Linux内核中内存相关的操作函数
1、kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) 内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。转载 2013-06-17 22:28:58 · 684 阅读 · 0 评论 -
S3C6410按键驱动
S3C6410按键驱动——查询方式实现OK6410总共有6个按键,按键分别接在GPN0~GPN5,原理图上根本没有这么说,原理图上说的是KEYINT!~KEYINT6,很明显这里是接在中断引脚上的,直接查询S3C6410的中断引脚就可以知道这个6个按键的接法,一下是用查询方法实现的按键驱动:[cpp] view plaincopy转载 2013-09-05 14:09:23 · 1896 阅读 · 0 评论 -
基于linux-2.6.35的class_create(),device_create解析
作者:苗德行,华清远见嵌入式学院讲师。从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用转载 2014-02-24 15:48:09 · 636 阅读 · 0 评论 -
android驱动例子(LED灯控制)
本例子,讲述在android2.1上完全自已开发一个驱动去控制硬件口并写应用测试该驱动,通过这样一个例子,解析android下的驱动开发流程的应用调用流程,可以说是很好的入门引导要达到的效果:通过android的应用,调用驱动程序,在开发板上控制4个LED的亮灭。一、硬件原理如上图,通过4个IO口控制这LED,低电平LED亮,这4个IO口分别是GPM1, GPM转载 2014-02-24 15:54:09 · 848 阅读 · 0 评论 -
Linux设备驱动之——I2C总线
2 I2C子系统2.1 LinuxI2C子系统架构在内核中已经提供I2C子系统,所以在做I2C驱动之前,就必须要熟悉该子系统。2.2 三大组成部分1、I2C核心(i2c-core)I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(algorithm)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。转载 2014-02-24 16:33:02 · 832 阅读 · 0 评论 -
Android通过JNI调用驱动程序(完全解析实例)
--作者:赖玉平(Peter Lai)aulyp@163.com 要达到的目的:android系统中,用JAVA写界面程序,调用jni中间库提供的接口,去操作某个驱动节点,实现read,writer ioctl等操作!这对底层驱动开发人员是很重要的一个调试通道,也是android 系统下提供一些特殊功能接口的方法!本文前提:我们假设已经写了一个驱动程序,它是控制LED转载 2014-02-24 15:55:33 · 1151 阅读 · 0 评论 -
Android系统驱动概述
说到 android 驱动是离不开 Linux 驱动的。Android 内核采用的是 Linux2.6 内核 (最近Linux 3.3 已经包含了一些 Android 代码)。但 Android 并没有完全照搬 Linux 系统内核,除了对Linux 进行部分修正,还增加了不少内容。android 驱动 主要分两种类型:Android 专用驱动 和 Android 使用的设备驱动(linux)。转载 2014-02-24 16:23:01 · 3687 阅读 · 0 评论 -
Android设备驱动之——V4L2
Video for Linux Two V4L2的是V4L的第二个版本。原来的V4L被引入到Linux内核2.1.x的开发周期后期。Video4Linux2修正了一些设计缺陷,并开始出现在2.5.X内核。Video4Linux2驱动程序包括Video4Linux1应用的兼容模式,但实际上,支持是不完整的,并建议V4L2的设备使用V4L2的模式。现在转载 2014-02-24 16:38:40 · 665 阅读 · 0 评论 -
Android 开发之 ---- bootloader (LK)
LK是什么 LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码 ,little kernel 是小内核小操作系统。 LK 代码 在 bootable/bootloadler/lk 目录下 LK 代码结构 +ap转载 2014-02-24 16:24:58 · 789 阅读 · 0 评论 -
Linux设备驱动之——serio总线
什么是总线 总线是处理器与一个或者多个设备之间的通道。在设备模型中所有的设备都是通过总线相连的。甚至那些内部的虚拟"平台"总线。总线可以互相插入,比如一个 USB 控制器通常是一个 PCI 设备。 linux系统中包含的总线有 i2c、ide、pci、pci express、platform、 pnp、 scsi、 serio、 usb等转载 2014-02-24 16:28:54 · 1019 阅读 · 0 评论 -
linux下的C语言开发(信号处理)
信号处理是linux程序的一个特色。用信号处理来模拟操作系统的中断功能,对于我们这些系统程序员来说是最好的一个选择了。要想使用信号处理功能,你要做的就是填写一个信号处理函数即可。一旦进程有待处理的信号处理,那么进程就会立即进行处理。[cpp] view plaincopyprint?#include #include #include in转载 2012-02-28 17:37:11 · 456 阅读 · 0 评论 -
linux下的C语言开发(定时器)
定时器是我们需要经常处理的一种资源。那linux下面的定时器又是怎么一回事呢?其实,在linux里面有一种进程中信息传递的方法,那就是信号。这里的定时器就相当于系统每隔一段时间给进程发一个定时信号,我们所要做的就是定义一个信号处理函数。[cpp] view plaincopyprint?#include #include #include #i转载 2012-02-28 17:30:32 · 413 阅读 · 0 评论 -
LInux sysfs
<br />to export kernel data structures, their attributes, and the linkages between them to<br />userspace.” --- documentation/filesystems/sysfs.txt<br />可以先把documentation/filesystems/sysfs.txt读一遍。文档这种东西,真正读起来就嫌少了。Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成转载 2011-04-12 18:02:00 · 470 阅读 · 0 评论 -
udev实现原理
<br />udev实现原理 <br /> <br />转载时请注明出处和作者联系方式:http://blog.youkuaiyun.com/absurd<br />作者联系方式: 李先静 <xianjimli at hotmail dot com> <br />更新时间: 2007-4-29 <br /> <br />相对于 linux 来说, udev 还是一个新事物。然而,尽管它 03 年才出现,尽管它很低调 ( J ) ,但它无疑已经成为 linux 下不可或缺的组件了。 udev转载 2011-04-12 18:06:00 · 415 阅读 · 0 评论 -
linux 内核分析之list_head
本文详细分析了 2.6.x 内核中链表结构的实现,并通过实例对每个链表操作接口进行了详尽的讲解。<br />一、 链表数据结构简介<br />链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。<br />通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数转载 2011-04-12 14:11:00 · 416 阅读 · 0 评论 -
Linux I/O资源
<br />Linux I/O资源 (ZZ) <br /> <br />3.1 Linux对I/O资源的描述<br />3.2 Linux对I/O资源的管理<br /> 3.2.1 I/O资源的申请<br /> 3.2.2 资源的释放<br /> 3.2.3 检查资源是否已被占用<br /> 3.2.4 寻找可用资源<br /> 3.2.5 分配接口allocate_resource()<br /> 3.2.6 获取资源的名称列表<br />3.3 管理I/O Regio转载 2011-04-12 18:11:00 · 523 阅读 · 0 评论 -
Linux 系统内核的调试
<br /><br />陈渝 , 清华大学<br /><br />2005 年 12 月 18 日<br />本文将首先介绍 Linux 内核上的一些内核代码监视和错误跟踪技术,这些调试和跟踪方法因所要求的使用环境和使用方法而各有不同,然后重点介绍三种 Linux 内核的源代码级的调试方法。<br />调试是软件开发过程中一个必不可少的环节,在 Linux 内核开发的过程中也不可避免地会面对如何调试内核的问题。但是,Linux 系统的开发者出于保证内核代码正确性的考虑,不愿意在 Linux 内核源代码树中加转载 2011-04-12 16:02:00 · 459 阅读 · 0 评论 -
U-Boot启动过程完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能Ø 硬件设备初始化Ø 加载U-Boot第二阶段代码到RAM空间Ø 设置好栈Ø 跳转到第二阶段代码入口 (2)第二阶段的功能Ø 初始化本阶段使用的硬件设备Ø 检测系统内存映射Ø 将内核从Fla转载 2011-10-26 16:08:51 · 1317 阅读 · 0 评论 -
FORK()函数的理解
作者:王姗姗,华清远见嵌入式学院讲师。 对于刚刚接触Unix/Linux操作系统,在Linux下编写多进程的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。 首先我们来看下fork函数的原型: #i nclude #i nclude STd.h> pid_t fork(void); 返回值: 负数:如果出错,则fork()返回-1,此时没有转载 2011-10-26 20:04:57 · 367 阅读 · 0 评论 -
LINUX 和 WINDOWS 内核的区别
关于LINUX和WINDOWS的口水站已经很多了。本文企图从技术角度来比较下2个主流操作系统的异同。偏重于内核部分。一、动机:我最早是 WINDOWS 阵营的。在WINDOWS下写过2年多的驱动程序。后来由于学习需要,转投LINUX,一晃也快2年了。期间经历了很多曲折,也学到了很多东西。由于在开发WINDOWS 驱动的时候,经验和知识都还不够,所以现在我感觉对LINUX似乎更熟悉些转载 2011-10-30 10:14:36 · 399 阅读 · 0 评论 -
Linux下C程序进程地址空间布局
作者:沧海猎人 出处:http://blog.youkuaiyun.com/embedded_hunter 转载请注明出处 嵌入式技术交流QQ群:179012822我们在学习C程序开发时经常会遇到一些概念:代码段、数据段、BSS段(Block Started by Symbol) 、堆(heap)和栈(stack)。先看一张教材上的示意图(来源,《UNIX环境高级编程》一书),显示了进程地址空间转载 2011-10-31 09:45:58 · 447 阅读 · 0 评论 -
Linux 内核裁剪的自动化方法
Linux内核裁剪的自动化方法作者:宋立新 随着广泛地获得使用并被移植到不同的平台,Linux 内核源代码正在越来越大,比如, Linux2.6.28 中, 文件数有 25282 个,大小有350M。对于某一个平台,真正需要的的文件其实不到 10%, 为了提高研发效率,我们应当删除或者暂时删除那些永远也不会用到的文件, 比如,可以使内核的文件数缩减到5000, 从而节约拷贝、查转载 2011-11-03 17:05:25 · 460 阅读 · 0 评论 -
linux下的C语言开发(进程等待)
所谓进程等待,其实很简单。前面我们说过可以用fork创建子进程,那么这里我们就可以使用wait函数让父进程等待子进程运行结束后才开始运行。注意,为了证明父进程确实是等待子进程运行结束后才继续运行的,我们使用了sleep函数。但是,在linux下面,sleep函数的参数是秒,而windows下面sleep的函数参数是毫秒。[cpp] view plaincopyprint?转载 2012-02-28 17:32:39 · 459 阅读 · 0 评论 -
linux下的C语言开发(多线程编程)
多线程和多进程还是有很多区别的。其中之一就是,多进程是linux内核本身所支持的,而多线程则需要相应的动态库进行支持。对于进程而言,数据之间都是相互隔离的,而多线程则不同,不同的线程除了堆栈空间之外所有的数据都是共享的。说了这么多,我们还是自己编写一个多线程程序看看结果究竟是怎么样的。[cpp] view plaincopyprint?#include #in转载 2012-02-28 17:37:57 · 439 阅读 · 0 评论 -
linux下的C语言开发(静态库)
在我们编写软件的过程当中,少不了需要使用别人的库函数。因为大家知道,软件是一个协作的工程。作为个人来讲,你不可能一个人完成所有的工作。另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把时间浪费在这些重复的工作上面。 既然说到了库函数,那么一般来说库函数分为两种方式:静态库和动态库。两者的区别其实很小,静态库是必须要链接到执行文件中去的,而动态库是不需要链接到最后的执行文件中转载 2012-02-28 17:28:11 · 413 阅读 · 0 评论 -
linux下的C语言开发(动态库)
动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软转载 2012-02-28 17:29:16 · 383 阅读 · 0 评论 -
Linux设备驱动之——PCI 总线
PCI总线概述 随着通用处理器和嵌入式技术的迅猛发展,越来越多的电子设备需要由处理器控制。目前大多数CPU和外部设备都会提供PCI总线的接口,PCI总线已成为计算机系统中一种应用广泛、通用的总线标准[1]。Linux因其开放源代码以及稳定的性能,越来越受到广大用户青睐。同时,基于Linux内核的嵌入式操作系统应用势头强劲,开发基于Li转载 2014-02-24 16:36:19 · 627 阅读 · 0 评论