vector
vector操作方法:sort、remove_if、find、erase等。
AAC音频格式详解
1、格式头头名字叫ADTS,如下格式:
1aac_data:ff f9 6c 40 16 ff fc 1 8 9e d8 12 76 2c 12 41 e8 ff 0 43 5d 43 49 48 5 92 b1 b2 85 ae ce 47 65 93 15 c6 cb a0 a8 82 b7 a 4e e0 cf 15 99 b0 66 fc c6 79 5e 6a 7e 74 93 1e 4d 9b 5c 4e f2 ca 7d d1 3a 77 b3 6b 29 54 51 bc fe 9e 72 77 91 19 ab 18 85 ad 10 9c 56 b6 87 6b d4 40 14 e5 d5 99 a 4b 1f 5d
以ff f9开头。储存了音频的采样率、声道数、采样位数等信息。长度为7个字节。
如果要将 AAC 数据通过 RTP 发送,一般都需要 ADTS。如果要写入 .aac 文件供播放器识别,也需要 ADTS。如果要写入 MP4,则应去掉 ADTS,改用 AAC LATM 或容器本身的描述方式。
第一个字节固定ff。
mx6ull的uboot--2023版本移植
获取uboot源码https://github.com/nxp-imxnxp官方维护的仓库拿到源码,编译。略
采用和我芯片一样的模板编译编译mx6ull_14x14x_evk_defconfig编译后直接搜索mx6ull_14x14x_evk_defconfig
和之前移植有一些心得arch/arm/dts中,添加自己的设备树文件后,要在这个文件夹下有个makefile中添加上自己的设备树这里改好还要去arch/arm/mach-imx/Kconfig中添加自己的设备树配置项,不然设备树还是编译不到。里面还要配置自己板子的Kconfig
mx6ull的linux移植
下载源码https://github.com/nxp-imxnxp官方维护的仓库
编译编译要选择的模板目录载arch/arm/configs/下,模板选择imx_v6_v7_defconfig
tftp采用网络下载的方法,
1sudo apt-get install tftpd-hpa # Debian/Ubuntu
创建目录然后修改配置文件
1sudo vim /etc/default/tftpd-hpa
下面为配置
123456789101112131415 cat /etc/default/tftpd-hpa# /etc/default/tftpd-hpa# 两个配置TFTP_USERNAME="tftp"TFTP_DIRECTORY="/home/ygc/Desktop/project/tftp"TFTP_ADDRESS=":69"TFTP_OPTIONS="-1 -c -s"TFTP_USERNAME="tftp"TFTP_DIRECTORY= ...
mx6ull编译器选择
mx6ull编译器选择https://github.com/nxp-imxnxp官方维护的仓库
属于arm架构,armv7a系类。支持硬件浮点运算。需要系统。可选的编译器:在Linaro官网下载交叉编译工具链:https://www.linaro.org/downloads/arm官方的:https://developer.arm.com/downloads/-/gnu-a
mx6ull的uboot--2024版本移植
存在的问题,uboot的tftp下载速度太慢
移植uboothttps://github.com/nxp-imxnxp官方维护的仓库拿到源码,编译。略
编译。拿到板子, 选一个厂家的板子的配置,编译。
1make mx6ull_14x14_evk_defconfig
编译完成后直接搜索mx6ull_14x14_evk_defconfig
找到配置文件,复制一份。在配置文件中修改:
12345678910# 板子名字CONFIG_TARGET_MX6ULL_NARO=y# CONFIG_LDO_BYPASS_CHECK is not setCONFIG_SYS_I2C_MXC_I2C1=yCONFIG_SYS_I2C_MXC_I2C2=yCONFIG_DM_GPIO=y# 修改设备树CONFIG_DEFAULT_DEVICE_TREE="imx6ull-naro"
这个文件中最终要的就是指定设备树和boot的dtb文件,以及修改设备树名字。剩下的就是根据编译过的文件创建一份,准备自己的修改
下面为编译的脚本
1234567891011121314151617181 ...
交叉编译器
交叉编译器详解交叉编译工具链的命名规则反映了目标架构、操作系统、ABI特性及工具链提供商等关键信息。理解命名规则有助于快速识别工具链的适用场景和特性。以下是常见规则及示例:
一、标准GNU工具链命名格式1<架构>-<厂商>-<系统>-<ABI>-<工具>
核心字段含义:
架构(Architecture)目标芯片的架构类型,常见值:
arm/aarch64:ARM 32/64位架构
x86_64/i686:x86 64/32位架构
riscv64/riscv32:RISC-V 64/32位架构
mips/powerpc:MIPS/PowerPC架构
厂商(Vendor)工具链提供商或定制者,常见值:
none:通用裸机(无操作系统)工具链
linux:针对Linux系统的工具链
unknown:未知/通用厂商
特定厂商名(如 uclibc、musl)
系统(System)目标操作系统或环境:
linux:适用于Linux系统 ...
设备与模块
设备类型主要设备类型在Linux系统中,设备被抽象为文件,通过文件系统进行管理。根据设备的功能和特性,主要分为以下三种类型:
1. 字符设备(Character Device)
定义:以字符流(字节流)的形式传输数据,数据的读取和写入是顺序的、无缓冲的,不支持随机访问。
特点:
数据传输实时性强,常用于单次少量数据交互的场景。
不支持通过文件系统的lseek命令随机定位读写位置。
常见设备:
键盘、鼠标、串口(如/dev/ttyS0)、终端(如/dev/tty1)、打印机等。
部分传感器设备(如温度传感器、串口通信设备)。
设备文件标识:
在/dev目录下,设备文件的类型标识为c(通过ls -l命令查看)。
示例:crw-rw-r-- 1 root root 1, 3 May 23 08:00 /dev/null(c表示字符设备)。
2. 块设备(Block Device)
定义:以数据块(Block,如4KB为一个块)为单位传输数据,支持随机访问(可通过块地址直接定位数据),通常有数据缓冲机制。
特点:
适合大批量数据的快速读写,如磁盘存储。
支持文件系统的创建(如EX ...
块IO层
块块设备和字符设备在 Linux 系统中,块设备(Block Device)和字符设备(Character Device)是两种基本的设备分类,用于区分不同类型的硬件设备及其数据交互方式。它们的核心区别在于数据读写的方式、缓冲机制和应用场景。
一、块设备(Block Device)定义块设备是一种以“数据块(Block)”为单位进行随机读写的设备。数据块的大小通常为固定值(如 512字节、4KB 等),设备驱动程序会对数据进行缓冲和缓存,支持按块随机访问(即可以直接读取任意块的数据,无需按顺序)。
特点
数据交互方式
以块(Block)为最小单位读写,块大小由设备硬件决定(如硬盘的扇区通常是 512B 或 4KB)。
支持随机访问:可以直接定位到任意块进行读写,无需按顺序操作(类似数组索引)。
缓冲机制
内核会为块设备提供缓冲区(Buffer)或缓存(Cache),用于暂存数据以提高读写效率。例如,硬盘的读写操作会先经过文件系统的块缓冲区。
典型设备
存储设备:硬盘(HDD/SSD)、U盘、光盘(CD/DVD)、SD卡等。
虚拟存储 ...