I.MX6U嵌入式Linux应用编程学习
目录
- I.MX6U嵌入式Linux应用编程学习
- 〇、备忘
- 0.0 本文大写字母缩写说明
- 0.1 C编译
- 0.2 NFS与文件夹挂载
- 一、应用编程概念
- 1.1 系统调用
- 1.2 库函数
- 1.3 标准C语言函数库
- 1.4 传参main函数
- 二、文件I/O基础
- 2.1 文件描述符
- 2.2 静态文件
- 2.3 动态文件
- 2.4 返回错误处理
- 2.5 退出函数
- 2.6 空洞文件
- 三、标准I/O库
- 四、文件属性与目录
- 4.1 Linux系统文件类型
- 五、字符串处理
- 六、系统信息与系统资源
- 七、信号
- 基本概念
- 八、进程
- 8.1 概念
- 8.2 子进程
- 8.3 进程状态与进程关系
- 8.4 守护进程
- 8.5 进程间通信
- 九、线程
- 9.1 概念
- 线程同步
- 十、高级I/O
- 十一、网络基本知识
- 11.1 网络通信三个层次
- 11.2 OSI七层模型
- 11.3 TCP/IP五层/四层模型
- 11.4 IP地址
- 11.5 TCP/IP协议
- 11.6 端口号
- 应用一、LED
- 1.1 应用层操控硬件的两种方式
- 应用二、视频监控
- 2.1 流媒体传输协议
- 2.2 RTMP简介
- 应用三、4G模块-EC20
- 3.1 4路ttyUSB
- 3.2 ppp拨号上网
〇、备忘
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 库函数
- 存放在
P: /lib
目录
1.3 标准C语言函数库
- Linux使用glibc(GNU 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
十一、网络基本知识
11.1 网络通信三个层次
- 硬件层
- 网卡设备
- 手法网络数据
- 驱动层
- Linux内核网卡驱动
- 应用层
- 内核提供的接口
- socket接口
- http接口
11.2 OSI七层模型
- Open System Interconnection
- 物理层
- 数据链路层
- 物理寻址
- 建立和管理节点间逻辑连接
- 差错检测
- 接收来自物理层的位流形式的数据,并封装成帧,传送到上一层
- 网络层(IP层)
- 逻辑地址寻址
- 不同网络间路径选择
- IP协议(IPv4,IPv6),ICMP,IGMP
- 传输层
- 定义传输数据的端口号
- 端到端的流控和差错校验
- TCP、UDP协议
- 端口号的端
- 会话层
- 建立、管理、终止表示层实体之间的会话
- 表示层
- 提供应用层数据编码和转换功能
- 应用层
- 为用户提供应用接口、网络服务
- 常见网络服务协议:
- HTTP
- FTP
- TFTP
- SMTP
- SNMP
- DNS
- TELNET
- HTTPS
- POP3
- DHCP
11.3 TCP/IP五层/四层模型
11.4 IP地址
-
IP地址是软件地址
-
硬件MAC地址是存储在网卡中的
- 用于局域网寻找目标主机
-
IPv4地址
- 4*8 - 32位地址长度
- 网络地址
- 主机地址
- 子网掩码
- 确定网络地址、主机地址各占多少位
- 网络标识 = IP地址 & 子网掩码
- 标识相同,就处于同一网络
-
IPv6地址(暂时不讨论)
- 8*16 - 128位地址长度
11.5 TCP/IP协议
-
TCP/IP是一个协议族,包含
- 应用层协议HTTP、FTP、MQTT
- 传输层协议TCP、UDP
-
HTTP超文本传输协议
- Hyper Text Transfer Protocol
- 浏览器作为HTTP客户端
- 通过URL向HTTP服务器(WEB服务器)发送请求
-
FTP文件传输协议
- File Transfer Protocol
-
TCP协议
- Transmission Control Protocol,传输控制协议
- 面向连接的、可靠的、基于IP的传输协议
- 工作在传输层
- 对上服务socket接口
- 对下调用IP层
- 建立连接
- 三次握手
- 四次挥手
-
UDP协议
- User Datagram Protocol
- 用户数据报协议
11.6 端口号
- 网络进程不止一个
- 如何确定是哪个进程对应的接收数据 - 端口号
应用一、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简介
-
推流端
- FFmpeg
-
流媒体服务器
- Nginx
-
拉流端
- VLC播放器
-
Nginx移植
应用三、4G模块-EC20
3.1 4路ttyUSB
3.2 ppp拨号上网
需要固化最新系统
更多推荐
I.MX6U嵌入式Linux应用编程学习
发布评论