- 博客(85)
- 收藏
- 关注
转载 C语言中printf格式化输出函数
原文转自http://blog.youkuaiyun.com/xuefu2008/article/details/4645026用 法: int printf(const char *format,[argument]); format 参数输出的格式,定义格式为: %[flags][width][.perc] [F|N|h|l]type 规定数据输出方式,具体
2016-10-20 11:05:37
712
原创 3-11 LED驱动程序设计
(本节笔记的实验代码,在这里)一. 字符设备控制理论1. 概述 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力,例如设置波特率等。 在用户空间中,使用ioctl系统调用控制设备,原型为:int ioctl(int fd, unsigned longcmd, ...)fd:要控制的设备文件描述符。cmd:发送给设备的控制命令。..
2016-10-12 21:12:27
642
原创 3-10 字符型设备驱动模型
一. 使用字符设备驱动程序1. 编译和安装驱动程序模块 1.1 将驱动模块源码memdev.c复制到Linux系统中,编写Makefile,编译成内核模块memdev.ko并拷贝到开发板的NFS的rootfs中。 2.2 把memdev.ko加载(insmod)到开发板的Linux系统内核中。2. 创建设备文件 通过字符设备文件,应用程序可以
2016-10-12 20:55:20
450
原创 3-09 Linux驱动初探
一. 驱动开发概述1. 驱动分类 1.1常规分类法 1.1.1字符设备 字符设备是一种一字节为最小访问单位的设备,字符驱动负责驱动字符设备,系统按照操作文件的方式来对字符设备进行访问,这样的驱动通常支持open,close,read、和write系统调用。例如:串口,LED,按键。 1.1.2块设备 在大部分
2016-10-12 20:29:11
432
原创 3-08 Linux系统调用
(本节笔记的实验代码,在这里)1. 系统调用(sys_call)的作用与介绍 系统调用并不是由C库或其他库中实现的,用户空间的应用程序用到的系统调用函数sys_call的实现来源于内核空间中。2. 系统调用工作流程 从用户空间调用(read)时,将执行SWI指令,Linux系统从用户空间切换到内核空间,在切换前,会把read函数要执行的系统调用所
2016-10-12 20:25:05
373
原创 3-07 Linux内核链表深度分析
1.普通链表与Linux内核链表的对比 链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。 链表分为单向节点、双向链表、循环链表和双向循环链表,Linux内核链表属于双向循环链表。
2016-10-12 19:35:11
343
原创 3-06 Linux内核子系统
一. Linux内存管理子系统1. 内存管理模型(Memory Management) 内存管理子系统主要作用为: (实现代码不要求掌握) 一,完成虚拟地址与物理地址的映射; 二,进行物理内存的分配2. 虚拟地址与物理地址的映射 2.1 虚拟地址空间分布 在Linux系统中用到的都
2016-10-12 19:33:03
352
原创 3-05 嵌入式Linux内核模块开发
一. 内核模块基础1. 基本概念 Linux内核的整体结构非常庞大,使用组件的方法分为两种,一是把组件编译进内核文件(zImage或uImage),但会导致占用内存过多;二是把需要用到的内核组件在需要用到的时候通过动态的方式加载进内核。 内核模块本身并不被编译进内核文件,可以根据需求,在内核运行期间动态地安装或卸载,因此,可以更加有效的节省内存空间。2. 安装于卸
2016-10-11 20:44:29
307
原创 3-04 嵌入式Linux根文件系统制作与挂载
1. 建立根文件系统目录与文件 1.1 创建目录 #mkdir rootfs //根文件系统目录名可随便取,一般为rootfs #cd rootfs #mkdir bin dev etc lib proc sbin sys usr mnt tmp var #mkdir usr/bin usr/lib usr/sbin /lib/modules
2016-10-11 20:39:40
314
原创 3-03 嵌入式Linux内核制作
一. Linux内核简介1. 系统架构 1.1 Linux系统架构 Linux系统由用户空间和内核空间两部分构成,用户空间包括用户应用程序和C库,而内核空间包含了系统调用接口、狭义上的内核以及体系结构相关代码。 1.2 Linux内核架构 现代CPU通常实现了不同的工作模式,如ARM实现7种工作模式(usr、fiq、irq
2016-10-11 20:36:57
466
原创 3-02 U-Boot命令
1. 编译U-Boot 1.1 把相关代码文件夹里面的uboot.tar拷进Linux进行解压 1.2 配置U-Boot的顶层Makefile,找到目标开发板config,参考UBoot操作手册。 /210 找到TQ210_config :....... 回到终端,输入make TQ210_config 1.3 编译U-Boot(
2016-10-11 20:25:22
284
原创 2-27 shell脚本编程
(本节笔记的实验代码,在这里)1. 基本概念 脚本是一个包含一系列命令序列的文本文件。当运行该脚本文件时,文件中包含的命令序列将得到自动执行。 2. 脚本编程技术 2.1 基本结构『 #!/bin/sh ......
2016-09-20 10:19:06
303
原创 2-26 守护进程程序设计
(本节笔记的实验代码,在这里)1. 基本概念 守护进程,也就是daemon(精灵)进程,是Linux中的一种服务进程。守护进程具有以下特点: 1.1 不占用控制终端,守护进程都在后台运行。([root]#./app &) 1.2 独立于控制终端。一般进程有对应的TTY(如PTS/8),但守护进程没有对应的控制终端,ps aux命令查看守护进程
2016-09-20 10:12:25
378
原创 2-25 并发服务器程序设计
(本节笔记的实验代码,在这里)1. 并发服务器程序设计原因 采用轮询方式接收来自客户端的连接请求,服务器端只能按顺序处理数个客户端的连接请求,也就是只能处理完A客户端的连接和数据收发后,才能按顺序继续处理B和C的客户端的请求。2. 改善方法 服务器端采用多进程或多线程的方式,来同时并发处理来自多个客户端的连接请求。(若是TCP采用多进程方
2016-09-20 10:05:35
325
原创 2-24 UDP网络程序设计
(本节笔记的实验代码,在这里)1. UDP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 接收数据 ——>recvfrom(); 发送数据 ——>sendto(); 结束连接 ——>close();
2016-09-14 11:30:33
306
原创 2-23 TCP网络程序设计
1. TCP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 监听端口 ——>listen(); 等待连接 ——>accept();
2016-09-14 10:54:04
407
原创 2-22 网络协议分析及Linux网络编程模型
1. Linux网络模型/* 网卡驱动在OSI模型中属于数据链路层,在TCP/IP中属于网络接口层 */2. 协议分析 2.1以太网协议中协议和协议之间的关系 网络协议包含: 1. 多条规则 2. 数据包的格式
2016-09-14 10:33:08
497
原创 2-21 多线程同步编程
(本节笔记的实验代码,在这里)1. 基本概念 多个线程按照规定的顺序来执行,即为线程同步。 2. 条件变量函数学习 2.1 初始化条件变量 函数名: pthread_cond_init 函数原型: man pthread_cond_init
2016-09-14 09:48:57
265
原创 2-20 多线程程序设计
1. 线程基本概念 线程与创建它的进程共享代码段和数据段,并拥有自己独立的栈,是“轻量级”的进程。 2. 函数学习 2.1 创建线程 函数名: pthread_create 函数原型: man pthread_create intpthread_c
2016-09-14 09:07:45
334
原创 2-19 消息队列通信
(本节笔记的实验代码,在这里)1. 基本概念 消息队列是一个消息链表,每一条消息可看作一个记录,具有一定的格式的结构(struct)。一个进程向队列添加新消息,另一些进程可以从队列中读走消息,消息读走好就消失了。因此消息队列通讯作为IPC(进程间通信)存在。2. 函数学习 2.1 创建/打开消息队列 函数名:
2016-09-14 08:39:45
272
原创 2-18 共享内存通信
(本节笔记的实验代码,在这里)1. 基本概念 共享内存是IPC机制中的一种,作用是使得两个不相关的进程访问同一段内存,是一种进程间传输数据的一种有效方式。 2. 函数学习 2.1 创建/获取共享内存 函数名: shmget 函数原型: man shmget
2016-09-13 20:37:19
303
原创 2-17 信号同步编程
(本节笔记的实验代码,在这里)1. 基本概念: 进程间的同步是指一组并发进程进行互相合作,互相等待,使得各进程按照一定的顺序执行的过程。2. 生产者与消费者问题 2.1 信号量sem_val初始值设为0 2.2 生产者每生产好一件产品,就sem_val + 1(释放信号量) 2.3 消费者开始因sem_val = 0而阻塞,
2016-09-13 20:01:30
272
原创 2-16 信号量互斥编程
(本节笔记的实验代码,在这里)1. 信号量 1.1 基本概念:主要用于保护临界资源(进程互斥),进程可以根据此判定是否能够访问某些共享资源。除了用于访问控制以外,还可用于进程间的同步。 1.2 分类:第一种是二值信号,只能取0或1;第二种是计算信号量,可取任意非负值。2. 函数学习 2.1 创建信号量集合 函数名:
2016-09-13 19:19:01
276
原创 2-15 信号通信编程
(具体的实验代码,在这里)1. 基础理论 1.1 信号(signal):进程最古老的通信方式———————————————————| 进程A/内核 | 进程B || 1.选择信号 |
2016-09-13 16:37:44
301
原创 2-14 有名管道通信
(本节笔记的实验代码可参考这里,不过,应该再可以优化一下,好像有bug)1. 有名管道的基本概念——FIFO文件,可用open,read,write等操作方式。2. 与普通的文件的区别: 读取FIFO文件的进程只能以“RDONLY”方式打开FIFO文; 写FIFO文件的进程只能以“WRONLY”方式打开FIFO文件; FIF
2016-09-13 15:03:45
420
原创 2-13 无名管道通信
1. Linux中进程间通信(IPC:Inter-Process Communication ) 基本原理 1.1 作用: 数据传输,一个进程需要把数据发送到另一个进程。 资源共享,多个进程共享同样的资源。 通知事情,一个进程需要向另一个(组)进程发送消息,通知它们发生了某件事(例如生产者消费者) 进程控制
2016-09-13 11:13:10
328
原创 2-12 多进程程序设计
(本节笔记接上一节的进程控制,继续学习多进程的程序设计函数,详细的实验代码在这里)1. 创建进程 函数名: fork 函数原型: pid_t fork ( void ); 函数功能: 创建一个子进程
2016-09-13 09:36:48
457
原创 2-11 进程控制理论
1. 进程的概念:一个具有独立功能的程序的一次运行。 程序的概念:存放在存储器中的一段代码2. 进程的特点:动态性、并发性、独立性、异步性3. 进程的状态:4. 进程的ID(PID):标示进程的唯一数字 父进程ID(PPID) 启动进程的用户ID(UID)5. 进程的互斥 当有若干进程都要使用某一资源时,因一
2016-09-13 09:35:21
276
原创 2-10 时间编程
1. 基本概念——时间类型 UTC:Coordinated Universal Time(世界标准时间) GMT:Greenwich Mean Time(格林威治标准时间) Calendar Time:日历时间:从1970年1月1日0时0分0秒到现在所经历的秒数总和。2. 函数学习 2.1 获取日历时间 函数名:
2016-09-12 18:46:09
234
原创 2-9 库函数调用方式文件编程
1. 基本概念 1.1 ——C库函数 独立于具体的操作系统,无论是在Linux、Windows或其他OS都能使用C库函数,提高了程序的移植性。 1.2 ——流 系统(程序)对文件(内存、网络连接或某个设备)进行数据的读写操作。 1.3 ——文件指针 类似于系统调用中的文件描述符FD,在库函数中使用FILE类
2016-09-12 08:07:31
534
原创 2-8 系统调用方式的文件编程
1. 基本理论 在Linux中,所有打开的文件对应一个数字,该数字由系统自动分配,称为文件描述符。2. 文件操作 2.1 打开文件 函数名: open 函数原型: int open (const char *pathname, int flags);
2016-09-09 10:30:46
416
原创 2-6 静态函数库和动态函数库的建立
1. 函数库 Linux应用程序设计中,用到的外部函数主要由函数库和系统调用提供,函数库按照链接方式的不同,可分为静态链接库和动态链接库两种。2. 区别 静态链接库:在程序编译时,把库一起链接进程序,最后生成的可执行文件体积变大,但以后就不需要外部提供这个库,切运行速度更快。 动态函数库:在编译时不链接,在程序运行时才把动态库加
2016-09-09 10:05:09
351
原创 2-5 Linux编程规范
1. 文件头,如/*************************************** 文件名: addr.c ** 创建者: xyz ** 创建时间:20150606 ** 程序说明:打印
2016-09-09 09:34:50
269
原创 2-4 Linux应用程序地址分析
Linux应用程序在内存中包括几个段,分别是:代码段、数据段、bss断、堆(heap)和栈(stack)(涉及到链接器脚本,参考 1-1-4 链接器脚本)(一下的地址布局分析是针对32bit系统)1. 地址布局 1.1 从低地址到高地址,分别是:代码段、数据段、bss段和堆栈 1.2 堆向内存高地址生长,栈向内存低地址生长2. 查看范例程序地址分布的
2016-09-09 07:58:38
196
原创 2-3 Coredump程序故障分析
1. 定义:核心转存,当程序运行过程中发生异常时,Linux把程序出错时的内存内容存储在一个Core文件中。2. 处理对象:Segment fault(段错误)3. 产生原因:数组访问越界、访问空指针、栈溢出、修改只读内存等4. 用法:先打开ulimit -c unlimited 这个选项如果打开了,就有可能产生大量的文件,因此默认状态下是关闭的
2016-09-08 21:33:05
330
原创 1-17 触摸屏原理及基于S3C2440的代码实现
(本节笔记的实验代码,在这里:https://github.com/elvinsys/arm_tq2440/tree/master/1_uboot/1-17.touchscreen)一、 原理解析 1. 分类:电阻式、电容式、红外线技术、表面声波技术、矢量压力传感技术;现代主要用到电阻式和电容式两种触摸屏。 2. 电阻屏工作原理: 当手指触屏是,两
2016-09-08 19:58:07
722
原创 1-16 LCD的原理与应用
一、 LCD的工作原理解析 1. LCD硬件体系结构 1.1 液晶的概念 属于一种有机化合物,分子形态为长棒状,在不同的电流作用下,分子会做有规律的旋转,对光线产生一定的控制形成一个像素,而多个像素构成完整的图像。 1.2 分类:STN、GF、TFD、还有常用的TFT 1.3 LCD驱动芯片
2016-09-08 14:56:44
538
原创 1-15 DMA的原理和应用
(详细的实验代码,请参看https://github.com/elvinsys/arm_tq2440/tree/master/1_uboot/1-15.dma)一、 DMA原理分析 1. DMA(Direct Memory Access)直接内存存储,用于内存到内存,或者内存到外设(接口、芯片寄存器等) 2. DMA控制器:2440为4通道;6410为四控制器,每个控
2016-09-08 14:25:43
494
原创 1-14 串口在S3C2440上的原理、配置与驱动实现
一、 基本概念 1. 作用:作为数据传输的途径,或者作为控制台来提供用户对设备的控制方式 2. 通讯格式的几个概念 2.1 波特率:每秒传输bit的个数,常用的波特率有38400/115200 2.2 常用的参数: 起始位:当线路空闲时,电平为高,一旦检测到一个下降沿,则视为一个起始位
2016-09-08 08:12:02
1143
原创 1-13 NandFlash的原理与实践
一、 NandFlash的原理解析 1. NandFlash一般充当的是嵌入式系统中存放数据的“硬盘”的角色。 2. 分类 SLC(Single Level Cell):单层式存储,在存储格上只存放一位数据 MLC(Multe Level Cell) :多层式存储,在存储格上则能存放两位数据 3. SLC与MLC的对比
2016-09-07 18:40:03
618
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人