展示视频
第一章:环境搭建
1.下载BSP和交叉编译工具链
创建项目目录
1 2 3 cd ~/mkdir imx6ullcd ./imx6ull/
设置git,如果未安装git,可以通过 sudo apt install git 来安装
1 2 git config --global user.email "zhou@qq.com" git config --global user.name "zhou"
git下载交叉编译工具链和BSP(出现错误一般是网络问题,检查网络多试几次)
1 2 3 4 5 6 git clone https://e.coding.net/codebug8/repo.gitmkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk ../repo/repo init -u https://gitee.com/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml --no-repo-verify ../repo/repo sync -j8
上述命令执行完毕的时候,ls一下,应该是这些文件
1 2 book@100ask:~/imx6ull/100ask_imx6ull-sdk$ ls Buildroot_2020.02.x Busybox_1.30.0 DevelopmentEnvConf Linux-4.9.88 NoosProgramProject ToolChain Uboot-2017.03 Uboot-2018.03
编译构建本项目需要借助cmake工具来自动生成Makefile文件来make整个工程 使用apt安装的cmake版本比较旧,这里演示如何手工编译安装新版的cmake 需要自己手动到官网去下载一个较新的cmake源码压缩包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 cd ~/imx6ullmkdir libcd ./lib tar -zxf cmake-3.30.2.tar.gzcd ./cmake-3.30.2/sudo apt install openssl sudo apt install libssl-dev ./configure --prefix=$(pwd )/tmp make -j8 make install sudo ln -s $(pwd )/tmp/bin/cmake /usr/bin/cmake sudo rm /usr/bin/cmake
2.配置环境变量
键盘切换大写,按两下G,跳转到文件结尾,将以下内容复制到文件尾部,按小写i插入数据 粘贴完成之后按两下ESC,输入:wq保存退出
1 2 3 export ARCH=armexport CROSS_COMPILE=arm-buildroot-linux-gnueabihfexport- export PATH=$PATH :/home/book/imx6ull/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
修改完之后执行以下命令使其生效
3.搭建源码编译环境 建一个放置源码的目录,后续项目的源码放在这里
1 2 3 cd ~/imx6ullmkdir xf_projectcd ./xf_project
(附加)CMake文件内容补充 CMakeLists.txt的内容如下:
1 2 3 4 5 6 7 8 9 cmake_minimum_required(VERSION 3.12) project(xf_project)set (CMAKE_C_COMPILER "/home/book/imx6ull/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc" CACHE STRING "Updated variable" FORCE) SET(GCC_USER_LINK_FLAGS "-lm" ) add_executable(${PROJECT_NAME} "sys/main.c" ) target_link_libraries(${PROJECT_NAME} PRIVATE ${GCC_USER_LINK_FLAGS} )
4.编译项目的第一个程序 接下来我们在自己的PC机上编写代码,然后传到ubuntu进行交叉编译 编写好CMakeLists.txt之后,按如下步骤进行编译
1 2 3 4 5 6 7 8 9 cd ~/imx6ull/xf_project mkdir build cd ./build cmake .. make -j8
5.硬件 开发项目的硬件资源有:imx6ull开发板,IO拓展板,超声波模块,S90舵机模块,AT24C02模块,DHT11模块,HS0038红外遥控器,USB免驱摄像头
第二章:UI界面设计 1.移植并配置lvgl 克隆lvgl库和lvgl_drivers库,这两个库均选择8.3版本
1 2 git clone -b v8.3.0 https://github.com/lvgl/lvgl.git git clone -b v8.3.0 https://github.com/lvgl/lv_drivers.git
配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 文件开头: if 0 改为 if 1 #define LV_MEM_SIZE (1024U * 1024U) #define LV_USE_PERF_MONITOR 1 #define LV_USE_MEM_MONITOR 1 文件开头: if 0 改为 if 1 #define USE_FBDEV 1 #define FBDEV_PATH "/dev/fb0" #define USE_EVDEV 1 #define EVDEV_NAME "/dev/input/event1" #define LV_TICK_CUSTOM 1 #if LV_TICK_CUSTOM #define LV_TICK_CUSTOM_INCLUDE <stdint.h> #define LV_TICK_CUSTOM_SYS_TIME_EXPR (custom_tick_get()) #endif
1 2 mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
关闭开发板自带GUI的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 ls /etc/init.d/S* [root@100ask:/mnt/imx6ull]# ls /etc/init.d/S* /etc/init.d/S01syslogd /etc/init.d/S09modload /etc/init.d/S40network /etc/init.d/S50mosquitto /etc/init.d/S80dnsmasq /etc/init.d/S02klogd /etc/init.d/S10udev /etc/init.d/S44modem-manager /etc/init.d/S50pulseaudio /etc/init.d/S98swupdate /etc/init.d/S02sysctl /etc/init.d/S20urandom /etc/init.d/S45network-manager /etc/init.d/S50sshd /etc/init.d/S99myirhmi2 /etc/init.d/S05lvgl /etc/init.d/S30dbus /etc/init.d/S49ntp /etc/init.d/S50telnetmv /etc/init.d/S05lvgl / mv /etc/init.d/S99myirhmi2 / reboot
2.页面管理器设计 3.主界面设计 加载图片背景
1 2 https://lvgl.io/tools/imageconverter
交叉编译freetype
1 2 3 4 5 6 7 8 9 10 11 ./configure --host=arm-buildroot-linux-gnueabihf --prefix=$PWD /tmp --with-harfbuzz=no make -j12 make installcp -drf $PWD /tmp/lib/* /home/book/imx6ull/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/cp -drf $PWD /tmp/include/* /home/book/imx6ull/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/
制作图标按键
1 2 3 4 5 6 7 8 https://fontawesome.com/search?o=r&s=solid&f=classic https://lvgl.io/tools/fontconverter https://www.cogsci.ed.ac.uk/~richard/utf-8.cgi
第三章:功能模块设计 1.USB摄像头编程及其页面设计 2.简易相册系统的设计 修改lv_conf.h
1 2 3 4 5 6 7 8 9 10 11 #define LV_USE_SJPG 1 #define LV_USE_FS_STDIO 1 #if LV_USE_FS_STDIO #define LV_FS_STDIO_LETTER 'S' #define LV_FS_STDIO_PATH "" #define LV_FS_STDIO_CACHE_SIZE 0 #endif
3.超声波模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cd /home/book/imx6ull/100ask_imx6ull-sdk/Linux-4.9.88 make mrproper make 100ask_imx6ull_defconfig make zImage -j8 make dtbs make zImage -j12 -C /home/book/imx6ull/100ask_imx6ull-sdk/Linux-4.9.88/ make dtbs -j12 -C /home/book/imx6ull/100ask_imx6ull-sdk/Linux-4.9.88/cp /home/book/imx6ull/100ask_imx6ull-sdk/Linux-4.9.88/arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs/imx6ull/echo "7 4 1 7" > /proc/sys/kernel/printk
4.AT24C02模块 IIC测试命令