03 2016 档案

摘要:字符设备驱动编程模型 在Linux系统中,设备的类型非常繁多,如:字符设备,块设备,网络接口设备,USB设备,PCI设备,平台设备,混杂设备… ,而设备类型不同,也意味着其对应的驱动程序模型不同,这样就导致了我们需要对应的驱动程序模型不同,这样就导致了我们需要去掌握众多的驱动程序模型。那么能不能从这 阅读全文
posted @ 2016-03-31 18:26 for_learning 阅读(384) 评论(0) 推荐(0)
摘要:字符设备驱动学习 在Linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块。 一、编译安装字符设备驱动程序 memdev文件中:在这个文件里和真实的硬件无关,只是虚构了一个数组 该文件的Makefile文件中: 二、字符设备文件 阅读全文
posted @ 2016-03-31 15:21 for_learning 阅读(290) 评论(0) 推荐(0)
摘要:linux内核模块基础 一、定义 Linux 内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢: 方法 1:把所有的组件都编译进内核文件,即:zImage 或 bzImage,但这样会导致一个问题:占用内存过多. 2.有一种机制能让内核文件本身并不包含某组件,而是在该组件需要被使用的 阅读全文
posted @ 2016-03-31 10:57 for_learning 阅读(489) 评论(0) 推荐(0)
摘要:c语言运算符号的优先级 本文来自百度搜索只为查看方便 优先级等级口诀: 圆方括号、箭头一句号, 自增自减非反负、针强地址长度, 乘除,加减,再移位, 小等大等、等等不等, 八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。 其中“,”号为一个等级分段。 优先级等级注释: “圆方括号、箭头一句号 阅读全文
posted @ 2016-03-27 18:46 for_learning 阅读(2497) 评论(0) 推荐(0)
摘要:根文件系统挂载 根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式 Linux 应用中,主要的存储设备为 RAM 和 FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk 等。 一、使用Initramfs 1).进入 阅读全文
posted @ 2016-03-26 18:44 for_learning 阅读(717) 评论(0) 推荐(0)
摘要:根文件系统的制作 嵌入式系统包含多个文件系统但是第一个(根文件系统)是必须的。 一、创建目录 # mkdir rootfs # cd rootfs # mkdir bin dev etc lib proc sbin sys usr mnt tmp var # mkdir usr/bin usr/li 阅读全文
posted @ 2016-03-26 18:08 for_learning 阅读(201) 评论(0) 推荐(0)
摘要:文件系统(系统目录) 进入 Linux 根目录(即“/”, Linux 文件系统的入口, 也是处于最高一级的目录),运行“ls –l”命令,可以看到 Linux 系统包含以下目录。 1./bin 包含基本命令,如 ls、cp、mkdir 等,这个目录中的文件都是可执行的。 2./boot Linux 阅读全文
posted @ 2016-03-26 16:36 for_learning 阅读(254) 评论(0) 推荐(0)
摘要:内核配置与编译 一、内核清除 当我们拿到内核第一步需要做的就是先对内核进行清理,防止别人配置编译生成的中间文件对我们产生影响: 1.配置过程生成的 .config 2.编译生成 bzImage 中间文件(.o)和生成.ko 文件的中间文件(.o) make clean 清除.o 文件 make di 阅读全文
posted @ 2016-03-26 13:44 for_learning 阅读(741) 评论(0) 推荐(1)
摘要:ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的。 一、配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生成文件中 C. 执行 make distclean 和 make clean D. make for 阅读全文
posted @ 2016-03-25 22:14 for_learning 阅读(565) 评论(0) 推荐(0)
摘要:6410按键中断编程 一、流程分析 外部中断控制寄存器(s3c6410x 359页) 1、EINTxCONy: 外部中断组x的第y个控制器。这个就是设置中断的触发方式。有5种触发方式。 2、EINTxFLTCONy:外部中断组x的第y个滤波功能控制器。S3C6410对于外部中断有滤波功能,这个就是用 阅读全文
posted @ 2016-03-25 18:30 for_learning 阅读(771) 评论(0) 推荐(0)
摘要:中断处理流程 CPU在工作的过程中,经常需要与外设进行交互,交互的方式包括”轮询方式”,”中断方式”。 1.轮询方式: CPU不断地查询设备的状态。该方式实现比较简单,但CPU利用率很低,不适合多任务的系统。 2. 中断方式: CPU在告知硬件开始一项工作后,就去做别的事去了,当硬件完成了该项工作后 阅读全文
posted @ 2016-03-25 18:07 for_learning 阅读(475) 评论(0) 推荐(0)
摘要:MMU 一、MMU学习 MMU其实就是一个页表。将虚拟地址通过查表的方式,对应到物理地址去他由一个或一组芯片组成,一般存在与协处理器中。 1.将虚拟地址转化为物理地址 2.访问权限管理 1.1得出mmu功能 这个图就说明了MMU的作用: 有三个任务在运行,运行的地址都是0x400000,如果不进行处 阅读全文
posted @ 2016-03-25 17:50 for_learning 阅读(730) 评论(0) 推荐(0)
摘要:linux下的c编程 Linux 系统上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C 对标准 C 进行一系列扩展,以增强标准 C 的功能。 1.零长度数组 GNUC 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用 阅读全文
posted @ 2016-03-25 13:33 for_learning 阅读(340) 评论(0) 推荐(0)
摘要:网络并发服务器设计 与TCP服务器程序相比较添加以上特殊颜色的代码即可实现并发服务器设计:TCP服务器程序设计 阅读全文
posted @ 2016-03-25 11:37 for_learning 阅读(407) 评论(0) 推荐(0)
摘要:linux脚本编程技术 一、什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到自动执行。 二、脚本编程 #!/bin/sh 首行固定格式 #!表明该脚本的的解析器,这里使用/bin/sh来解析 2.1变量 shell脚本允许用户设置和 阅读全文
posted @ 2016-03-25 11:19 for_learning 阅读(322) 评论(0) 推荐(0)
摘要:守护进程学习 一、什么是守护进程 守护进程,也就是通常说的Daemon(精灵)进程,是Linux中的一种服务进程。它的特点是: 1.1后台运行 守护进程需要独立于任何一个控制终端。实现方法调用是通过创建子进程来充当守护进程,而父进程退出,这样子进程就可以在后台运行。(范例展示) pid=fork() 阅读全文
posted @ 2016-03-25 10:55 for_learning 阅读(483) 评论(0) 推荐(0)
摘要:UDP通讯程序设计 一、函数化 1.1服务器使用的函数 创建socket >socket 绑定地址 >bind 接受数据 >recvfrom 发送数据 >sendto 结束连接 >close 1.2客户机使用函数 创建套接字 >socket 发送数据 >sento 接受数据 >recvfrom 结束 阅读全文
posted @ 2016-03-24 12:01 for_learning 阅读(1883) 评论(0) 推荐(0)
摘要:TCP通讯程序设计 这里主要包含客户机和服务器的编程。 一、编程模型函数化 使用函数说明:socket的理解 服务器: 创建socket使用函数 >socket 绑定地址使用函数 >bind 监听端口使用函数 >listen 等待连续使用函数 >accept 收发使用函数 >recv/send 结束 阅读全文
posted @ 2016-03-23 19:39 for_learning 阅读(2714) 评论(0) 推荐(0)
摘要:对linux中socket的理解 一、socket 一般来说socket有一个别名也叫做套接字。 socket起源于Unix,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函 阅读全文
posted @ 2016-03-23 18:14 for_learning 阅读(29089) 评论(1) 推荐(2)
摘要:网络协议 本章节主要介绍linxu网络模型、以及常用的网络协议分析以太网协议、IP协议、TCP协议、UDP协议 一、网络模型 TCP/IP分层模型的四个协议层分别完成以下的功能: 第一层 网络接口层 网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据 阅读全文
posted @ 2016-03-22 16:27 for_learning 阅读(1235) 评论(0) 推荐(0)
摘要:多线程同步 一、什么是同步 多个线程按照规定的顺序来执行,即为线程同步。 1.1线程同步方式一 通过互斥锁的方式实现线程同步,可以实现但是执行效率比较低(sync.c) 1.2线程同步方式二 使用条件变量,可以使CPU利用率提高(sync1.c) 1.3条件变量 初始化: pthread_cond_ 阅读全文
posted @ 2016-03-22 10:50 for_learning 阅读(567) 评论(0) 推荐(0)
摘要:多线程程序设计 一、什么是线程 1.线程就是“轻量级”的进程。 2.线程与创建它的进程共享代码段,数据段。 3.线程拥有自己独立的栈。 二、函数学习 1创建线程 1).函数名 pthread_create 2).函数原型 int pthread_create(pthread_t *thread, c 阅读全文
posted @ 2016-03-22 10:42 for_learning 阅读(784) 评论(0) 推荐(0)
摘要:消息队列通信 消息队列就是一个消息(一个结构)的链表。而一条消息则可看作一个记录,具有特定的格式。进程可以从中按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。 每一个消息都是一个结构体: struct msgbuf{ long mtype; //表示结构体类型,来区分不同的消息 ch 阅读全文
posted @ 2016-03-22 10:32 for_learning 阅读(354) 评论(0) 推荐(0)
摘要:共享内存同行 一、共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式。 二、函数学习 这里主要有创建共享内存、映射共享内存、分离共享内存、控制共享内存 2.1创建/打开共享内存 1).函数名 shmget 2).函数原型 int sh 阅读全文
posted @ 2016-03-22 10:18 for_learning 阅读(315) 评论(0) 推荐(0)
摘要:信号量进程同步 一组并发进程进行互相合作、互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。 信号量在进程同步时初始值为:0 信号量在进程互斥时初始值为:大于0的 本章节主要使用信号量,使的两个进程生产到消费有序的完成。就是说必须等到生产完全完场才能,让消费执行。 下面进入编程语言编程学习 阅读全文
posted @ 2016-03-21 19:01 for_learning 阅读(170) 评论(0) 推荐(0)
摘要:信号量互斥 信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可用于进程同步。 一、信号量分类 二值信号灯:信号灯的值只能取0或1 计数信号灯:信号灯的值可以取任意非负值。 二、函数学习 2.1创 阅读全文
posted @ 2016-03-21 17:46 for_learning 阅读(190) 评论(0) 推荐(0)
摘要:信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。 一、信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有: SIGKILL:杀死进程 SIGSTOP:暂停进程 SIGCHLD:子进程停止或 阅读全文
posted @ 2016-03-21 17:39 for_learning 阅读(267) 评论(0) 推荐(0)
摘要:管道通信 一、通讯目的 1、数据传输 一个进程需要将数据发送给另一个进程。 2、资源共享 多个进程之间共享同样的资源。 3、通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件。 4、进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进 阅读全文
posted @ 2016-03-21 17:33 for_learning 阅读(361) 评论(0) 推荐(0)
摘要:多进程程序设计 一、函数学习 1.1 创建进程fork 1.1.1 函数原形 pid_t fork(void); 1.1.2 函数功能 创建一个子进程 1.1.3 所属头文件 <unistd.h> 1.1.4 返回值 成功:父进程返回创建成功的子进程pid子进程返回 0 失败:父进程返回 1.1.5 阅读全文
posted @ 2016-03-21 17:25 for_learning 阅读(370) 评论(0) 推荐(0)
摘要:进程控制理论 一、进程 进程是一个具有一定独立功能程序的一次运行活动。 1.1进程特点 1.动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的 2.并发性:任何进程都可以同其他进程一起并发执行 3.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位 4.异步 阅读全文
posted @ 2016-03-21 16:27 for_learning 阅读(359) 评论(0) 推荐(0)
摘要:时间编程 一、时间类型 Coordinated Universal Time(UTC):世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT) Calendar Time:日历时间,是用“从一个标准时间点(如:1970年1月1日0点)到此时经过的秒数”来表 阅读全文
posted @ 2016-03-21 15:25 for_learning 阅读(293) 评论(0) 推荐(0)
摘要:库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows、Linux还是其他的操作系统中,都是使用这些函数。使用库函数进行程序设计可提高程序的可移植性。 对于标准的C函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启 阅读全文
posted @ 2016-03-21 14:46 for_learning 阅读(290) 评论(0) 推荐(0)
摘要:系统调用方式文件编程 一、文件描述符 在Linux系统中,所有打开的文件也对应一个数字,这个数字由系统来分配,我们称之为:文件描述符。 二、函数学习 2.1打开文件 open 2.1.2 函数原形 1).int open(const char *pathname,int flags); 2).int 阅读全文
posted @ 2016-03-21 14:33 for_learning 阅读(331) 评论(0) 推荐(0)
摘要:静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供。 两者区别: 一、函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(libra 阅读全文
posted @ 2016-03-21 14:17 for_learning 阅读(474) 评论(0) 推荐(0)
摘要:linux应用程序地址布局 在学习Linux应用程序开发时,经常会遇到如下概念:代码段、数据段、BSS段(Block Started by Symbol,又名:未初始化数据段)、堆(heap)和栈(stack)。而这些部分也是构成Linux应用程序的重要组成部分。 一、内存布局 1.从低地址到高地址 阅读全文
posted @ 2016-03-21 14:00 for_learning 阅读(211) 评论(0) 推荐(0)
摘要:协处理器 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担。ARM可支持多达16个协处理器,其中CP15是最重要的一个。 CP15提供16组寄存器 通过提供的16组寄存器访问CP15 一、协处理器访问 ARM微处理器可支持多达16个协处理器,用于各种协处理操作,在 阅读全文
posted @ 2016-03-21 13:00 for_learning 阅读(259) 评论(0) 推荐(0)
摘要:ARM伪指令 在ARM汇编语言程序中里,有一些特殊指令助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在元程序中的作用是为完成汇编程序作各种准备工作,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 伪指令本身并 阅读全文
posted @ 2016-03-21 12:54 for_learning 阅读(455) 评论(0) 推荐(0)
摘要:ARM指令学习 一、算数和逻辑指令 1— MOV 数据传送指令 2.— MVN 数据取反传送指令 3.— CMP 比较指令 4.— CMN 反值比较指令 5.— TST 位测试指令 6.— TEQ 相等测试指令 7.— ADD 加法指令 8.— ADC 带进位加法指令 9.— SUB 减法指令 10 阅读全文
posted @ 2016-03-21 11:53 for_learning 阅读(1739) 评论(0) 推荐(0)
摘要:ARM寻址方式 所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。 一、立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。:立即数不能作为指令中的第二操作数。该规定与高级 阅读全文
posted @ 2016-03-21 11:36 for_learning 阅读(474) 评论(0) 推荐(0)
摘要:ARM寄存器学习 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。 37个寄存器=7 阅读全文
posted @ 2016-03-21 11:29 for_learning 阅读(472) 评论(0) 推荐(0)
摘要:linux内核的组成 一、linux内核源代码目录结构 1.1Linux 内核的组成部分 Linux 内核主要由进程调度(SCHED) 、内存管理(MMU) 、虚拟文件系统(VFS) 、网络接口(NET)和进程间通信(IPC)等 5 个子系统组成。 1.1.1进程调度 精度调度控制系统中的多个进程对 阅读全文
posted @ 2016-03-19 20:26 for_learning 阅读(556) 评论(0) 推荐(0)
摘要:linux驱动程序设计的硬件基础(一) 本章讲总结学习linux设备程序设计的硬件基础。 一、处理器 1.1通用处理器 通用处理器(GPP)并不针对特定的应用领域进行体系结构和指令集的优化,它们具有一般化的通用体系结构和指令集,以支持复杂的运算并易于新开发功能的添加。一般而言,在嵌入式微控制器(MC 阅读全文
posted @ 2016-03-19 18:15 for_learning 阅读(717) 评论(0) 推荐(0)
摘要:linux设备驱动学习-1 本章节主要学习有操作系统的设备驱动和无操作系统设备驱动的区别,以及对操作系统和设备驱动关系的认识。 一、设备驱动的作用 对设备驱动最通俗的解释就是“驱使硬件设备行动” 。设备驱动与底层硬件直接打交道, 按照硬件设备的具体工作方式读写设备寄存器, 完成设备的轮询、 中断处理 阅读全文
posted @ 2016-03-19 14:38 for_learning 阅读(800) 评论(0) 推荐(0)
摘要:应用程序调试工具gdb学习使用 一、GDB简介 GDB 是 GNU 发布的一款功能强大的程序调试工具。GDB 主要完成下面三个方面的功能: 1、启动被调试程序。 2、让被调试的程序在指定的位置停住。 3、当程序被停住时,可以检查程序状态(如变量值)。 1.1gdb使用流程 1.编译生成可执行文件: 阅读全文
posted @ 2016-03-18 19:58 for_learning 阅读(252) 评论(0) 推荐(0)
摘要:usb设备驱动 本章主要内容包含以下:USB总线介绍,USB协议分析,USB系统架构 一、USB总线介绍 1.1USB发展史 USB(Universal Serial Bus)通用串行总线,是一种外部总线标准用于规范电脑与外部设备的连接和通讯。USB是在1994年底由英特尔、康柏、IBM、Micro 阅读全文
posted @ 2016-03-17 22:29 for_learning 阅读(497) 评论(0) 推荐(0)
摘要:对于ok6410的madplay移植主要包括三部分。声卡驱动移植,播放器的移植,以及alsa库的移植。 一、首先移植声卡驱动以及播放器 ok6410采用WM97系列的声卡芯片,要使得内核支持该驱动,首先需要配置内核: 1.使用飞凌针对ok6410开发板提供的内核,进入内核顶层目录执行命令: make 阅读全文
posted @ 2016-03-14 22:16 for_learning 阅读(1768) 评论(7) 推荐(1)