08 GStreamer
GStreamer基本概念GStreamer是一个跨平台的流媒体框架,采用基于管道的插件化架构,支持音视频采集、编解码、渲染等全流程处理。应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。例如摄像头采集(v4l2src)、视频编码(nvv4l2h264enc)等模块可灵活拼接,组成流水线 ElementSource 元件(数据源)产生媒体流的元素 文件源:filesrc (从文件读取) 设备源:v4l2src (摄像头, Video4Linux2), alsasrc (音频输入), pulsesrc (PulseAudio输入), audiotestsrc, videotestsrc (测试源) 网络源:udpsrc, tcpclientsrc, rtmpsrc, rtspclientsrc 特殊硬件源 (Jetson/NVIDIA):nvarguscamerasrc,...
20 sysfs
sysfs定义sysfs 是 Linux 内核提供的一个 虚拟文件系统(类似 /proc),挂载在 /sys 下 作用: 展示内核对象(kobject)及其属性给用户空间 提供用户态访问和控制硬件及内核状态的接口 支持驱动和设备管理、模块信息查看、电源管理等 特点: 虚拟文件系统,不占用实际磁盘空间 每个 kobject 对象在 sysfs 中对应一个目录 属性(attribute)以文件的形式暴露,读写这些文件会触发内核的回调函数 结构 目录 作用 /sys/class/ 按设备类别(class)组织的设备,如 net、gpio、leds 等 /sys/bus/ 按总线类型组织设备,如 pci、usb、platform 等;还包含驱动/设备信息 /sys/devices/ 所有 struct device...
10 Linux内核定时器
Linux内核定时器 在编写驱动的时候,可能也会用到定时器,比如按键消抖…由于驱动的代码是在内核态,所以就需要使用内核态的定时器,而不是用户态的定时器 Linux内核的定时器相对于以前STM32用的定时器,有以下区别: 内核定时器是软件定时器,采用系统时钟实现,并不是硬件定时器 定时器超时是由软件设置和管理的,通过内核或者应用程序来控制,而回调函数的执行是在预定的时间点或者时间间隔后发生的,不算中断 内核定时器不是周期运行的,超时后就会停止,需要手动再次开启(如果还需要用的话) 1.基本数据结构Linux内核使用如下的结构体来描述一个定时器: 12345678struct timer_list { struct list_head entry; unsigned long expires; /* 定时器超时时间,单位是节拍数 */ struct tvec_base *base; void (*function)(unsigned long); /* 定时处理函数 */ unsigned long data; /*...
03 文件IO
文件IO Linux下,一切皆文件。这句话指的是,Linux系统中,将对所有输入/输出资源(文件、管道、Socket、硬件设备)的操作都抽象成了对文件的操作。所以学习文件I/O的相关API很重要 1.文件描述符在Linux系统中,使用open()系统调用打开一个I/O资源后,会返回一个非负整数,这个非负整数就是==文件描述符==fd。后续所有的对于该资源的操作,都需要这个文件描述符。 这里我使用I/O资源而不是文件,因为打开像socket这样的资源时,并不是真的打开了一个文件,但是也会返回一个文件描述符。 Linux内核中,对每一个进程都维护一个打开文件表(struct...
09 删掉某个可执行文件相关依赖
删掉某个可执行文件相关依赖我们在用apt-get装了某个可执行文件/库之后,可能又想删掉它,可能第一时间想到的方式是用rm *的方式删,但是这样容易删不干净。既然文件是由apt-get安装的,拿再由包管理工具删掉就好了 寻找待卸载文件属于哪个包 以qemu-system-riscv64为例 法1:检查系统中通过 apt 安装的 QEMU 相关包 1apt list --installed | grep qemu 法2:查看具体包名 1dpkg -S /usr/bin/qemu-system-riscv64 卸载包12sudo apt-get remove qemu-system-riscv # 保留配置文件sudo apt-get purge qemu-system-riscv # 彻底删除(推荐)
19 有线以太网
有线以太网(Ethernet) Etheret这个词一般指的就是有线以太网,若涉及无线网络,通常会使用Wi-Fi或其他明确术语 嵌入式网络概述之前总是听到“网卡”这个词,实际上他是个非常笼统的概念包含了多个硬件。实际上需要以下的具体硬件来实现Ethernet: MAC控制器:它负责OSI体系中数据链路层的工作(以太网帧的封装、差错与流量控制、MAC地址寻址…) MAC可能位于SoC的内部,也可能外接。如果说一个SoC具备网络功能,一般指的SoC内部有MAC外设 PHY(物理层收发器)芯片:它负责OSI体系中物理层的工作: PHY一般位于SoC外部 信号转换:MAC层的数字信号 <—->...
07 TrustZone
TrustZone概述ARM TrustZone技术是所有Cortex-A系列CPU的基本功能,是通过ARM的安全扩展引入的。TrustZone从硬件层面提供安全机制,将CPU的工作状态分为Normal World(非安全世界)和Secure World(安全世界),涉及到安全相关的操作比如指纹、密码等都要在安全世界中进行,其他操作在非安全世界中运行 系统架构ARM提供了一套TrustZone技术的开源解决方案TF-A,他是一套底层固件,由于不同芯片原厂的SoC各不相同,芯片原厂一般会基于这个开源的TF-A针对自己的芯片再做一些修改,我们直接用芯片原厂修改好的就行了 前面提到了启用了ARM TrustZone后,CPU被分为2个世界,而这2个世界交互的桥梁就是ARM Trusted...
00 开发板启动方式选择
开发板启动流程Linux(Cortex A系列)芯片和STM32不一样,除了能从内部Flash启动,还可以从其他多种外部介质中启动,比如SD卡,EMMC,NAND Flash等。 芯片的启动可以分为启动方式选择、启动设备选择2个问题 启动方式以I.MAX6ULL为例,它的启动方式有4种,具体选择哪种由芯片上特定的引脚BOOT_MODE0和1决定,这点和STM32类似,STM32芯片上也有BOOT0和BOOT1这样的引脚。 通常只使用方式2和3,绝对不能使用方式1 不管是哪种方式,都依赖SoC内部的BOOT ROM 串行下载首先运行BOOT ROM中的代码,初始化基本外设,通过USB OTG或者串口的形式将代码下载到板子的DDR上,这个下载需要用NXP提供的软件MfgTool,一般用于设备最终量产时 内部BOOT模式首先运行BOOT ROM中的代码,初始化基本外设(比如SD卡这样的boot设备),再从对应的boot设备中将代码拷贝到指定的RAM(一般是DDR)中运行 Boot...
06 镜像烧写
镜像的烧写 之前一直用NFS+TFTP搭建开发环境,但实际生产环境不会用这种形式,会直接把镜像下载到存储介质中(SD/emmc…) 不同厂商的SoC烧录镜像所使用的工具,镜像的格式都不相同,所以这部分不是通用的,需要根据所用的平台来学习 我们在烧录时,不一定要把所有镜像(uboot、kernel、dtb、rootfs)都打包在一起再下载,可以分别下载各个部分 NXP平台NXP平台主要有2中方式,分别是针对USB烧录和SD卡烧录: USB烧录 MFGTool工具是NXP官方推荐的一个使用USB OTG来升级镜像的软件工具,它是NXP针对i.MX系列处理器专门使用的烧录工具,可以用来升级linux, 单独烧录某一系统分区,独立地烧录spi flash、 nor flash、sd card、nand flash,emmc等,...






