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 频闪现象明显, ...
Linux-SPI-ICM20608
Linux-SPI-ICM20608
环境
硬件环境
开发板型号: 100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
处理器架构:恩单核 Cortex-A7
处理器主频:800MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
本次测试的驱动:ICM20608 六轴传感器
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
U-Boot:一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
ICM20608
ICM20608 是由 InvenSense 公司生产的一款 6 轴惯性测量单元(IMU),它集成了 3 轴陀螺仪和 3 轴加速度计。这款传感器广泛应用于需要精确运动跟踪的场合,比如无人机、机器人、智能手机和可穿戴设备等。
陀螺仪支持 X ...
Linux-I2C-AP3216C
Linux-I2C-AP3216C
环境
硬件环境
开发板型号:100ask_imx6ull_pro 开发板
处理器类型:NXP IMX6ULL
处理器架构:恩单核 Cortex-A7
处理器主频:800 MHZ
内存容量:512 MB DDR3
存储介质:4GB eMMC
本次测试的驱动:AP3216C 传感器芯片
软件环境
宿主机
宿主机操作系统:Ubuntu 18.04
交叉编译器:100ask 提供的工具链 arm-buildroot-linux-gnueabihf- 支持的最低内核版本:4.9.0
开发板
U-Boot:一开始用的 NXP 官方提供的版本但不能正常启动内核,后改为 100ask 提供的版本
内核版本: NXP 提供的 4.9.88 版本
根文件系统类型:BusyBox 1.29.0
AP3216C 介绍
AP3216C 是一款由敦南科技研发的高度集成的三合一环境传感器组件,集成了环境光传感器(ALS——Ambient Light Sensor)、接近传感器(PS——Proximity Sensor)和红外 LED(IR LED——Infra ...
Linux-SPI驱动
Linux-SPI驱动
序言
SPI 具体通信协议本文不涉及,本文主要介绍在 Linux 中 SPI 的驱动框架。
SPI 有四条线:SCLK、MOSI、MISO、SS/CS
SCLK:时钟线
MOSI:主机数据输出从机数据输入
MISO:主机数据输入从机数据输出
SS/CS:片选信号,由主机控制
SPI 通信时,SPI 的片选信号可以作为硬件片选与软件片选。
硬件片选:如果选择使用硬件片选的方式,则在数据传输时,CS 片选信号的电平硬件上会拉低。当数据传输结束后,硬件上CS片选信号的电平拉高。
软件片选:软件片选即 SPI 通信过程中, CS 片选信号需要在软件上做处理,也就需要嵌入式开发者在数据传输前手动(程序中)拉低 CS 片选信号的电平,在数据传输结束后,也需要软件拉高 CS 片选信号的电平。
SPI 驱动框架
Linux SPI 驱动可分为:SPI 总线驱动和 SPI 设备驱动。
SPI 总线驱动:主要包含 SPI 硬件体系结构中适配器(SPI 控制器)的控制,用于产生 SPI 读写时序。
SPI 设备驱动:通过 SPI 主机驱动与 CPU 交换数据。
SPI 设 ...
Linux-I2C驱动
Linux-I2C 驱动
序言
I2C 具体通信协议本文不涉及,本文主要介绍在 Linux 中 I2C 的驱动框架。
I2C 有两条信号线:SCL 和 SDA。
SCL:时钟线,数据收发同步
SDA:数据线,传输具体数据
I2C 驱动框架
Linux I2C 驱动由三部分组成:I2C 核心、I2C 总线驱动、I2C 设备驱动。
I2C 核心层驱动作为顶层驱动,管理整个I2C子系统,并提供了基本的I2C操作接口。
I2C 适配器驱动负责与底层硬件的 I2C 控制器进行交互,通过适配器驱动,I2C总线核心驱动能够与硬件进行通信。
I2C 设备驱动则针对具体的 I2C 设备编写,实现了对设备的初始化、读写数据等操作。
I2C 核心(I2C Core Driver)
I2C 核心负责管理 I2C 总线适配器和设备,提供 I2C 总线驱动和设备驱动和注册、注销方法,完成 I2C 设备和 I2C 驱动匹配过程。这一部分不涉及硬件的操作,一般由系统厂编写。
I2C 核心中主要函数如下:
12345678910111213141516// 1.i2c_adapter 注册/注销函数int i2 ...