I.MX6U嵌入式Linux应用编程学习
〇、备忘
0.0 本文大写字母缩写说明
B: Board 开发板串口终端T: Terminal Ubuntu命令行F: Function 函数P: Path 文件路径
0.1 C编译
- 使能环境变量
T: source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi - 查看环境变量
T: arm-poky-linux-gnueabi-gcc -v - 编译
T: $CC -o v4l2_camera v4l2_camera.c
0.2 NFS与文件夹挂载
- 挂载
B: mount -t nfs -o nolock,nfsvers=3 192.168.1.110:/home/chorgy/WorkSpace/i.MX6/NFS nfs/ - 查看
B: df - 卸载
B: umount nfs
一、应用编程概念
1.1 系统调用
1.2 库函数
1.3 标准C语言函数库
1.4 传参main函数
F: int main(int argc, char **argv)
二、文件I/O基础
2.1 文件描述符
-
某某函数的返回值 -
一个进程可打开多个文件,T: ulimit -n 指令查看一个进程可打开的最大文件数 -
打开的文件分配文件描述符是从最小的未被占用的文件描述符(1~1023)开始,关闭时释放 -
F: open() -
F: write() -
F: read() -
F: close() -
F: lseek() :返回从文件头部开始算起的位置偏移量(字节为单位),也就是当前的读写位置
2.2 静态文件
- 未打开时存储在磁盘
- 磁盘最小存储单位扇区sector,0.5KB
- 系统一次性读取一个块block,多个扇区,是文件存取的最小单位,常见为4KB
- 磁盘分区时分为两个区域
- 数据区
- inode区,存放inode table,每个inode对应一个文件
T: ls -i 查看文件inode号T: stat xxx.c 查看某文件属性- Windows 快速格式化 就是删除inode表
2.3 动态文件
- 进程控制块PCB,Process Control Block,每个进程设置一个专门的数据结构进行管理,记录状态
- PCB有一个指针指向文件描述符表
- 文件描述符表每一个元素索引到对应的文件表
- 文件表记录文件的状态,包括i-node指针,指向inode
2.4 返回错误处理
F: strerror() ,返回对应错误编号的字符串描述信息F: perror() ,不需要传入 errno变量
2.5 退出函数
- 清除其使用的内存空间,销毁其在内核中的各种数据结构,关闭进程的所有文件描述符,并结束进程、将控制权交给操作系统
F: exit() F: _exit() ,系统调用的F: _Exit() ,与_exit() 等价
2.6 空洞文件
- 使用移位函数从中间地址开始写数据,造成空洞空间
- 有利于多线程共同操作文件
三、标准I/O库
四、文件属性与目录
4.1 Linux系统文件类型
- 普通文件
- 目录文件
- 字符设备文件、块设备文件
- 不对应磁盘文件
- 由文件系统虚拟出来的
- 由内存维护
- 路径
P: /dev/ - 符号链接文件
- 管道文件
- 套接字文件
五、字符串处理
六、系统信息与系统资源
七、信号
基本概念
八、进程
8.1 概念
- 进程: 应用程序被加载到内存中运行
- 进程号: process ID,PID,
T: ps 查看进程号 - 环境变量:
T: env 查看所有环境变量T: export xxx=xxxx 新增环境变量T: export -n xxx 删除环境变量 - 应用程序获取当前进程的环境变量
C: extern char **environ - 虚拟地址:
- 实际的物理内存有限
- 通过硬件 MMU(内存管理单元)映射到实际的物理地址空间中
- 进程与进程、进程与内核相互隔离
- 多进程能够共享内存
8.2 子进程
F: fork(void); 创建子进程- 父子进程文件共享
T: ps -aux 查看所有进程
- 开发板自带程序为进程
613 /opt/QDestop - 进程终止
- return
- exit()
- _exit()
- _Exit()
- 监视子进程
-
F: wait() -
F: waitpid() -
僵尸进程:子进程先结束 -
孤儿进程:父进程先结束
8.3 进程状态与进程关系
-
进程状态
- 就绪态
- 运行态
- 僵尸态
- 可中断睡眠状态
- 不可中断睡眠状态
- 暂停态
-
进程关系
8.4 守护进程
8.5 进程间通信
九、线程
9.1 概念
-
线程:
- 系统调度的最小单位
- 进程中有主线程
- 进程不能运行,运行的是进程中的线程
- 进程是容器,包含线程需要的数据结构、环境变量等信息
- 同一进程的多个线程共享系统的全部资源,虚拟地址空间、文件描述符、信号处理等
-
并发和并行:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接电话,这就说明你不支持并发也不支持并行,仅仅只是串行
你吃饭吃到一半,电话来了,你停下吃饭去接了电话,电话接完后继续吃饭,这说明你支持并发
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行
线程同步
十、高级I/O
应用一、LED
1.1 应用层操控硬件的两种方式
-
通过文件I/O -
设备节点方式:
P: /dev 设备节点- 字符设备文件:串口设备、音频设备
- 块设备文件:存储设备
- 设备文件就是硬件向应用层提供的接口
-
sysfs文件系统
- 挂载在
P: /sys 目录下 - 与devfs、proc一样,为虚拟文件系统
- 将内核信息以文件的方式提供给应用层
文件夹 | 说明 |
---|
./devices | 存放系统设备 | ./block | 存放块设备,与./device功能重合,已过时 | ./bus | 设备按照总线类型分类 | ./class | 设备按照功能分类 | ./dev | 设备按照设备号放置 | ./firmware | 内核固件 | ./fs | 描述系统所有的文件系统 | ./kernel | 内核可调参数 | ./module | 系统所有模块信息 | ./power | 电源选项 |
应用二、视频监控
2.1 流媒体传输协议
- RTSP,Real-Time Stream Protocol
- RTMP,Real-Time Message Protocol
- 低延迟
- 高稳定
- 支持所有摄像头格式
- 浏览器加载flash即可播放
2.2 RTMP简介
应用三、4G模块-EC20
3.1 4路ttyUSB
3.2 ppp拨号上网
需要固化最新系统
|