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应用编程学习相关推荐

  1. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  2. 嵌入式Linux系统编程学习之一目录结构

    嵌入式Linux系统编程学习之一目录结构 文章目录 嵌入式Linux系统编程学习之一目录结构 前言 一.Linux目录结构 前言 Linux目录结构 一.Linux目录结构 /bin:存放Linux的 ...

  3. 嵌入式Linux系统编程学习之三vi编辑器

    文章目录 前言 一.插入文本 二.删除与修改 三.光标的移动 四.查找与替换 五.块操作 六.结束编辑 前言 在Linux下编程,使用编辑器vi(vim).gedit或Emacs,编译链接器gcc,调 ...

  4. 嵌入式Linux系统编程学习之三十三网络相关概念

    文章目录 一.网络相关名词的概念 1.套接口 2.端口号 3.IP 地址 二.Socket 概念 三.Socket 类型 四.Socket 的信息数据结构 五.数据存储优先顺序的转换 六.地址转格式转 ...

  5. 嵌入式Linux系统编程学习之二十八线程的等待退出

    文章目录 一.等待线程退出 二.线程的取消 三.线程终止清理函数 一.等待线程退出   线程从入口点函数自然返回,或者主动调用 pthread_exit 函数都可以让线程正常终止.线程从入口点函数自然 ...

  6. 嵌入式Linux系统编程学习之十二守护进程

    文章目录 前言 一.守护进程的特性 二.daemon 进程的编程规则 1.创建子进程,父进程退出 2.在子进程中创建新会话 前言   daemon 运行在后台,也称作"后台服务进程" ...

  7. 嵌入式Linux系统编程学习之十一Linux进程的创建与控制

    文章目录 一.fork函数 二.进程的终止 三.wait 和 waitpid 函数 四.exec 函数族 五.system 函数 六.popen 函数 总结 一.fork函数 fork 函数原型: # ...

  8. 嵌入式Linux系统编程学习之九基于文件描述符的文件操作

    文章目录 前言 一.文件描述符 二.打开.创建和关闭文件 三.读写文件 四.改变文件大小 五.文件定位 六.原子操作 七.进一步理解文件描述符 八.文件描述符的复制 九.文件的锁定 十.获取文件信息 ...

  9. 嵌入式Linux系统编程学习之三十一线程的属性

    文章目录 前言 一.线程属性初始化 二.设置绑定属性 三.设置分离属性 四.获取线程优先级 五.设置优先级 前言   pthread_create 的第 2 个参数 attr 是一个结构体指针,结构体 ...

最新文章

  1. FM:大熊猫的肠道菌群可能并没有特化出发酵纤维素的能力
  2. 常用单词缩写(不断更新)
  3. 【JavaScript】parseInt
  4. 组件通信 eventtBus
  5. mysql2005卸载步骤,二次安装mysql步骤
  6. MOV指令在32位汇编程序和64位汇编程序下的相同与不同之处
  7. java下载好怎么验证_Java JDK下载、安装和验证
  8. 三款主流智能车机横评 吉利博越GKUI实至名归
  9. Android 第一行代码
  10. 学习《让UpdatePanel支持文件上传》系列文章的相关链接
  11. [王垠系列]GTF - Great Teacher Friedman
  12. 银行开发专业术语解释和银行系统开发架构的设计思想
  13. svn: E230001: Server SSL certificate verification failed: certificate issued for a different hostnam
  14. 【历史上的今天】7 月 1 日:分时系统之父诞生;支付宝推出条码支付;世界上第一支电视广告
  15. 条形图的几种处理方式
  16. [02]从零开始学电子技术丛书-自学电子的同学看过来
  17. 基于Java实现的几何图形处理系统
  18. Turtle 画方形 画圆 画三角形
  19. 【Python爬虫学习实践】多线程爬取Bing每日壁纸
  20. “Outlook 中的搜索结果不正确,因为缺少MapiPH.dll” 的解决方法

热门文章

  1. 最新版表情包小程序源码无需服务器
  2. 10行代码实现微信群消息同步(wxpy)
  3. JAVA 实现《捕鱼达人》游戏
  4. ACR2010_中轴型SpA患者使用TNF拮抗剂治疗后放射学进展与全身炎症消退相关
  5. ArtyA7的Hello Word创建Microblaze嵌入式系统硬件工程的问题解决
  6. U盘、移动硬盘;固态硬盘、机械硬盘
  7. 《团队-团队编程项目作业名称-成员简介及分工》
  8. Word合并所有段落再按字数划分段落
  9. 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
  10. 腾讯云域名证书下载_备案域名证书获取