U-Boot知识扫盲
U-Boot知识扫盲
序言
U-Boot 是什么
BootLoader 是引导加载程序,uboot 是其中较为常用的一个, uboot 就是一个裸机程序,一般用为初始化硬件设备为启动系统做准备,一般主要工作是初始化 DDR,但是 IMX6ULL 的 DDR 不是在 uboot 实现的。
U-Boot 源码目录解析
分析前需要先编译 uboot 源码,才会生成一些文件,源码会有许多目录,一般我们只需要重点关注一下目录即可:
arch/:存放一些与架构相关的文件。
board/:board 目录是与具体的板子相关的,我们关注下面的 freescale 目录即可。
configs/:uboot 配置文件以 defconfig 结尾,不同板子对应不同配置文件,我们在编译 uboot 之前都是先输入命令 make xxx_defconfig 命令进行配置 uboot。
顶层目录下有 README 文件,该文件描述了 uboot 的详细信息和如何编译 uboot、uboot 中各目录的含义、相应的命令等。
arch/arm/cpu/u-boot.lds 是整个 uboot 的连 ...
使用EMQX搭建MQTT服务器
使用EMQX搭建MQTT服务器
序言
早初是使用阿里云和 OneNET 平台作为 MQTT 服务器进行使用,但有些功能需要 money,所以就想着能不能自己搭建个简易的服务器来耍耍,查找资料找到 EMQX 很符合自己的需求。
EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器。
作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助您快速构建关键业务的物联网平台与应用。
EMQX 分为两个版本:开源版和商业版,这里作为学习使用,使用开源版即可,文档如下:
产品概览 | EMQX 5.0 文档
Windows安装EMQX
EMQX 支持多平台安装,这里我使用 Windows 来安装,下载地址:
Release EMQX v5.3.2 · emqx/emqx (github.com)
目前一些较新的版本好像没有 Windows 版本的。
解压得到:
当前目录下打开 Windows PowerShell 命令行窗口,输入命令
1.\bin\emqx start
启动的时候会弹出防 ...
交叉编译QT-MQTT库
交叉编译QT-MQTT库
序言
前置条件:需要有交叉编译好的 arm 环境的 qt 工具,本文不涉及。
交叉编译 qt-mqtt 库在 arm 开发板上运行 mqtt 客户端连接 mqtt 服务器。
交叉编译过程
编译出来的 Qt Mqtt 库,要使用它有两种方式,
一种是直接在项目中导入外部库和头文件
一种是将其以模块的形式部署到 Qt 的安装目录,这里采用这种,不需要每次导入外部库
下载 qt-mqtt 源码,版本需要与 qt 版本相同,下载地址:
qt/qtmqtt: Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/ (github.com)
解压得到下列文件:
123router2@ubuntu:~/third_lib/qtmqtt-5.15$ lsdist LICENSE.GPL3 qtmqtt.pro sync.profileexamples LICENSE.GPL3-EXCEPT src tests
复制头文件
先把 ...
Linux-音频驱动
Linux-音频驱动
序言
移植了 mplayer 播放器,播放视频时发现没有声音,原来是音频驱动还没移植。100ask 开发板使用到的音频芯片为 WM8690,Linux 内核已经有该驱动文件了,我们仅仅只需要使能驱动和修改设备树。
音频这一部分对于目前的自己有点困难了,网上齐全的资料也较少,这里最后在开发板上使用 aplay 不能正常播放音频文件,但是使用 mplayer 可以正常播放视频带有音频也能正常单独播放音频,倒也是解决了目前的需求,后续有能力再回头看能不能解决 aplay 的问题。
环境
硬件环境
开发板型号: 100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
**处理器架构:**恩单核 Cortex-A7
**处理器主频:**800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
本次测试的驱动:音频芯片 WM8690
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
...
autotools自动生成Makefile
autotools 自动生成 Makefile
Makefile 可以大大提高编译程序的效率,手写 Makefile 也比较麻烦,所以比较大的项目都是使用 autotools 工具来自动生成 Makefile。
流程大致如下:
Linux c 开发 - Makefile工具-CSDN博客
Linux中使用autotools自动生成Makefile_automake --add-missing automake: warnings are trea-CSDN博客
automake—configure.in/configure.am和makefile.am编写-CSDN博客
IMX6ULL-交叉编译Mplayer
IMX6ULL-交叉编译Mplayer
环境
硬件环境
开发板型号: 100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
**处理器架构:**恩单核 Cortex-A7
**处理器主频:**800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
**U-Boot:**一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
编译过程
mplayer 依赖 alsa 库(音频)和 libmad 库(对 MP3 进行解码),所以先交叉编译 mplayer 和 libmad,
交叉编译 libmad
libmad 是一个开源的 MP3 解码库,mplayer 使用 libmad 进行对 MP3 的支持。 ...
modprobe加载驱动问题
modprobe 加载驱动问题
在 Linux 系统中,驱动加载方式分为两种:静态加载和动态加载。静态加载就是把驱动程序放进内核一起编译,系统启动后之间被调用。静态加载的缺点就是调试困难,一般都是驱动程序调试稳定后再将其放进内核一起编译。动态加载是利用 Linux 的 module 特性,可以再系统启动后使用 insmod 命令或 modprobe 命令把驱动程序(.ko 文件)手动添加进内核。
insmod
insmod 加载模块时,需要指定完整的路径和模块名字,一般是在模块当前路径直接加载。不会自动处理模块的依赖关系,如果当前加载的模块依赖其他模块,则会报错,需要手动加载这些依赖模块。
modprobe
modprobe 加载模块时,不需要指定路径,它会到默认目录下例如: /lib/modules/$(uname -r)/ 进行查找模块。可以自动加载所需要的依赖模块。
根文件系统是新的话,可能没有这个默认目录,我们使用 modprobe 加载时会提示:
12/24_gt911 # modprobe gt911.komodprobe: can't change direct ...
Linux-触摸屏驱动
Linux-触摸屏驱动
环境
硬件环境
开发板型号:100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
处理器架构:恩单核 Cortex-A7
处理器主频:800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
本次测试的驱动:GT911 触摸屏芯片
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
U-Boot:一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
序言
一开始是电阻触摸屏,但是只能单点触摸,后面推出了电容触摸屏,支持多点触摸,后续的电阻触摸屏也支持多点触摸了,但是电阻屏需要手指给予一定的压力才有反应,而电容屏只需要手指轻触即可。
工作原理
电容触摸:电容屏中有一个控制芯片,它会周期性产生驱动信号,接收电极接收到信号,并可测 ...
Linux系统移植
Linux 系统移植
序言
Linux 学了有些时间了,手上的开发板很多功能都提前做好了,对初学者挺友好的,但是为了学到更到东西,就来试试移植下新的 Linux 系统到开发板上。
环境
硬件环境
开发板型号: 100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
**处理器架构:**恩单核 Cortex-A7
**处理器主频:**800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
U-Boot:一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
Linux 系统移植过程概述
Linux 系统移植需要以下三个部分:
bootloader:用于启动 Linux 内核。常用 bootloade ...
Linux-LCD驱动
Linux-LCD驱动
环境
硬件环境
开发板型号: 100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
处理器架构:恩单核 Cortex-A7
处理器主频:800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
本次测试的驱动:7 寸 LCD 屏幕
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
U-Boot:一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
OLED 和 LCD
OLED(Organic Light-Emitting Diode,有机发光二极管)屏幕中的每个像素点都能自发光,当电流通过时,有机材料层发光。
OLED 屏幕响应时间更快
OLED 不需要背光层,可以关闭对应像素发光,降低功耗
OLED 频闪现象明显, ...




