环境描述
硬件型号: Freescale i.MX6 Ultralite (MCIMD6Y2CVM08AB XAD1910);
软件版本: ubuntu18.04 ;
内核版本: BSP-Yocto-i.MX6UL-PD19.1.1
参考资料
- Phytec官网下载地址:phyCORE-i.MX 6UL/ULL
- FtpServer:/pub/SoftWare/Linux/Bsp-Yocto-i.MX6UL/
- Wiki资料:phyCORE-i.MX6UL
- BareBox资料:User manual
- i.Mx Linux学习资料:[野火]i.MX Linux开发实战指南
环境搭建
软件安装
- Eclipse安装,安装步骤参考Eclipse 安装环境指导 / Eclipse setup guide。
- Eclipse GDB调试,参考Development Environment Guide Debugging an Example Project 章节。
- Qt安装,安装步骤参考phyCORE-i.MX6UL Qt 开发环境配置。
- FSearch,类everything官网地址。
硬件设置
- 开发板从网络启动参考开发板从网络启动 / boot board from network。
模块开发
内核编译
- 操作步骤参考文档怎样用SDK编译内核模块 / how to use SDK compile kernel module。
- 内核源码下载(下载地址)完成后,也可以通过git来管理内核源码,执行命令
git clone git://git.phytec.de/linux-mainline
和git checkout v4.14.184-phy1
加载内核源码,执行编译步骤,内核源码解压位置/opt/kernel/linux-mainline-4.14.184-phy1
。 - 在解压文件加下执行
source/opt/phytec-yogurt/BSP-Yocto-i.MX6UL-PD19.1.1/environment-setup-cortexa7hf-neon-vfpv4-phytec-linux-gnueabi
执行make ARCH=arm imx_v6_v7_defconfig
出现如下错误:
-
解决办法:
sudo apt install build-essential
-
执行
make menuconfig
出现如下错误:
-
执行
make ARCH=arm imx_v6_v7_defconfig
命令(注意:命令不能写错,否则报下图所示错误)
-
执行 make ARCH=arm zImage 出现如下错误:
安装lzop工具,执行sudo apt-get install lzop
8. 镜像编译完成后提示如下信息:
设备树
-
设备树更改,以uart为例,设备树配置在 imx6ul-phytec-segin.dtsi 文件中,设备使能在文件 imx6ull-phytec-segin-ff-rdk-nand.dts 文件中,如下图所示
-
设备树编译
make imx6ull-phytec-segin-ff-rdk-nand.dtb
内核升级
注意:开发板运行在BareBox下进行升级
- 创建tftp服务器,IP地址为192.168.3.10。
- 将内核文件zIamge、设备数文件imx6ull-phytec-segin-ff-rdk-nand.dtb放置于根目录下。
- 进入BareBox下,依次执行下列命令:
ubiattach /dev/nand0.root
ubiupdatevol /dev/nand0.root.ubi.kernel /mnt/tftp/zImage
ubiupdatevol /dev/nand0.root.ubi.oftree /mnt/tftp/imx6ull-phytec-segin-ff-rdk-nand.dtb
模块编译
- 内核模块编译,Makefile文件如下,
执行Makefile前需导入环境变量,命令如下
source/opt/phytec-yogurt/BSP-Yocto-i.MX6UL-PD19.1.1/environment-setup-cortexa7hf-neon-vfpv4-phytec-linux-gnueabi
2. 执行make
模块加载
- 对生成的.ko文件执行insmod,出现如下错误:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RpFeJfuA-1609055314370)(/api/project/8088668/files/22358993/imagePreview)]
错误原因(编译环境内核版本与开发板运行内核版本不一致)可参考链接。
解决办法:升级开发板内核,保持编译环境与运行环境内核版本一致。
模块调用
- 参考链接:Writting a Linux Kernel Module
应用开发
- 开机自启动程序,参考开机自启动一个应用/系统服务 / start a service or application when boot。
- Mqtt移植,参考资料:MQTT协议。
- Linux+cMake构建工程 未完待续
- 串口应用编程(三种模式,详细讲解参考《UNIX环境高级编程 第二版》第18章 终端I/O)
- 终端属性描述可参考ZLG产品用户手册。
- 在串口应用开发中,如果不是开发终端,只是数据传输,不处理串口数据,串口传输模式设置为原始模式,代码如下
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_oflag &= ~OPOST;
注意:此时串口打开方式要设置为阻塞模式,否则每次只能读取一个字节。设置方式如下open(fd, O_RDWR | O_NOCTTY);